Merge branch 'master' of https://github.com/PolarisSS13/Polaris into Slime_Rework_3

# Conflicts:
#	icons/mob/items/lefthand.dmi
#	icons/mob/items/righthand.dmi
This commit is contained in:
Datraen
2016-05-12 17:24:55 -04:00
265 changed files with 5101 additions and 2994 deletions

View File

@@ -24,6 +24,10 @@
/obj/machinery/atmospherics/unary/freezer/New()
..()
initialize_directions = dir
/obj/machinery/atmospherics/unary/freezer/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)

View File

@@ -25,6 +25,9 @@
..()
initialize_directions = dir
/obj/machinery/atmospherics/unary/heater/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)

View File

@@ -24,6 +24,7 @@
#define IS_TAJARA 5
#define IS_XENOS 6
#define IS_TESHARI 7
#define IS_SLIME 8
#define CE_STABLE "stable" // Inaprovaline
#define CE_ANTIBIOTIC "antibiotic" // Spaceacilin

View File

@@ -9,6 +9,7 @@
#define CUT "cut"
#define BRUISE "bruise"
#define PIERCE "pierce"
#define STUN "stun"
#define WEAKEN "weaken"

View File

@@ -27,12 +27,12 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
#define AI_CAMERA_LUMINOSITY 6
// Camera networks
#define NETWORK_CRESCENT "Crescent"
#define NETWORK_CAFE_DOCK "Cafe Dock"
#define NETWORK_CRESCENT "Spaceport"
// #define NETWORK_CAFE_DOCK "Cafe Dock"
#define NETWORK_CARGO "Cargo"
#define NETWORK_CIVILIAN "Civilian"
#define NETWORK_CIVILIAN_EAST "Civilian East"
#define NETWORK_CIVILIAN_WEST "Civilian West"
// #define NETWORK_CIVILIAN_EAST "Civilian East"
// #define NETWORK_CIVILIAN_WEST "Civilian West"
#define NETWORK_COMMAND "Command"
#define NETWORK_ENGINE "Engine"
#define NETWORK_ENGINEERING "Engineering"
@@ -41,7 +41,7 @@ var/global/defer_powernet_rebuild = 0 // True if net rebuild will be called
#define NETWORK_EXODUS "Northern Star"
#define NETWORK_MEDICAL "Medical"
#define NETWORK_MERCENARY "MercurialNet"
#define NETWORK_MINE "MINE"
#define NETWORK_MINE "Mining Outpost"
#define NETWORK_NORTHERN_STAR "Northern Star"
#define NETWORK_RESEARCH "Research"
#define NETWORK_RESEARCH_OUTPOST "Research Outpost"

View File

@@ -78,10 +78,10 @@
// Setting this much higher than 1024 could allow spammers to DOS the server easily.
#define MAX_MESSAGE_LEN 1024
#define MAX_PAPER_MESSAGE_LEN 3072
#define MAX_BOOK_MESSAGE_LEN 9216
#define MAX_PAPER_MESSAGE_LEN 6144
#define MAX_BOOK_MESSAGE_LEN 12288
#define MAX_LNAME_LEN 64
#define MAX_NAME_LEN 26
#define MAX_NAME_LEN 52
// Event defines.
#define EVENT_LEVEL_MUNDANE 1

View File

@@ -136,9 +136,15 @@
#define INCAPACITATION_RESTRAINED 1
#define INCAPACITATION_BUCKLED_PARTIALLY 2
#define INCAPACITATION_BUCKLED_FULLY 4
#define INCAPACITATION_STUNNED 8
#define INCAPACITATION_FORCELYING 16 //needs a better name - represents being knocked down BUT still conscious.
#define INCAPACITATION_KNOCKOUT 32
#define INCAPACITATION_DEFAULT (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_FULLY)
#define INCAPACITATION_ALL (INCAPACITATION_RESTRAINED|INCAPACITATION_BUCKLED_PARTIALLY|INCAPACITATION_BUCKLED_FULLY)
#define INCAPACITATION_KNOCKDOWN (INCAPACITATION_KNOCKOUT|INCAPACITATION_FORCELYING)
#define INCAPACITATION_DISABLED (INCAPACITATION_KNOCKDOWN|INCAPACITATION_STUNNED)
#define INCAPACITATION_ALL (~INCAPACITATION_NONE)
// Bodyparts and organs.
#define O_MOUTH "mouth"

View File

@@ -8,9 +8,9 @@
// unused: 0x8000 - higher than this will overflow
// Species spawn flags
#define IS_WHITELISTED 0x1 // Must be whitelisted to play.
#define CAN_JOIN 0x2 // Species is selectable in chargen.
#define IS_RESTRICTED 0x4 // Is not a core/normally playable species. (castes, mutantraces)
#define SPECIES_IS_WHITELISTED 0x1 // Must be whitelisted to play.
#define SPECIES_IS_RESTRICTED 0x2 // Is not a core/normally playable species. (castes, mutantraces)
#define SPECIES_CAN_JOIN 0x4 // Species is selectable in chargen.
// Species appearance flags
#define HAS_SKIN_TONE 0x1 // Skin tone selectable in chargen. (0-255)
@@ -19,6 +19,7 @@
#define HAS_UNDERWEAR 0x8 // Underwear is drawn onto the mob icon.
#define HAS_EYE_COLOR 0x10 // Eye colour selectable in chargen. (RGB)
#define HAS_HAIR_COLOR 0x20 // Hair colour selectable in chargen. (RGB)
#define RADIATION_GLOWS 0x40 // Radiation causes this character to glow.
// Languages.
#define LANGUAGE_SOL_COMMON "Sol Common"
@@ -29,6 +30,7 @@
#define LANGUAGE_ROOTSPEAK "Rootspeak"
#define LANGUAGE_TRADEBAND "Tradeband"
#define LANGUAGE_GUTTER "Gutter"
#define LANGUAGE_SCHECHI "Schechi"
// Language flags.
#define WHITELISTED 1 // Language is available if the speaker is whitelisted.

View File

@@ -23,6 +23,9 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
var/global/list/turfs = list() //list of all turfs
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER)
#define all_genders_text_list list("Male","Female","Plural","Neuter")
//Languages/species/whitelist.
var/global/list/all_species[0]
var/global/list/all_languages[0]
@@ -191,16 +194,22 @@ var/global/list/string_slot_flags = list(
language_keys[lowertext(L.key)] = L
var/rkey = 0
paths = typesof(/datum/species)-/datum/species
paths = typesof(/datum/species)
for(var/T in paths)
rkey++
var/datum/species/S = new T
var/datum/species/S = T
if(!initial(S.name))
continue
S = new T
S.race_key = rkey //Used in mob icon caching.
all_species[S.name] = S
if(!(S.spawn_flags & IS_RESTRICTED))
if(!(S.spawn_flags & SPECIES_IS_RESTRICTED))
playable_species += S.name
if(S.spawn_flags & IS_WHITELISTED)
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
whitelisted_species += S.name
//Posters

View File

@@ -323,3 +323,5 @@ proc/TextPreview(var/string,var/len=40)
if(48 to 57) //Numbers
return 1
return 0
#define gender2text(gender) capitalize(gender)

View File

@@ -137,7 +137,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
//Now to find a box from center location and make that our destination.
for(var/turf/T in block(locate(center.x+b1xerror,center.y+b1yerror,location.z), locate(center.x+b2xerror,center.y+b2yerror,location.z) ))
if(density&&T.density) continue//If density was specified.
if(density&&(T.density||T.contains_dense_objects())) continue//If density was specified.
if(T.x>world.maxx || T.x<1) continue//Don't want them to teleport off the map.
if(T.y>world.maxy || T.y<1) continue
destination_list += T
@@ -146,7 +146,7 @@ Turf and target are seperate in case you want to teleport some distance from a t
else return
else//Same deal here.
if(density&&destination.density) return
if(density&&(destination.density||destination.contains_dense_objects())) return
if(destination.x>world.maxx || destination.x<1) return
if(destination.y>world.maxy || destination.y<1) return
else return
@@ -1310,7 +1310,7 @@ var/mob/dview/dview_mob = new
// call to generate a stack trace and print to runtime logs
/proc/crash_with(msg)
CRASH(msg)
/proc/screen_loc2turf(scr_loc, turf/origin)
var/tX = splittext(scr_loc, ",")
var/tY = splittext(tX[2], ":")
@@ -1321,4 +1321,4 @@ var/mob/dview/dview_mob = new
tX = max(1, min(world.maxx, origin.x + (text2num(tX) - (world.view + 1))))
tY = max(1, min(world.maxy, origin.y + (text2num(tY) - (world.view + 1))))
return locate(tX, tY, tZ)

View File

@@ -121,9 +121,9 @@
/obj/machinery/door/airlock/AIShiftClick() // Opens and closes doors!
if(density)
Topic(src, list("src"= "\ref[src]", "command"="open", "activate" = "1"), 1) // 1 meaning no window (consistency!)
Topic(src, list("command"="open", "activate" = "1"))
else
Topic(src, list("src"= "\ref[src]", "command"="open", "activate" = "0"), 1)
Topic(src, list("command"="open", "activate" = "0"))
return 1
/atom/proc/AICtrlClick()
@@ -131,17 +131,17 @@
/obj/machinery/door/airlock/AICtrlClick() // Bolts doors
if(locked)
Topic(src, list("src"= "\ref[src]", "command"="bolts", "activate" = "0"), 1)// 1 meaning no window (consistency!)
Topic(src, list("command"="bolts", "activate" = "0"))
else
Topic(src, list("src"= "\ref[src]", "command"="bolts", "activate" = "1"), 1)
Topic(src, list("command"="bolts", "activate" = "1"))
return 1
/obj/machinery/power/apc/AICtrlClick() // turns off/on APCs.
Topic(src, list("src"= "\ref[src]", "breaker"="1"), 1) // 1 meaning no window (consistency!)
Topic(src, list("breaker"="1"))
return 1
/obj/machinery/turretid/AICtrlClick() //turns off/on Turrets
Topic(src, list("src"= "\ref[src]", "command"="enable", "value"="[!enabled]"), 1) // 1 meaning no window (consistency!)
Topic(src, list("command"="enable", "value"="[!enabled]"))
return 1
/atom/proc/AIAltClick(var/atom/A)
@@ -150,14 +150,14 @@
/obj/machinery/door/airlock/AIAltClick() // Electrifies doors.
if(!electrified_until)
// permanent shock
Topic(src, list("src"= "\ref[src]", "command"="electrify_permanently", "activate" = "1"), 1) // 1 meaning no window (consistency!)
Topic(src, list("command"="electrify_permanently", "activate" = "1"))
else
// disable/6 is not in Topic; disable/5 disables both temporary and permanent shock
Topic(src, list("src"= "\ref[src]", "command"="electrify_permanently", "activate" = "0"), 1)
Topic(src, list("command"="electrify_permanently", "activate" = "0"))
return 1
/obj/machinery/turretid/AIAltClick() //toggles lethal on turrets
Topic(src, list("src"= "\ref[src]", "command"="lethal", "value"="[!lethal]"), 1) // 1 meaning no window (consistency!)
Topic(src, list("command"="lethal", "value"="[!lethal]"))
return 1
/atom/proc/AIMiddleClick(var/mob/living/silicon/user)
@@ -169,9 +169,9 @@
return
if(!src.lights)
Topic(src, list("src"= "\ref[src]", "command"="lights", "activate" = "1"), 1) // 1 meaning no window (consistency!)
Topic(src, list("command"="lights", "activate" = "1"))
else
Topic(src, list("src"= "\ref[src]", "command"="lights", "activate" = "0"), 1)
Topic(src, list("command"="lights", "activate" = "0"))
return 1
//

View File

@@ -103,10 +103,6 @@
// A is your location but is not a turf; or is on you (backpack); or is on something on you (box in backpack); sdepth is needed here because contents depth does not equate inventory storage depth.
var/sdepth = A.storage_depth(src)
if((!isturf(A) && A == loc) || (sdepth != -1 && sdepth <= 1))
// faster access to objects already on you
if(A.loc != src)
setMoveCooldown(10) //getting something out of a backpack
if(W)
var/resolved = W.resolve_attackby(A, src)
if(!resolved && A && W)
@@ -127,8 +123,6 @@
sdepth = A.storage_depth_turf()
if(isturf(A) || isturf(A.loc) || (sdepth != -1 && sdepth <= 1))
if(A.Adjacent(src)) // see adjacent.dm
setMoveCooldown(5)
if(W)
// Return 1 in attackby() to prevent afterattack() effects (when safely moving items for example)
var/resolved = W.resolve_attackby(A,src)
@@ -198,15 +192,8 @@
if((LASER in mutations) && a_intent == I_HURT)
LaserEyes(A) // moved into a proc below
else if(TK in mutations)
switch(get_dist(src,A))
if(1 to 5) // not adjacent may mean blocked by window
setMoveCooldown(2)
if(5 to 7)
setMoveCooldown(5)
if(8 to tk_maxrange)
setMoveCooldown(10)
else
return
if(get_dist(src, A) > tk_maxrange)
return
A.attack_tk(src)
/*
Restrained ClickOn

View File

@@ -256,7 +256,7 @@ datum/hud/New(mob/owner)
if(ishuman(mymob))
human_hud(ui_style, ui_color, ui_alpha, mymob) // Pass the player the UI style chosen in preferences
else if(isrobot(mymob))
robot_hud()
robot_hud(ui_style, ui_color, ui_alpha, mymob)
else if(isbrain(mymob))
brain_hud(ui_style)
else if(isalien(mymob))

View File

@@ -1,7 +1,20 @@
var/obj/screen/robot_inventory
/*
/mob/living/silicon/robot/instantiate_hud(var/datum/hud/HUD, var/ui_style, var/ui_color, var/ui_alpha)
HUD.robot_hud(ui_style, ui_color, ui_alpha, src)*/
/datum/hud/proc/robot_hud(ui_style='icons/mob/screen1_robot.dmi', var/ui_color = "#ffffff", var/ui_alpha = 255, var/mob/living/silicon/robot/target)
/* var/datum/hud_data/hud_data
if(!istype(target))
hud_data = new()
/datum/hud/proc/robot_hud()
if(hud_data.icon)
ui_style = hud_data.icon*/
if(ui_style == 'icons/mob/screen/minimalist.dmi')
ui_style = 'icons/mob/screen1_robot_minimalist.dmi'
else
ui_style = 'icons/mob/screen1_robot.dmi'
src.adding = list()
src.other = list()
@@ -12,7 +25,9 @@ var/obj/screen/robot_inventory
using = new /obj/screen()
using.name = "radio"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi'
using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "radio"
using.screen_loc = ui_movi
using.layer = 20
@@ -23,7 +38,9 @@ var/obj/screen/robot_inventory
using = new /obj/screen()
using.name = "module1"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi'
using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "inv1"
using.screen_loc = ui_inv1
using.layer = 20
@@ -33,7 +50,9 @@ var/obj/screen/robot_inventory
using = new /obj/screen()
using.name = "module2"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi'
using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "inv2"
using.screen_loc = ui_inv2
using.layer = 20
@@ -43,7 +62,9 @@ var/obj/screen/robot_inventory
using = new /obj/screen()
using.name = "module3"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi'
using.icon = ui_style
using.color = ui_color
using.alpha = ui_alpha
using.icon_state = "inv3"
using.screen_loc = ui_inv3
using.layer = 20
@@ -56,7 +77,8 @@ var/obj/screen/robot_inventory
using = new /obj/screen()
using.name = "act_intent"
using.set_dir(SOUTHWEST)
using.icon = 'icons/mob/screen1_robot.dmi'
using.icon = ui_style
using.alpha = ui_alpha
using.icon_state = mymob.a_intent
using.screen_loc = ui_acti
using.layer = 20
@@ -65,47 +87,60 @@ var/obj/screen/robot_inventory
//Cell
mymob:cells = new /obj/screen()
mymob:cells.icon = 'icons/mob/screen1_robot.dmi'
mymob:cells.icon = ui_style
mymob:cells.icon_state = "charge-empty"
mymob:cells.alpha = ui_alpha
mymob:cells.name = "cell"
mymob:cells.screen_loc = ui_toxin
src.other += mymob:cells
//Health
mymob.healths = new /obj/screen()
mymob.healths.icon = 'icons/mob/screen1_robot.dmi'
mymob.healths.icon = ui_style
mymob.healths.icon_state = "health0"
mymob.healths.alpha = ui_alpha
mymob.healths.name = "health"
mymob.healths.screen_loc = ui_borg_health
src.other += mymob.healths
//Installed Module
mymob.hands = new /obj/screen()
mymob.hands.icon = 'icons/mob/screen1_robot.dmi'
mymob.hands.icon = ui_style
mymob.hands.icon_state = "nomod"
mymob.hands.alpha = ui_alpha
mymob.hands.name = "module"
mymob.hands.screen_loc = ui_borg_module
src.other += mymob.hands
//Module Panel
using = new /obj/screen()
using.name = "panel"
using.icon = 'icons/mob/screen1_robot.dmi'
using.icon = ui_style
using.icon_state = "panel"
using.alpha = ui_alpha
using.screen_loc = ui_borg_panel
using.layer = 19
src.adding += using
//Store
mymob.throw_icon = new /obj/screen()
mymob.throw_icon.icon = 'icons/mob/screen1_robot.dmi'
mymob.throw_icon.icon = ui_style
mymob.throw_icon.icon_state = "store"
mymob.throw_icon.alpha = ui_alpha
mymob.throw_icon.color = ui_color
mymob.throw_icon.name = "store"
mymob.throw_icon.screen_loc = ui_borg_store
src.other += mymob.throw_icon
//Inventory
robot_inventory = new /obj/screen()
robot_inventory.name = "inventory"
robot_inventory.icon = 'icons/mob/screen1_robot.dmi'
robot_inventory.icon = ui_style
robot_inventory.icon_state = "inventory"
robot_inventory.alpha = ui_alpha
robot_inventory.color = ui_color
robot_inventory.screen_loc = ui_borg_inventory
src.other += robot_inventory
//Temp
mymob.bodytemp = new /obj/screen()
@@ -113,24 +148,30 @@ var/obj/screen/robot_inventory
mymob.bodytemp.name = "body temperature"
mymob.bodytemp.screen_loc = ui_temp
mymob.oxygen = new /obj/screen()
mymob.oxygen.icon = 'icons/mob/screen1_robot.dmi'
mymob.oxygen.icon = ui_style
mymob.oxygen.icon_state = "oxy0"
mymob.oxygen.alpha = ui_alpha
mymob.oxygen.name = "oxygen"
mymob.oxygen.screen_loc = ui_oxygen
src.other += mymob.oxygen
mymob.fire = new /obj/screen()
mymob.fire.icon = 'icons/mob/screen1_robot.dmi'
mymob.fire.icon = ui_style
mymob.fire.icon_state = "fire0"
mymob.fire.alpha = ui_alpha
mymob.fire.name = "fire"
mymob.fire.screen_loc = ui_fire
src.other += mymob.fire
mymob.pullin = new /obj/screen()
mymob.pullin.icon = 'icons/mob/screen1_robot.dmi'
mymob.pullin.icon = ui_style
mymob.pullin.icon_state = "pull0"
mymob.pullin.alpha = ui_alpha
mymob.pullin.color = ui_color
mymob.pullin.name = "pull"
mymob.pullin.screen_loc = ui_borg_pull
src.other += mymob.pullin
mymob.blind = new /obj/screen()
mymob.blind.icon = 'icons/mob/screen1_full.dmi'
@@ -140,22 +181,32 @@ var/obj/screen/robot_inventory
mymob.blind.layer = 0
mymob.flash = new /obj/screen()
mymob.flash.icon = 'icons/mob/screen1_robot.dmi'
mymob.flash.icon = ui_style
mymob.flash.icon_state = "blank"
mymob.flash.name = "flash"
mymob.flash.screen_loc = ui_entire_screen
mymob.flash.layer = 17
src.other += mymob.flash
mymob.zone_sel = new /obj/screen/zone_sel()
mymob.zone_sel.icon = 'icons/mob/screen1_robot.dmi'
mymob.zone_sel.icon = ui_style
mymob.zone_sel.alpha = ui_alpha
mymob.zone_sel.overlays.Cut()
mymob.zone_sel.overlays += image('icons/mob/zone_sel.dmi', "[mymob.zone_sel.selecting]")
//Handle the gun settings buttons
mymob.gun_setting_icon = new /obj/screen/gun/mode(null)
mymob.gun_setting_icon.icon = ui_style
mymob.gun_setting_icon.alpha = ui_alpha
mymob.item_use_icon = new /obj/screen/gun/item(null)
mymob.item_use_icon.icon = ui_style
mymob.item_use_icon.alpha = ui_alpha
mymob.gun_move_icon = new /obj/screen/gun/move(null)
mymob.gun_move_icon.icon = ui_style
mymob.gun_move_icon.alpha = ui_alpha
mymob.radio_use_icon = new /obj/screen/gun/radio(null)
mymob.radio_use_icon.icon = ui_style
mymob.radio_use_icon.alpha = ui_alpha
mymob.client.screen = list()

View File

@@ -92,7 +92,7 @@
if (powerlevel > 0 && !istype(A, /mob/living/carbon/slime))
if(ishuman(M))
var/mob/living/carbon/human/H = M
stunprob *= H.species.siemens_coefficient
stunprob *= max(H.species.siemens_coefficient,0)
switch(power * 10)

View File

@@ -107,20 +107,11 @@ var/const/tk_maxrange = 15
return
var/d = get_dist(user, target)
if(focus) d = max(d,get_dist(user,focus)) // whichever is further
switch(d)
if(0)
;
if(1 to 5) // not adjacent may mean blocked by window
if(!proximity)
user.setMoveCooldown(2)
if(5 to 7)
user.setMoveCooldown(5)
if(8 to tk_maxrange)
user.setMoveCooldown(10)
else
user << "<span class='notice'>Your mind won't reach that far.</span>"
return
if(focus)
d = max(d, get_dist(user, focus)) // whichever is further
if(d > tk_maxrange)
user << "<span class='notice'>Your mind won't reach that far.</span>"
return
if(!focus)
focus_object(target, user)

View File

@@ -1,3 +1,4 @@
/hook/startup/proc/createDatacore()
data_core = new /datum/datacore()
return 1
@@ -25,11 +26,11 @@
var/dat = {"
<head><style>
.manifest {border-collapse:collapse;}
.manifest td, th {border:1px solid [monochrome?"black":"#DEF; background-color:white; color:black"]; padding:.25em}
.manifest th {height: 2em; [monochrome?"border-top-width: 3px":"background-color: #48C; color:white"]}
.manifest tr.head th { [monochrome?"border-top-width: 1px":"background-color: #488;"] }
.manifest td, th {border:1px solid [monochrome?"black":"[OOC?"black; background-color:#272727; color:white":"#DEF; background-color:white; color:black"]"]; padding:.25em}
.manifest th {height: 2em; [monochrome?"border-top-width: 3px":"background-color: [OOC?"#40628A":"#48C"]; color:white"]}
.manifest tr.head th { [monochrome?"border-top-width: 1px":"background-color: [OOC?"#013D3B;":"#488;"]"] }
.manifest td:first-child {text-align:right}
.manifest tr.alt td {[monochrome?"border-top-width: 2px":"background-color: #DEF"]}
.manifest tr.alt td {[monochrome?"border-top-width: 2px":"background-color: [OOC?"#373737; color:white":"#DEF"]"]}
</style></head>
<table class="manifest" width='350px'>
<tr class='head'><th>Name</th><th>Rank</th><th>Activity</th></tr>
@@ -186,7 +187,7 @@
G.fields["fingerprint"] = md5(H.dna.uni_identity)
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
G.fields["sex"] = H.gender
G.fields["sex"] = gender2text(H.gender)
G.fields["species"] = H.get_species()
G.fields["home_system"] = H.home_system
G.fields["citizenship"] = H.citizenship
@@ -199,6 +200,7 @@
var/datum/data/record/M = CreateMedicalRecord(H.real_name, id)
M.fields["b_type"] = H.b_type
M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["id_gender"] = gender2text(H.identifying_gender)
if(H.med_record && !jobban_isbanned(H, "Records"))
M.fields["notes"] = H.med_record
@@ -214,7 +216,8 @@
L.fields["rank"] = H.mind.assigned_role
L.fields["age"] = H.age
L.fields["fingerprint"] = md5(H.dna.uni_identity)
L.fields["sex"] = H.gender
L.fields["sex"] = gender2text(H.gender)
L.fields["id_gender"] = gender2text(H.identifying_gender)
L.fields["b_type"] = H.b_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.SE // Used in respawning
@@ -255,8 +258,9 @@
preview_icon.Blend(E.get_icon(), ICON_OVERLAY)
//Tail
if(H.species.tail)
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[H.species.tail]_s")
var/use_species_tail = H.species.get_tail(H)
if(use_species_tail)
temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[use_species_tail]_s")
preview_icon.Blend(temp, ICON_OVERLAY)
// Skin tone
@@ -418,7 +422,7 @@
G.fields["id"] = id
G.fields["rank"] = "Unassigned"
G.fields["real_rank"] = "Unassigned"
G.fields["sex"] = "Male"
G.fields["sex"] = "Unknown"
G.fields["age"] = "Unknown"
G.fields["fingerprint"] = "Unknown"
G.fields["p_stat"] = "Active"
@@ -460,6 +464,7 @@
M.fields["name"] = name
M.fields["b_type"] = "AB+"
M.fields["b_dna"] = md5(name)
M.fields["id_gender"] = "Unknown"
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
M.fields["ma_dis"] = "None"

View File

@@ -76,7 +76,7 @@
checklist = items.Copy() // You should really trust Copy
if(istype(container, /obj/machinery))
var/obj/machinery/machine = container
for(var/obj/O in (machine.contents - machine.component_parts))
for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit))
if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown))
continue // Fruit is handled in check_fruit().
var/found = 0
@@ -110,7 +110,7 @@
var/obj/result_obj = new result(container)
if(istype(container, /obj/machinery))
var/obj/machinery/machine = container
for (var/obj/O in ((machine.contents-result_obj)-machine.component_parts))
for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit))
O.reagents.trans_to_obj(result_obj, O.reagents.total_volume)
qdel(O)
else
@@ -128,7 +128,7 @@
var/obj/result_obj = new result(container)
if(istype(container, /obj/machinery))
var/obj/machinery/machine = container
for (var/obj/O in ((machine.contents-result_obj)-machine.component_parts))
for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit))
if (O.reagents)
O.reagents.del_reagent("nutriment")
O.reagents.update_total()

File diff suppressed because it is too large Load Diff

View File

@@ -63,13 +63,19 @@
var/list/global_objectives = list() // Universal objectives if any.
var/list/candidates = list() // Potential candidates.
var/list/faction_members = list() // Semi-antags (in-round revs, borer thralls)
var/allow_latejoin = 0 //Determines whether or not the game mode will allow for the template to spawn try_latespawn
// ID card stuff.
var/default_access = list()
var/id_type = /obj/item/weapon/card/id
var/antag_text = "You are an antagonist! Within the rules, \
try to act as an opposing force to the crew. Further RP and try to make sure \
other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \
and before taking extreme actions, please try to also contact the administration! \
Think through your actions and make the roleplay immersive! <b>Please remember all \
rules aside from those without explicit exceptions apply to antagonists.</b>"
/datum/antagonist/New()
..()

View File

@@ -99,11 +99,14 @@
player.current << "<span class='notice'>[leader_welcome_text]</span>"
else
player.current << "<span class='notice'>[welcome_text]</span>"
if (config.objectives_disabled)
player.current << "<span class='notice'>[antag_text]</span>"
if((flags & ANTAG_HAS_NUKE) && !spawned_nuke)
create_nuke()
show_objectives(player)
if (!config.objectives_disabled)
show_objectives(player)
return 1
/datum/antagonist/proc/set_antag_name(var/mob/living/player)

View File

@@ -46,8 +46,8 @@
round for everybody else.", "Ambitions", mind.ambitions) as null|message
if(isnull(new_ambitions))
return
mind.ambitions = new_ambitions
new_ambitions = sanitize(new_ambitions)
mind.ambitions = new_ambitions
if(new_ambitions)
src << "<span class='notice'>You've set your goal to be '[new_ambitions]'.</span>"
else

View File

@@ -7,6 +7,12 @@ var/datum/antagonist/ert/ert
role_text = "Emergency Responder"
role_text_plural = "Emergency Responders"
welcome_text = "As member of the Emergency Response Team, you answer only to your leader and company officials."
antag_text = "You are an <b>anti</b> antagonist! Within the rules, \
try to save the station and its inhabitants from the ongoing crisis. \
Try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \
and before taking extreme actions, please try to also contact the administration! \
Think through your actions and make the roleplay immersive! <b>Please remember all \
rules aside from those without explicit exceptions apply to the ERT.</b>"
leader_welcome_text = "As leader of the Emergency Response Team, you answer only to the Company, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however."
landmark_id = "Response Team"
id_type = /obj/item/weapon/card/id/centcom/ERT
@@ -41,6 +47,6 @@ var/datum/antagonist/ert/ert
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(src), slot_shoes)
player.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(src), slot_gloves)
player.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses(src), slot_glasses)
create_id(role_text, player)
return 1

View File

@@ -39,7 +39,7 @@ var/datum/antagonist/mercenary/mercs
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/swat(player), slot_shoes)
player.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(player), slot_gloves)
if(player.backbag == 2) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(player), slot_back)
if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(player), slot_back)
if(player.backbag == 3) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(player), slot_back)
if(player.backbag == 4) player.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(player), slot_back)
player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack)
player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack)

View File

@@ -81,7 +81,7 @@ var/datum/antagonist/wizard/wizards
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/wizrobe(wizard_mob), slot_wear_suit)
wizard_mob.equip_to_slot_or_del(new /obj/item/clothing/head/wizard(wizard_mob), slot_head)
if(wizard_mob.backbag == 2) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(wizard_mob), slot_back)
if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(wizard_mob), slot_back)
if(wizard_mob.backbag == 3) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(wizard_mob), slot_back)
if(wizard_mob.backbag == 4) wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(wizard_mob), slot_back)
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/box(wizard_mob), slot_in_backpack)
wizard_mob.equip_to_slot_or_del(new /obj/item/weapon/teleportation_scroll(wizard_mob), slot_r_store)
@@ -98,7 +98,7 @@ var/datum/antagonist/wizard/wizards
break
if(!survivor)
feedback_set_details("round_end_result","loss - wizard killed")
world << "<span class='danger'><font size = 3>The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed by the crew! The Space Wizards Federation has been taught a lesson they will not soon forget!</font></span>"
world << "<span class='danger'><font size = 3>The [(current_antagonists.len>1)?"[role_text_plural] have":"[role_text] has"] been killed by the crew!</font></span>"
//To batch-remove wizard spells. Linked to mind.dm.
/mob/proc/spellremove()

View File

@@ -3,31 +3,51 @@ var/datum/antagonist/renegade/renegades
/datum/antagonist/renegade
role_text = "Renegade"
role_text_plural = "Renegades"
welcome_text = "Your own safety matters above all else, trust no one and kill anyone who gets in your way. However, armed as you are, now would be the perfect time to settle that score or grab that pair of yellow gloves you've been eyeing..."
welcome_text = "Something's going to go wrong today, you can just feel it. You're paranoid, you've got a gun, and you're going to survive."
antag_text = "You are a <b>minor</b> antagonist! Within the rules, \
try to protect yourself and what's important to you. You aren't here to cause trouble, \
you're just more willing (and equipped) to go to extremes to stop it than others are. \
Your job is to somewhat oppose the other antagonists, should they threaten you, in ways that aren't quite legal themselves. \
Try to make sure other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \
and before taking extreme actions, please try to also contact the administration! \
Think through your actions and make the roleplay immersive! <b>Please remember all \
rules aside from those without explicit exceptions apply to antagonists.</b>"
id = MODE_RENEGADE
flags = ANTAG_SUSPICIOUS | ANTAG_IMPLANT_IMMUNE | ANTAG_RANDSPAWN | ANTAG_VOTABLE
hard_cap = 5
hard_cap_round = 7
hard_cap = 8
hard_cap_round = 12
initial_spawn_req = 3
initial_spawn_target = 6
initial_spawn_req = 2
initial_spawn_target = 4
var/list/spawn_guns = list(
/obj/item/weapon/gun/energy/gun,
/obj/item/weapon/gun/energy/laser,
/obj/item/weapon/gun/projectile,
/obj/item/weapon/gun/projectile/revolver/detective,
/obj/item/weapon/gun/projectile/automatic/c20r,
/obj/item/weapon/gun/projectile/deagle/camo,
/obj/item/weapon/gun/projectile/pistol,
/obj/item/weapon/silencer,
/obj/item/weapon/gun/projectile/shotgun/pump,
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
/obj/item/weapon/gun/energy/captain,
/obj/item/weapon/gun/energy/lasercannon,
/obj/item/weapon/gun/energy/xray,
/obj/item/weapon/gun/energy/gun,
/obj/item/weapon/gun/energy/gun/burst,
/obj/item/weapon/gun/energy/gun/nuclear,
/obj/item/weapon/gun/energy/crossbow,
/obj/item/weapon/gun/energy/crossbow/largecrossbow,
/obj/item/weapon/gun/projectile/automatic,
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
/obj/item/weapon/gun/energy/crossbow
/obj/item/weapon/gun/projectile/automatic/c20r,
/obj/item/weapon/gun/projectile/automatic/sts35,
/obj/item/weapon/gun/projectile/automatic/wt550,
/obj/item/weapon/gun/projectile/automatic/z8,
/obj/item/weapon/gun/projectile/colt/detective,
/obj/item/weapon/gun/projectile/sec/wood,
/obj/item/weapon/gun/projectile/silenced,
/obj/item/weapon/gun/projectile/pistol,
/obj/item/weapon/gun/projectile/revolver,
/obj/item/weapon/gun/projectile/shotgun/pump,
/obj/item/weapon/gun/projectile/shotgun/pump/combat,
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
list(/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet, /obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn),
list(/obj/item/weapon/gun/projectile/deagle, /obj/item/weapon/gun/projectile/deagle/gold, /obj/item/weapon/gun/projectile/deagle/camo),
list(/obj/item/weapon/gun/projectile/revolver/detective, /obj/item/weapon/gun/projectile/revolver/deckard)
)
/datum/antagonist/renegade/New()
@@ -49,7 +69,19 @@ var/datum/antagonist/renegade/renegades
return
var/gun_type = pick(spawn_guns)
if(islist(gun_type))
gun_type = pick(gun_type)
var/obj/item/gun = new gun_type(get_turf(player))
// Attempt to put into a container.
if(player.equip_to_storage(gun))
return
// If that failed, attempt to put into any valid non-handslot
if(player.equip_to_appropriate_slot(gun))
return
// If that failed, then finally attempt to at least let the player carry the weapon
player.put_in_hands(gun)

View File

@@ -3,10 +3,12 @@
var/datum/dna/dna
var/speciesName
var/list/languages
var/identifying_gender
/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages)
/datum/absorbed_dna/New(var/newName, var/newDNA, var/newSpecies, var/newLanguages, var/newIdentifying_Gender)
..()
name = newName
dna = newDNA
speciesName = newSpecies
languages = newLanguages
identifying_gender = newIdentifying_Gender

View File

@@ -85,7 +85,7 @@ var/global/list/possible_changeling_IDs = list("Alpha","Beta","Gamma","Delta","E
var/mob/living/carbon/human/H = src
if(istype(H))
var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages)
var/datum/absorbed_dna/newDNA = new(H.real_name, H.dna, H.species.name, H.languages, H.identifying_gender)
absorbDNA(newDNA)
return 1

View File

@@ -39,6 +39,7 @@
H.b_type = "AB+" //For some reason we have two blood types on the mob.
for(var/flavor in H.flavor_texts) //Nulls out flavor text, so we don't keep our previous mob's flavor.
flavor = null
H.identifying_gender = chosen_dna.identifying_gender
src.real_name = chosen_dna.name
src.flavor_text = ""
src.UpdateAppearance()

View File

@@ -1,6 +1,6 @@
/obj/item/weapon/melee/cultblade
name = "cult blade"
desc = "An arcane weapon wielded by the followers of Nar-Sie"
desc = "An arcane weapon wielded by the followers of Nar-Sie."
icon_state = "cultblade"
item_state = "cultblade"
w_class = 4
@@ -56,7 +56,7 @@
/obj/item/clothing/suit/cultrobes
name = "cult robes"
desc = "A set of armored robes worn by the followers of Nar-Sie"
desc = "A set of armored robes worn by the followers of Nar-Sie."
icon_state = "cultrobes"
item_state = "cultrobes"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
@@ -74,7 +74,7 @@
/obj/item/clothing/suit/cultrobes/magusred
name = "magus robes"
desc = "A set of armored robes worn by the followers of Nar-Sie"
desc = "A set of armored robes worn by the followers of Nar-Sie."
icon_state = "magusred"
item_state = "magusred"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
@@ -82,7 +82,7 @@
/obj/item/clothing/head/helmet/space/cult
name = "cult helmet"
desc = "A space worthy helmet used by the followers of Nar-Sie"
desc = "A space worthy helmet used by the followers of Nar-Sie."
icon_state = "cult_helmet"
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 30, bio = 30, rad = 30)
siemens_coefficient = 0
@@ -94,7 +94,7 @@
name = "cult armour"
icon_state = "cult_armour"
item_state = "cult_armour"
desc = "A bulky suit of armour, bristling with spikes. It looks space proof."
desc = "A bulky suit of armour, bristling with spikes. It looks space-worthy."
w_class = 3
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
slowdown = 1

View File

@@ -8,18 +8,18 @@
/obj/structure/cult/talisman
name = "Altar"
desc = "A bloodstained altar dedicated to Nar-Sie"
desc = "A bloodstained altar dedicated to Nar-Sie."
icon_state = "talismanaltar"
/obj/structure/cult/forge
name = "Daemon forge"
desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie"
desc = "A forge used in crafting the unholy weapons used by the armies of Nar-Sie."
icon_state = "forge"
/obj/structure/cult/pylon
name = "Pylon"
desc = "A floating crystal that hums with an unearthly energy"
desc = "A floating crystal that hums with an unearthly energy."
icon_state = "pylon"
var/isbroken = 0
light_range = 5
@@ -71,7 +71,7 @@
/obj/structure/cult/tome
name = "Desk"
desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl"
desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl."
icon_state = "tomealtar"
//sprites for this no longer exist -Pete
@@ -86,7 +86,7 @@
/obj/effect/gateway
name = "gateway"
desc = "You're pretty sure that abyss is staring back"
desc = "You're pretty sure that abyss is staring back."
icon = 'icons/obj/cult.dmi'
icon_state = "hole"
density = 1

View File

@@ -143,7 +143,7 @@ var/global/list/narsie_list = list()
/obj/singularity/narsie/proc/narsiefloor(var/turf/T)//leaving "footprints"
if(!(istype(T, /turf/simulated/wall/cult)||istype(T, /turf/space)))
if(T.icon_state != "cult-narsie")
T.desc = "something that goes beyond your understanding went this way"
T.desc = "something that goes beyond your understanding went this way."
T.icon = 'icons/turf/flooring/cult.dmi'
T.icon_state = "cult-narsie"
T.set_light(1)

View File

@@ -346,6 +346,7 @@ var/list/sacrificed = list()
for(var/mob/observer/dead/O in loc)
if(!O.client) continue
if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue
if(!(O.client.prefs.be_special & BE_CULTIST)) continue
ghost = O
break
@@ -442,6 +443,7 @@ var/list/sacrificed = list()
if(!O.client) continue
if(!O.MayRespawn()) continue
if(O.mind && O.mind.current && O.mind.current.stat != DEAD) continue
if(!(O.client.prefs.be_special & BE_CULTIST)) continue
ghost = O
break
if(!ghost)

View File

@@ -201,7 +201,6 @@ var/global/list/additional_antag_types = list()
display_roundstart_logout_report()
spawn (rand(waittime_l, waittime_h))
send_intercept()
spawn(rand(100,150))
announce_ert_disabled()
@@ -373,56 +372,6 @@ var/global/list/additional_antag_types = list()
/datum/game_mode/proc/check_win() //universal trigger to be called at mob death, nuke explosion, etc. To be called from everywhere.
return 0
/datum/game_mode/proc/send_intercept()
var/intercepttext = "<FONT size = 3><B>Cent. Com. Update</B> Requested status information:</FONT><HR>"
intercepttext += "<B> In case you have misplaced your copy, attached is a list of personnel whom reliable sources&trade; suspect may be affiliated with subversive elements:</B><br>"
var/list/disregard_roles = list()
for(var/antag_type in all_antag_types)
var/datum/antagonist/antag = all_antag_types[antag_type]
if(antag.flags & ANTAG_SUSPICIOUS)
disregard_roles |= antag.role_text
var/list/suspects = list()
for(var/mob/living/carbon/human/man in player_list) if(man.client && man.mind)
// NT relation option
var/special_role = man.mind.special_role
var/datum/antagonist/special_role_data = get_antag_data(special_role)
if (special_role in disregard_roles)
continue
else if(man.client.prefs.nanotrasen_relation == COMPANY_OPPOSED && prob(50) || \
man.client.prefs.nanotrasen_relation == COMPANY_SKEPTICAL && prob(20))
suspects += man
// Antags
else if(special_role_data && prob(special_role_data.suspicion_chance))
suspects += man
// Some poor people who were just in the wrong place at the wrong time..
else if(prob(10))
suspects += man
for(var/mob/M in suspects)
if(player_is_antag(M.mind, only_offstation_roles = 1))
continue
switch(rand(1, 100))
if(1 to 50)
intercepttext += "Someone with the job of <b>[M.mind.assigned_role]</b> <br>"
else
intercepttext += "<b>[M.name]</b>, the <b>[M.mind.assigned_role]</b> <br>"
for (var/obj/machinery/computer/communications/comm in machines)
if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept)
var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc )
intercept.name = "Cent. Com. Status Summary"
intercept.info = intercepttext
comm.messagetitle.Add("Cent. Com. Status Summary")
comm.messagetext.Add(intercepttext)
world << sound('sound/AI/commandreport.ogg')
/datum/game_mode/proc/get_players_for_role(var/role, var/antag_id)
var/list/players = list()
var/list/candidates = list()
@@ -567,25 +516,10 @@ proc/get_nt_opposed()
if(dudes.len == 0) return null
return pick(dudes)
//Announces objectives/generic antag text.
/proc/show_generic_antag_text(var/datum/mind/player)
if(player.current)
player.current << \
"You are an antagonist! <font color=blue>Within the rules,</font> \
try to act as an opposing force to the crew. Further RP and try to make sure \
other players have <i>fun</i>! If you are confused or at a loss, always adminhelp, \
and before taking extreme actions, please try to also contact the administration! \
Think through your actions and make the roleplay immersive! <b>Please remember all \
rules aside from those without explicit exceptions apply to antagonists.</b>"
/proc/show_objectives(var/datum/mind/player)
if(!player || !player.current) return
if(config.objectives_disabled)
show_generic_antag_text(player)
return
var/obj_count = 1
player.current << "<span class='notice'>Your current objectives:</span>"
for(var/datum/objective/objective in player.objectives)

View File

@@ -3,9 +3,9 @@
round_description = "Subversive elements have invaded the station, and certain individuals are feeling uncertain about their safety."
extended_round_description = "Traitors and renegades spawn during this round."
config_tag = "traitorren"
required_players = 10 //I don't think we can have it lower and not need an ERT every round.
required_players = 11 //I don't think we can have it lower and not need an ERT every round.
required_players_secret = 11 //I don't think we can have it lower and not need an ERT every round.
required_enemies = 4
end_on_antag_death = 0
antag_tags = list(MODE_TRAITOR, MODE_RENEGADE)
require_all_templates = 1
antag_tags = list(MODE_AUTOTRAITOR, MODE_RENEGADE)
require_all_templates = 1

View File

@@ -3,8 +3,8 @@
round_description = "A space wizard and a ninja have invaded the station!"
extended_round_description = "A ninja and wizard spawn during this round."
config_tag = "visitors"
required_players = 6
required_players_secret = 6
required_players = 8
required_players_secret = 8
required_enemies = 2
end_on_antag_death = 0
antag_tags = list(MODE_WIZARD, MODE_NINJA)

View File

@@ -10,7 +10,7 @@
only hope this unknown assassin isn't here for you."
config_tag = "ninja"
required_players = 1
required_players_secret = 8
required_players_secret = 6
required_enemies = 1
end_on_antag_death = 0
antag_tags = list(MODE_NINJA)

View File

@@ -4,7 +4,7 @@
extended_round_description = "A powerful entity capable of manipulating the elements around him, most commonly referred to as a 'wizard', has infiltrated the station. They have a wide variety of powers and spells available to them that makes your own simple moral self tremble with fear and excitement. Ultimately, their purpose is unknown. However, it is up to you and your crew to decide if their powers can be used for good or if their arrival foreshadows the destruction of the entire station."
config_tag = "wizard"
required_players = 1
required_players_secret = 8
required_players_secret = 6
required_enemies = 1
end_on_antag_death = 0
antag_tags = list(MODE_WIZARD)

View File

@@ -7,7 +7,7 @@
total_positions = -1
spawn_positions = -1
supervisors = "absolutely everyone"
selection_color = "#dddddd"
selection_color = "#515151"
economic_modifier = 1
access = list() //See /datum/job/assistant/get_access()
minimal_access = list() //See /datum/job/assistant/get_access()
@@ -17,7 +17,7 @@
if(!H) return 0
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if (H.mind.role_alt_title)
switch(H.mind.role_alt_title)

View File

@@ -10,7 +10,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
total_positions = 1
spawn_positions = 1
supervisors = "company officials and Corporate Regulations"
selection_color = "#ccccff"
selection_color = "#1D1D4F"
alt_titles = list("Station Administrator")
idtype = /obj/item/weapon/card/id/gold
req_admin_notify = 1
@@ -28,7 +28,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/captain(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/captain(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_cap(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/cap(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
var/obj/item/clothing/under/U = new /obj/item/clothing/under/rank/captain(H)
if(H.age>49)
@@ -63,7 +63,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ddddff"
selection_color = "#2F2F7F"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
minimal_player_age = 10
@@ -91,7 +91,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hop(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_personnel(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)

View File

@@ -8,7 +8,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
access = list(access_hydroponics, access_bar, access_kitchen)
minimal_access = list(access_bar)
alt_titles = list("Barista")
@@ -18,7 +18,7 @@
if(!H) return 0
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
@@ -37,7 +37,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
access = list(access_hydroponics, access_bar, access_kitchen)
minimal_access = list(access_kitchen)
alt_titles = list("Cook")
@@ -64,7 +64,7 @@
total_positions = 2
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
access = list(access_hydroponics, access_bar, access_kitchen)
minimal_access = list(access_hydroponics)
alt_titles = list("Hydroponicist")
@@ -81,7 +81,7 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/botanist(H), slot_belt)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/hydroponics(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_hyd(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/hyd(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
return 1
@@ -97,7 +97,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
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)
@@ -127,7 +127,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
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)
@@ -152,7 +152,7 @@
total_positions = 3
spawn_positions = 3
supervisors = "the quartermaster and the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
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)
@@ -163,7 +163,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_cargo (H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/miner(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/pda/shaftminer(H), slot_belt)
@@ -191,7 +191,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
access = list(access_janitor, access_maint_tunnels)
minimal_access = list(access_janitor, access_maint_tunnels)
alt_titles = list("Custodian")
@@ -217,7 +217,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
access = list(access_library, access_maint_tunnels)
minimal_access = list(access_library)
alt_titles = list("Journalist")
@@ -243,7 +243,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "company officials and Corporate Regulations"
selection_color = "#dddddd"
selection_color = "#515151"
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)
@@ -254,7 +254,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/ia(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/internalaffairs(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/internalaffairs(H), slot_wear_suit)

View File

@@ -8,7 +8,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the head of personnel"
selection_color = "#dddddd"
selection_color = "#515151"
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")

View File

@@ -8,7 +8,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffeeaa"
selection_color = "#7F6E2C"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
economic_modifier = 10
@@ -33,7 +33,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/ce(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_engineer(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/device/pda/heads/ce(H), slot_l_store)
@@ -58,7 +58,7 @@
total_positions = 5
spawn_positions = 5
supervisors = "the chief engineer"
selection_color = "#fff5cc"
selection_color = "#5B4D20"
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)
@@ -70,7 +70,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/industrial(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_eng(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/eng(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/engineer(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)
@@ -95,7 +95,7 @@
total_positions = 3
spawn_positions = 2
supervisors = "the chief engineer"
selection_color = "#fff5cc"
selection_color = "#5B4D20"
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)
@@ -106,7 +106,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/atmospheric_technician(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/workboots(H), slot_shoes)

View File

@@ -31,7 +31,7 @@
/datum/job/proc/equip_backpack(var/mob/living/carbon/human/H)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
/datum/job/proc/equip_survival(var/mob/living/carbon/human/H)

View File

@@ -8,7 +8,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffddf0"
selection_color = "#026865"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
economic_modifier = 10
@@ -28,7 +28,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/cmo(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes)
@@ -47,7 +47,7 @@
total_positions = 5
spawn_positions = 3
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
selection_color = "#013D3B"
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)
@@ -60,7 +60,7 @@
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if (H.mind.role_alt_title)
switch(H.mind.role_alt_title)
@@ -77,7 +77,7 @@
H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/virology(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_vir(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/vir(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if("Medical Doctor")
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform)
@@ -110,7 +110,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
selection_color = "#013D3B"
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)
@@ -125,7 +125,7 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/chem(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit)
return 1
@@ -141,7 +141,7 @@
total_positions = 0
spawn_positions = 0
supervisors = "the chief medical officer and research director"
selection_color = "#ffeef0"
selection_color = "#013D3B"
economic_modifier = 7
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics, access_research)
minimal_access = list(access_medical, access_morgue, access_genetics, access_research)
@@ -154,7 +154,7 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/gen(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit)
H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store)
@@ -171,7 +171,7 @@
spawn_positions = 1
economic_modifier = 5
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
selection_color = "#013D3B"
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")
@@ -181,7 +181,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if (H.mind.role_alt_title)
switch(H.mind.role_alt_title)
@@ -205,7 +205,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the chief medical officer"
selection_color = "#ffeef0"
selection_color = "#013D3B"
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)
@@ -218,7 +218,7 @@
H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/med(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if (H.mind.role_alt_title)
switch(H.mind.role_alt_title)

View File

@@ -8,7 +8,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffddff"
selection_color = "#AD6BAD"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
economic_modifier = 15
@@ -34,7 +34,7 @@
H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit)
return 1
@@ -50,7 +50,7 @@
total_positions = 5
spawn_positions = 3
supervisors = "the research director"
selection_color = "#ffeeff"
selection_color = "#633D63"
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)
@@ -66,7 +66,7 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
return 1
@@ -80,7 +80,7 @@
total_positions = 3
spawn_positions = 2
supervisors = "the research director"
selection_color = "#ffeeff"
selection_color = "#633D63"
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)
@@ -96,7 +96,7 @@
H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/tox(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit)
return 1
@@ -110,7 +110,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "research director"
selection_color = "#ffeeff"
selection_color = "#633D63"
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.
@@ -122,7 +122,7 @@
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sci(H), slot_l_ear)
if(H.backbag == 2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(H.backbag == 3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_r_store)

View File

@@ -8,7 +8,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the captain"
selection_color = "#ffdddd"
selection_color = "#8E2929"
idtype = /obj/item/weapon/card/id/silver
req_admin_notify = 1
economic_modifier = 10
@@ -27,7 +27,7 @@
if(!H) return 0
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/heads/hos(H), slot_l_ear)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/head_of_security(H), slot_w_uniform)
@@ -55,7 +55,7 @@
total_positions = 1
spawn_positions = 1
supervisors = "the head of security"
selection_color = "#ffeeee"
selection_color = "#601C1C"
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)
@@ -66,7 +66,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/warden(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)
@@ -92,7 +92,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "the head of security"
selection_color = "#ffeeee"
selection_color = "#601C1C"
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)
@@ -103,7 +103,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes)
@@ -134,7 +134,7 @@
total_positions = 4
spawn_positions = 4
supervisors = "the head of security"
selection_color = "#ffeeee"
selection_color = "#601C1C"
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)
@@ -145,7 +145,7 @@
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/security(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_sec(H), slot_back)
if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/sec(H), slot_back)
if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/security(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/jackboots(H), slot_shoes)

View File

@@ -5,7 +5,7 @@
faction = "Station"
total_positions = 0 // Not used for AI, see is_position_available below and modules/mob/living/silicon/ai/latejoin.dm
spawn_positions = 1
selection_color = "#ccffcc"
selection_color = "#3F823F"
supervisors = "your laws"
req_admin_notify = 1
minimal_player_age = 7
@@ -38,7 +38,7 @@
total_positions = 2
spawn_positions = 2
supervisors = "your laws and the AI" //Nodrak
selection_color = "#ddffdd"
selection_color = "#254C25"
minimal_player_age = 1
alt_titles = list("Robot", "Drone")
account_allowed = 0

View File

@@ -9,6 +9,7 @@
use_power = 1
idle_power_usage = 40
interact_offline = 1
circuit = /obj/item/weapon/circuitboard/sleeper_console
//obj/machinery/sleep_console/New()
//..()
@@ -32,8 +33,39 @@
/obj/machinery/sleep_console/attack_hand(var/mob/user)
if(..())
return 1
if(connected)
connected.ui_interact(user)
connected.ui_interact(user)
/obj/machinery/sleep_console/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
user << "<span class='notice'>You start disconnecting the monitor.</span>"
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
var/obj/item/weapon/circuitboard/M = new circuit( A )
A.circuit = M
A.anchored = 1
A.density = 1
A.frame_type = M.board_type
for (var/obj/C in src)
C.forceMove(loc)
if (src.stat & BROKEN)
user << "<span class='notice'>The broken glass falls out.</span>"
new /obj/item/weapon/material/shard( src.loc )
A.state = 3
A.icon_state = "[A.frame_type]_3"
else
user << "<span class='notice'>You disconnect the monitor.</span>"
A.state = 4
A.icon_state = "[A.frame_type]_4"
A.pixel_x = pixel_x
A.pixel_y = pixel_y
A.dir = dir
M.deconstruct(src)
qdel(src)
else
src.attack_hand(user)
return
/obj/machinery/sleep_console/power_change()
..()
@@ -49,6 +81,7 @@
icon_state = "sleeper_0"
density = 1
anchored = 1
circuit = /obj/item/weapon/circuitboard/sleeper
var/mob/living/carbon/human/occupant = null
var/list/available_chemicals = list("inaprovaline" = "Inaprovaline", "stoxin" = "Soporific", "paracetamol" = "Paracetamol", "anti_toxin" = "Dylovene", "dexalin" = "Dexalin")
var/obj/item/weapon/reagent_containers/glass/beaker = null
@@ -59,8 +92,29 @@
active_power_usage = 200 //builtin health analyzer, dialysis machine, injectors.
/obj/machinery/sleeper/New()
..()
spawn(5)
//src.machine = locate(/obj/machinery/mineral/processing_unit, get_step(src, machinedir))
var/obj/machinery/sleep_console/C = locate(/obj/machinery/sleep_console) in range(2,src)
if(C)
C.connected = src
return
return
/obj/machinery/sleeper/map/New()
..()
beaker = new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
component_parts += new /obj/item/weapon/reagent_containers/syringe(src)
component_parts += new /obj/item/weapon/reagent_containers/syringe(src)
component_parts += new /obj/item/weapon/reagent_containers/syringe(src)
component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
RefreshParts()
/obj/machinery/sleeper/initialize()
update_icon()
@@ -156,6 +210,10 @@
return 1
/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user)
if(default_deconstruction_screwdriver(user, I))
return
if(default_deconstruction_crowbar(user, I))
return
add_fingerprint(user)
if(istype(I, /obj/item/weapon/reagent_containers/glass))
if(!beaker)
@@ -230,7 +288,9 @@
occupant.loc = loc
occupant = null
for(var/atom/movable/A in src) // In case an object was dropped inside or something
if(A == beaker)
if(A == beaker || A == circuit)
continue
if(A in component_parts)
continue
A.loc = loc
update_use_power(1)

View File

@@ -9,11 +9,31 @@
icon_state = "body_scanner_0"
density = 1
anchored = 1
circuit = /obj/item/weapon/circuitboard/body_scanner
use_power = 1
idle_power_usage = 60
active_power_usage = 10000 //10 kW. It's a big all-body scanner.
/obj/machinery/bodyscanner/New()
..()
spawn( 5 )
var/obj/machinery/body_scanconsole/C = locate(/obj/machinery/body_scanconsole) in range(2,src)
if(C)
C.connected = src
return
return
/obj/machinery/bodyscanner/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
RefreshParts()
/obj/machinery/bodyscanner/relaymove(mob/user as mob)
if (user.stat)
return
@@ -53,6 +73,10 @@
src.icon_state = "body_scanner_1"
for(var/obj/O in src)
//O = null
if(O in component_parts)
continue
if(O == circuit)
continue
qdel(O)
//Foreach goto(124)
src.add_fingerprint(usr)
@@ -62,6 +86,10 @@
if ((!( src.occupant ) || src.locked))
return
for(var/obj/O in src)
if(O in component_parts)
continue
if(O == circuit)
continue
O.loc = src.loc
//Foreach goto(30)
if (src.occupant.client)
@@ -73,35 +101,50 @@
src.icon_state = "body_scanner_0"
return
/obj/machinery/bodyscanner/attackby(obj/item/weapon/grab/G as obj, user as mob)
if ((!( istype(G, /obj/item/weapon/grab) ) || !( ismob(G.affecting) )))
/obj/machinery/bodyscanner/attackby(var/obj/item/G, user as mob)
if(default_deconstruction_screwdriver(user, G))
return
if (src.occupant)
user << "<span class='warning'>The scanner is already occupied!</span>"
if(default_deconstruction_crowbar(user, G))
return
if (G.affecting.abiotic())
user << "<span class='warning'>Subject cannot have abiotic items on.</span>"
return
var/mob/M = G.affecting
if (M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
M.loc = src
src.occupant = M
update_use_power(2)
src.icon_state = "body_scanner_1"
for(var/obj/O in src)
O.loc = src.loc
//Foreach goto(154)
src.add_fingerprint(user)
//G = null
qdel(G)
if(istype(G, /obj/item/weapon/grab))
var/obj/item/weapon/grab/H = G
if(!(ismob(H.affecting)))
return
if (src.occupant)
user << "<span class='warning'>The scanner is already occupied!</span>"
return
if (H.affecting.abiotic())
user << "<span class='warning'>Subject cannot have abiotic items on.</span>"
return
var/mob/M = H.affecting
if (M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
M.loc = src
src.occupant = M
update_use_power(2)
src.icon_state = "body_scanner_1"
for(var/obj/O in src)
if(O in component_parts)
continue
if(O == circuit)
continue
O.loc = src.loc
//Foreach goto(154)
src.add_fingerprint(user)
//G = null
qdel(G)
return
/obj/machinery/bodyscanner/ex_act(severity)
switch(severity)
if(1.0)
for(var/atom/movable/A as mob|obj in src)
if(A in component_parts)
continue
if(A == circuit)
continue
A.loc = src.loc
ex_act(severity)
//Foreach goto(35)
@@ -111,6 +154,10 @@
if(2.0)
if (prob(50))
for(var/atom/movable/A as mob|obj in src)
if(A in component_parts)
continue
if(A == circuit)
continue
A.loc = src.loc
ex_act(severity)
//Foreach goto(108)
@@ -120,6 +167,10 @@
if(3.0)
if (prob(25))
for(var/atom/movable/A as mob|obj in src)
if(A in component_parts)
continue
if(A == circuit)
continue
A.loc = src.loc
ex_act(severity)
//Foreach goto(181)
@@ -166,11 +217,12 @@
dir = 8
density = 0
anchored = 1
circuit = /obj/item/weapon/circuitboard/scanner_console
/obj/machinery/body_scanconsole/New()
..()
spawn( 5 )
src.connected = locate(/obj/machinery/bodyscanner, get_step(src, WEST)) //We assume dir = 8 so scanner is WEST. Other sprites do exist.
src.connected = locate(/obj/machinery/bodyscanner) in range(2,src)
return
return
@@ -228,6 +280,36 @@
user << browse(dat, "window=scanconsole;size=430x600")
return
/obj/machinery/body_scanconsole/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
user << "<span class='notice'>You start disconnecting the monitor.</span>"
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
var/obj/item/weapon/circuitboard/M = new circuit( A )
A.circuit = M
A.anchored = 1
A.density = 1
A.frame_type = M.board_type
for (var/obj/C in src)
C.forceMove(loc)
if (src.stat & BROKEN)
user << "<span class='notice'>The broken glass falls out.</span>"
new /obj/item/weapon/material/shard( src.loc )
A.state = 3
A.icon_state = "[A.frame_type]_3"
else
user << "<span class='notice'>You disconnect the monitor.</span>"
A.state = 4
A.icon_state = "[A.frame_type]_4"
A.pixel_x = pixel_x
A.pixel_y = pixel_y
A.dir = dir
M.deconstruct(src)
qdel(src)
else
src.attack_hand(user)
return
/obj/machinery/body_scanconsole/Topic(href, href_list)
if (..())

View File

@@ -23,12 +23,14 @@
var/datum/wires/autolathe/wires = null
/obj/machinery/autolathe/New()
..()
wires = new(src)
/obj/machinery/autolathe/map/New()
..()
//Create parts for lathe.
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)

View File

@@ -32,6 +32,11 @@
path = /obj/item/weapon/reagent_containers/glass/bucket
category = "General"
/datum/autolathe/recipe/bucket/drinkingglass
name = "drinking glass"
path = /obj/item/weapon/reagent_containers/food/drinks/drinkingglass
category = "General"
/datum/autolathe/recipe/flashlight
name = "flashlight"
path = /obj/item/device/flashlight
@@ -226,26 +231,21 @@
path = /obj/item/weapon/circuitboard/fax
category = "Engineering"
/datum/autolathe/recipe/conveyor
name = "conveyor electronics"
path = /obj/item/weapon/circuitboard/conveyor
category = "Engineering"
/datum/autolathe/recipe/microwave
name = "microwave electronics"
path = /obj/item/weapon/circuitboard/microwave
category = "Engineering"
/datum/autolathe/recipe/vending
name = "vending machine electronics"
path = /obj/item/weapon/circuitboard/vending
category = "Engineering"
/datum/autolathe/recipe/washing
name = "washing machine electronics"
path = /obj/item/weapon/circuitboard/washing
category = "Engineering"
/datum/autolathe/recipe/request
name = "request console electronics"
path = /obj/item/weapon/circuitboard/request
category = "Engineering"
/datum/autolathe/recipe/motor
name = "motor"
path = /obj/item/weapon/stock_parts/motor

View File

@@ -21,8 +21,11 @@
var/datum/reagents/R = new/datum/reagents(1000)
reagents = R
R.my_atom = src
beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src)
/obj/machinery/biogenerator/map/New()
..()
beaker = new /obj/item/weapon/reagent_containers/glass/bottle(src)
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/matter_bin(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)

View File

@@ -1,10 +1,10 @@
// PRESETS
var/global/list/station_networks = list(
NETWORK_CAFE_DOCK,
// NETWORK_CAFE_DOCK,
NETWORK_CARGO,
NETWORK_CIVILIAN,
NETWORK_CIVILIAN_EAST,
NETWORK_CIVILIAN_WEST,
// NETWORK_CIVILIAN_EAST,
// NETWORK_CIVILIAN_WEST,
NETWORK_COMMAND,
NETWORK_ENGINE,
NETWORK_ENGINEERING,
@@ -29,8 +29,10 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/network/crescent
network = list(NETWORK_CRESCENT)
/*
/obj/machinery/camera/network/cafe_dock
network = list(NETWORK_CAFE_DOCK)
*/
/obj/machinery/camera/network/cargo
network = list(NETWORK_CARGO)
@@ -38,11 +40,13 @@ var/global/list/engineering_networks = list(
/obj/machinery/camera/network/civilian
network = list(NETWORK_CIVILIAN)
/*
/obj/machinery/camera/network/civilian_east
network = list(NETWORK_CIVILIAN_EAST)
/obj/machinery/camera/network/civilian_west
network = list(NETWORK_CIVILIAN_WEST)
*/
/obj/machinery/camera/network/command
network = list(NETWORK_COMMAND)

View File

@@ -6,7 +6,7 @@
anchored = 1
use_power = 1
idle_power_usage = 5
active_power_usage = 40000 //40 kW. (this the power drawn when charging)
active_power_usage = 60000 //60 kW. (this the power drawn when charging)
power_channel = EQUIP
var/obj/item/weapon/cell/charging = null
var/chargelevel = -1

View File

@@ -45,8 +45,9 @@
var/eject_wait = 0 //Don't eject them as soon as they are created fuckkk
var/biomass = CLONE_BIOMASS * 3
/obj/machinery/clonepod/New()
/obj/machinery/clonepod/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)

View File

@@ -61,6 +61,7 @@
..()
uid = "[rand(100,999)]-G[rand(10,99)]"
/obj/machinery/computer/guestpass/attackby(obj/I, mob/user)
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
user << "<span class='notice'>You start disconnecting the monitor.</span>"
@@ -83,7 +84,7 @@
return
if(istype(I, /obj/item/weapon/card/id))
if(!giver && user.unEquip(I))
I.loc = src
I.forceMove(src)
giver = I
updateUsrDialog()
else if(giver)

View File

@@ -6,7 +6,7 @@
icon_keyboard = "med_key"
icon_screen = "medcomp"
light_color = "#315ab4"
req_one_access = list(access_medical, access_forensics_lockers)
req_one_access = list(access_medical, access_forensics_lockers, access_robotics)
circuit = /obj/item/weapon/circuitboard/med_data
var/obj/item/weapon/card/id/scan = null
var/authenticated = null
@@ -49,11 +49,11 @@
/obj/machinery/computer/med_data/attack_hand(mob/user as mob)
if(..())
return
var/dat
var/dat = list()
if (src.temp)
dat = text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
dat += text("<TT>[src.temp]</TT><BR><BR><A href='?src=\ref[src];temp=1'>Clear Screen</A>")
else
dat = text("Confirm Identity: <A href='?src=\ref[];scan=1'>[]</A><HR>", src, (src.scan ? text("[]", src.scan.name) : "----------"))
dat += text("Confirm Identity: <A href='?src=\ref[];scan=1'>[]</A><HR>", src, (src.scan ? text("[]", src.scan.name) : "----------"))
if (src.authenticated)
switch(src.screen)
if(1.0)
@@ -85,8 +85,12 @@
if ((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1)))
dat += "<table><tr><td>Name: [active1.fields["name"]] \
ID: [active1.fields["id"]]<BR>\n \
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n \
Age: <A href='?src=\ref[src];field=age'>[active1.fields["age"]]</A><BR>\n \
Sex: <A href='?src=\ref[src];field=sex'>[active1.fields["sex"]]</A><BR>\n"
if ((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2)))
dat += "Gender identity: <A href='?src=\ref[src];field=id_gender'>[active2.fields["id_gender"]]</A><BR>"
else
dat += "Gender identity: <A href='?src=\ref[src];field=id_gender'>Unknown</A><BR>"
dat += "Age: <A href='?src=\ref[src];field=age'>[active1.fields["age"]]</A><BR>\n \
Fingerprint: <A href='?src=\ref[src];field=fingerprint'>[active1.fields["fingerprint"]]</A><BR>\n \
Physical Status: <A href='?src=\ref[src];field=p_stat'>[active1.fields["p_stat"]]</A><BR>\n \
Mental Status: <A href='?src=\ref[src];field=m_stat'>[active1.fields["m_stat"]]</A><BR></td><td align = center valign = top> \
@@ -135,6 +139,7 @@
else
else
dat += text("<A href='?src=\ref[];login=1'>{Log In}</A>", src)
dat = jointext(dat,null)
user << browse(text("<HEAD><TITLE>Medical Records</TITLE></HEAD><TT>[]</TT>", dat), "window=med_rec")
onclose(user, "med_rec")
return
@@ -249,10 +254,10 @@
src.active1.fields["fingerprint"] = t1
if("sex")
if (istype(src.active1, /datum/data/record))
if (src.active1.fields["sex"] == "Male")
src.active1.fields["sex"] = "Female"
else
src.active1.fields["sex"] = "Male"
src.active1.fields["sex"] = next_in_list(src.active1.fields["sex"], all_genders_text_list)
if("id_gender")
if (istype(src.active2, /datum/data/record))
src.active2.fields["id_gender"] = next_in_list(src.active2.fields["id_gender"], all_genders_text_list)
if("age")
if (istype(src.active1, /datum/data/record))
var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num

View File

@@ -18,7 +18,7 @@
// Proc: New()
// Parameters: None
// Description: Adds components to the machine for deconstruction.
/obj/machinery/exonet_node/New()
/obj/machinery/exonet_node/map/New()
..()
component_parts = list()

View File

@@ -13,10 +13,13 @@
var/list/req_component_names = null
var/list/alarms = list("firealarm", "airalarm", "intercom", "keycard")
var/list/machines = list("machine", "photocopier", "fax", "microwave", "conveyor", "vending", "recharger", "wrecharger", "washing", "grinder")
var/list/computers = list("computer", "holopad")
var/list/displays = list("display", "guestpass", "newscaster", "atm")
var/list/no_circuit = list("wrecharger", "recharger", "grinder","conveyor")
var/list/machines = list(
"machine", "photocopier", "fax", "microwave", "conveyor", "recharger", "wrecharger",
"washing", "grinder", "teleporter_hub", "teleporter_station", "medpod", "dna_analyzer",
"massdriver")
var/list/computers = list("computer", "holopad", "console")
var/list/displays = list("display", "guestpass", "newscaster", "atm", "request")
var/list/no_circuit = list("wrecharger", "recharger", "grinder", "conveyor", "massdriver")
/obj/structure/frame/proc/update_desc()
var/D
@@ -35,15 +38,16 @@
req_components[A] = circuit.req_components[A]
req_component_names = circuit.req_components.Copy()
for(var/A in req_components)
var/cp = text2path(A)
var/obj/ct = new cp() // have to quickly instantiate it get name
req_component_names[A] = ct.name
var/obj/ct = A
req_component_names[A] = initial(ct.name)
/obj/structure/frame/New(var/loc, var/dir, var/building = 0, var/obj/item/frame/frame_type, mob/user as mob)
..()
if(building)
src.frame_type = frame_type
icon_state = "[frame_type]_0"
if(dir)
src.set_dir(dir)
if(frame_type in alarms)
if(loc)
@@ -69,7 +73,7 @@
if(loc)
src.loc = loc
if(frame_type == "display" || frame_type == "atm")
if(frame_type == "display" || frame_type == "atm" || frame_type == "request")
pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32)
pixel_y = (dir & 3)? (dir == 1 ? -32 : 32) : 0
@@ -104,8 +108,8 @@
circuit = new /obj/item/weapon/circuitboard/grinder(src)
if(frame_type == "conveyor")
circuit = new /obj/item/weapon/circuitboard/conveyor(src)
if(dir)
src.set_dir(dir)
if(frame_type == "massdriver")
circuit = new /obj/item/weapon/circuitboard/mass_driver(src)
if(frame_type == "computer")
density = 1
@@ -214,12 +218,25 @@
if(component_check)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
if(!new_machine.component_parts)
for(var/obj/O in src.components)
O.forceMove(null)
new_machine.RefreshParts()
if(new_machine.component_parts)
new_machine.component_parts.Cut()
else
new_machine.component_parts = list()
src.circuit.construct(new_machine)
for(var/obj/O in src.components)
if(circuit.contain_parts)
O.loc = new_machine
else
O.loc = null
new_machine.component_parts += O
circuit.loc = null
new_machine.circuit = circuit
new_machine.RefreshParts()
new_machine.pixel_x = src.pixel_x
new_machine.pixel_y = src.pixel_y
qdel(src)
@@ -243,6 +260,7 @@
var/obj/machinery/B = new src.circuit.build_path ( src.loc )
B.pixel_x = src.pixel_x
B.pixel_y = src.pixel_y
B.set_dir(dir)
src.circuit.construct(B)
qdel(src)
return
@@ -253,6 +271,7 @@
var/obj/machinery/B = new src.circuit.build_path ( src.loc )
B.pixel_x = src.pixel_x
B.pixel_y = src.pixel_y
B.set_dir(dir)
src.circuit.construct(B)
qdel(src)
return
@@ -386,13 +405,13 @@
if(state == 3)
if(frame_type in machines)
for(var/I in req_components)
if(istype(P, text2path(I)) && (req_components[I] > 0))
if(istype(P, I) && (req_components[I] > 0))
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
if(istype(P, /obj/item/stack))
var/obj/item/stack/CP = P
if(istype(P, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/CP = P
if(CP.get_amount() > 1)
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
var/obj/item/stack/CC = new /obj/item/stack(src)
var/obj/item/stack/cable_coil/CC = new /obj/item/stack/cable_coil(src)
CC.amount = camt
CC.update_icon()
CP.use(camt)
@@ -400,6 +419,20 @@
req_components[I] -= camt
update_desc()
break
if(istype(P, /obj/item/stack/material/glass/reinforced))
var/obj/item/stack/material/glass/reinforced/CP = P
if(CP.get_amount() > 1)
var/camt = min(CP.amount, req_components[I]) // amount of cable to take, idealy amount required, but limited by amount provided
var/obj/item/stack/material/glass/reinforced/CC = new /obj/item/stack/material/glass/reinforced(src)
CC.amount = camt
CC.update_icon()
CP.use(camt)
components += CC
req_components[I] -= camt
update_desc()
break
user.drop_item()
P.forceMove(src)
components += P

View File

@@ -37,6 +37,8 @@
/obj/machinery/iv_drip/MouseDrop(over_object, src_location, over_location)
..()
if(!isliving(usr))
return
if(attached)
visible_message("[src.attached] is detached from \the [src]")

View File

@@ -1,4 +1,3 @@
/obj/machinery/microwave
name = "Microwave"
icon = 'icons/obj/kitchen.dmi'
@@ -31,6 +30,9 @@
reagents = new/datum/reagents(100)
reagents.my_atom = src
/obj/machinery/microwave/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
component_parts += new /obj/item/weapon/stock_parts/motor(src)
@@ -114,7 +116,7 @@
user << "<span class='warning'>It's dirty!</span>"
return 1
else if(is_type_in_list(O,acceptable_items))
if (contents.len>=(max_n_of_items + component_parts.len)) //Adds component_parts to the maximum number of items.
if (contents.len>=(max_n_of_items + component_parts.len + 1)) //Adds component_parts to the maximum number of items. The 1 is from the circuit
user << "<span class='warning'>This [src] is full of ingredients, you cannot put more.</span>"
return 1
if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it
@@ -177,7 +179,7 @@
var/list/items_counts = new
var/list/items_measures = new
var/list/items_measures_p = new
for (var/obj/O in (contents-component_parts))
for (var/obj/O in ((contents - component_parts) - circuit))
var/display_name = O.name
if (istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg))
items_measures[display_name] = "egg"
@@ -237,7 +239,7 @@
if(stat & (NOPOWER|BROKEN))
return
start()
if (reagents.total_volume==0 && !(locate(/obj) in (contents-component_parts))) //dry run
if (reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run
if (!wzhzhzh(10))
abort()
return
@@ -299,7 +301,7 @@
return 1
/obj/machinery/microwave/proc/has_extra_item()
for (var/obj/O in (contents-component_parts))
for (var/obj/O in ((contents - component_parts) - circuit))
if ( \
!istype(O,/obj/item/weapon/reagent_containers/food) && \
!istype(O, /obj/item/weapon/grown) \
@@ -360,7 +362,7 @@
/obj/machinery/microwave/proc/fail()
var/obj/item/weapon/reagent_containers/food/snacks/badrecipe/ffuu = new(src)
var/amount = 0
for (var/obj/O in (contents-ffuu)-component_parts)
for (var/obj/O in (((contents - ffuu) - component_parts) - circuit))
amount++
if (O.reagents)
var/id = O.reagents.get_master_reagent_id()

View File

@@ -286,8 +286,7 @@ Class Procs:
var/obj/item/weapon/circuitboard/CB = circuit
var/P
for(var/obj/item/weapon/stock_parts/A in component_parts)
for(var/D in CB.req_components)
var/T = text2path(D)
for(var/T in CB.req_components)
if(ispath(A.type, T))
P = T
break
@@ -328,14 +327,14 @@ Class Procs:
/obj/machinery/proc/dismantle()
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/structure/frame/A = new /obj/structure/frame( src.loc )
var/obj/item/weapon/circuitboard/M = new circuit( A )
var/obj/item/weapon/circuitboard/M = circuit
A.circuit = M
A.anchored = 1
A.density = 1
A.frame_type = M.board_type
if(A.frame_type in A.no_circuit)
A.need_circuit = 0
for (var/obj/D in src)
for (var/obj/D in src.component_parts)
D.forceMove(loc)
if(A.components)
A.components.Cut()
@@ -344,10 +343,12 @@ Class Procs:
component_parts = list()
A.icon_state = "[A.frame_type]_3"
A.state = 3
A.dir = dir
A.pixel_x = pixel_x
A.pixel_y = pixel_y
A.check_components()
A.update_desc()
M.loc = null
M.deconstruct(src)
qdel(src)
return 1

View File

@@ -9,12 +9,41 @@
use_power = 1
idle_power_usage = 2
active_power_usage = 50
circuit = /obj/item/weapon/circuitboard/mass_driver
var/power = 1.0
var/code = 1.0
var/id = 1.0
var/drive_range = 50 //this is mostly irrelevant since current mass drivers throw into space, but you could make a lower-range mass driver for interstation transport or something I guess.
/obj/machinery/mass_driver/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/motor(src)
component_parts += new /obj/item/weapon/stock_parts/motor(src)
component_parts += new /obj/item/weapon/stock_parts/gear(src)
component_parts += new /obj/item/weapon/stock_parts/gear(src)
component_parts += new /obj/item/weapon/stock_parts/spring(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/stack/cable_coil(src, 5)
RefreshParts()
/obj/machinery/mass_driver/attackby(var/obj/item/I, mob/user)
if(default_deconstruction_screwdriver(user, I))
return
if(default_deconstruction_crowbar(user, I))
return
if(istype(I, /obj/item/device/multitool))
if(panel_open)
var/input = sanitize(input(usr, "What id would you like to give this conveyor?", "Multitool-Conveyor interface", id))
if(!input)
usr << "No input found please hang up and try your call again."
return
id = input
return
return
/obj/machinery/mass_driver/proc/drive(amount)
if(stat & (BROKEN|NOPOWER))

View File

@@ -15,9 +15,9 @@ obj/machinery/recharger
var/icon_state_idle = "recharger0" //also when unpowered
var/portable = 1
circuit = /obj/item/weapon/circuitboard/recharger
frame_type = "recharger"
obj/machinery/recharger/New()
obj/machinery/recharger/map/New()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/stack/cable_coil(src, 5)
@@ -171,4 +171,13 @@ obj/machinery/recharger/wallcharger
icon_state_idle = "wrecharger0"
portable = 0
circuit = /obj/item/weapon/circuitboard/recharger/wrecharger
frame_type = "wrecharger"
frame_type = "wrecharger"
obj/machinery/recharger/wallcharger/map/New()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/stack/cable_coil(src, 5)
RefreshParts()
..()
return

View File

@@ -22,9 +22,9 @@
var/weld_power_use = 2300 // power used per point of brute damage repaired. 2.3 kW ~ about the same power usage of a handheld arc welder
var/wire_power_use = 500 // power used per point of burn damage repaired.
/obj/machinery/recharge_station/New()
/obj/machinery/recharge_station/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)
component_parts += new /obj/item/weapon/stock_parts/manipulator(src)

View File

@@ -28,6 +28,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
anchored = 1
icon = 'icons/obj/terminals.dmi'
icon_state = "req_comp0"
circuit = /obj/item/weapon/circuitboard/request
var/department = "Unknown" //The list of all departments on the station (Determined from this variable on each unit) Set this to the same thing if you want several consoles in one department
var/list/message_log = list() //List of all messages
var/departmentType = 0 //Bitflag. Zero is reply-only. Map currently uses raw numbers instead of defines.
@@ -79,7 +80,7 @@ var/list/obj/machinery/requests_console/allConsoles = list()
req_console_supplies |= department
if (departmentType & RC_INFO)
req_console_information |= department
set_light(1)
/obj/machinery/requests_console/Destroy()
@@ -199,27 +200,29 @@ var/list/obj/machinery/requests_console/allConsoles = list()
//err... hacking code, which has no reason for existing... but anyway... it was once supposed to unlock priority 3 messanging on that console (EXTREME priority...), but the code for that was removed.
/obj/machinery/requests_console/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob)
/*
if (istype(O, /obj/item/weapon/crowbar))
if(open)
open = 0
icon_state="req_comp0"
else
open = 1
if(hackState == 0)
icon_state="req_comp_open"
else if(hackState == 1)
icon_state="req_comp_rewired"
if (istype(O, /obj/item/weapon/screwdriver))
if(open)
if(hackState == 0)
hackState = 1
icon_state="req_comp_rewired"
else if(hackState == 1)
hackState = 0
icon_state="req_comp_open"
else
user << "You can't do much with that."*/
if(default_deconstruction_screwdriver(user, O))
return
if(default_deconstruction_crowbar(user, O))
return
if(istype(O, /obj/item/device/multitool))
if(panel_open)
var/input = sanitize(input(usr, "What Department id would you like to give this Request Console?", "Multitool-Request Console interface", department))
if(!input)
usr << "No input found please hang up and try your call again."
return
department = input
announcement.title = "[department] announcement"
announcement.newscast = 1
name = "[department] Requests Console"
allConsoles += src
if (departmentType & RC_ASSIST)
req_console_assistance |= department
if (departmentType & RC_SUPPLY)
req_console_supplies |= department
if (departmentType & RC_INFO)
req_console_information |= department
return
if (istype(O, /obj/item/weapon/card/id))
if(inoperable(MAINT)) return

View File

@@ -170,6 +170,7 @@
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
circuit = /obj/item/weapon/circuitboard/teleporter_hub
var/obj/machinery/computer/teleporter/com
@@ -178,6 +179,21 @@
underlays.Cut()
underlays += image('icons/obj/stationobjs.dmi', icon_state = "tele-wires")
/obj/machinery/teleport/hub/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/scanning_module(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/weapon/stock_parts/micro_laser(src)
component_parts += new /obj/item/stack/cable_coil(src, 10)
RefreshParts()
/obj/machinery/teleport/hub/Bumped(M as mob|obj)
spawn()
if (src.icon_state == "tele1")
@@ -307,6 +323,7 @@
use_power = 1
idle_power_usage = 10
active_power_usage = 2000
circuit = /obj/item/weapon/circuitboard/teleporter_station
var/obj/machinery/teleport/hub/com
/obj/machinery/teleport/station/New()
@@ -314,6 +331,16 @@
overlays.Cut()
overlays += image('icons/obj/stationobjs.dmi', icon_state = "controller-wires")
/obj/machinery/teleport/station/map/New()
..()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/weapon/stock_parts/capacitor(src)
component_parts += new /obj/item/stack/cable_coil(src, 10)
RefreshParts()
/obj/machinery/teleport/station/attackby(var/obj/item/weapon/W)
src.attack_hand()

View File

@@ -4,12 +4,14 @@
/datum/data/vending_product
var/product_name = "generic" // Display name for the product
var/product_path = null
var/amount = 0 // Amount held in the vending machine
var/price = 0 // Price to buy one
var/display_color = null // Display color for vending machine listing
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/path, var/name = null, var/amount = 1, var/price = 0, var/color = null, var/category = CAT_NORMAL)
/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
@@ -24,6 +26,43 @@
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
@@ -36,8 +75,6 @@
layer = 2.9
anchored = 1
density = 1
circuit = /obj/item/weapon/circuitboard/vending
frame_type = "vending"
var/icon_vend //Icon_state when vending
var/icon_deny //Icon_state when denying access
@@ -96,14 +133,6 @@
/obj/machinery/vending/New()
..()
wires = new(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/spring(src)
component_parts += new /obj/item/weapon/stock_parts/spring(src)
component_parts += new /obj/item/weapon/stock_parts/motor(src)
component_parts += new /obj/item/weapon/stock_parts/motor(src)
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
component_parts += new /obj/item/stack/material/glass/reinforced(src, 2)
RefreshParts()
spawn(4)
if(src.product_slogans)
src.slogan_list += splittext(src.product_slogans, ";")
@@ -140,7 +169,7 @@
var/category = current_list[2]
for(var/entry in current_list[1])
var/datum/data/vending_product/product = new/datum/data/vending_product(entry)
var/datum/data/vending_product/product = new/datum/data/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
@@ -153,6 +182,9 @@
wires = null
qdel(coin)
coin = null
for(var/datum/data/vending_product/R in product_records)
qdel(R)
product_records = null
return ..()
/obj/machinery/vending/ex_act(severity)
@@ -224,7 +256,7 @@
return
else if(istype(W, /obj/item/weapon/coin) && premium.len > 0)
user.drop_item()
W.loc = src
W.forceMove(src)
coin = W
categories |= CAT_COIN
user << "<span class='notice'>You insert \the [W] into \the [src].</span>"
@@ -242,9 +274,6 @@
user << "<span class='notice'>You [anchored? "un" : ""]secured \the [src]!</span>"
anchored = !anchored
return
else if(default_deconstruction_crowbar(user, W))
return
else
for(var/datum/data/vending_product/R in product_records)
@@ -423,7 +452,7 @@
"name" = I.product_name,
"price" = I.price,
"color" = I.display_color,
"amount" = I.amount)))
"amount" = I.get_amount())))
data["products"] = listed_products
@@ -453,10 +482,10 @@
usr << "There is no coin in this machine."
return
coin.loc = src.loc
coin.forceMove(src.loc)
if(!usr.get_active_hand())
usr.put_in_hands(coin)
usr << "<span class='notice'>You remove the [coin] from the [src]</span>"
usr << "<span class='notice'>You remove \the [coin] from \the [src]</span>"
coin = null
categories &= ~CAT_COIN
@@ -517,13 +546,13 @@
else
user << "<span class='notice'>You weren't able to pull the coin out fast enough, the machine ate it, string and all.</span>"
qdel(coin)
coin = null
categories &= ~CAT_COIN
else
qdel(coin)
coin = null
categories &= ~CAT_COIN
R.amount--
if(((src.last_reply + (src.vend_delay + 200)) <= world.time) && src.vend_reply)
spawn(0)
src.speak(src.vend_reply)
@@ -533,16 +562,31 @@
if (src.icon_vend) //Show the vending animation if needed
flick(src.icon_vend,src)
spawn(src.vend_delay)
new R.product_path(get_turf(src))
R.get_product(get_turf(src))
if(prob(1))
sleep(3)
if(R.get_product(get_turf(src)))
src.visible_message("<span class='notice'>\The [src] clunks as it vends an additional item.</span>")
src.status_message = ""
src.status_error = 0
src.vend_ready = 1
currently_vending = null
nanomanager.update_uis(src)
/obj/machinery/vending/proc/stock(var/datum/data/vending_product/R, var/mob/user)
user << "<span class='notice'>You insert \the [src] in the product receptor.</span>"
R.amount++
/**
* Add item to the machine
*
* 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)
if(!user.unEquip(W))
return
user << "<span class='notice'>You insert \the [W] in the product receptor.</span>"
R.add_product(W)
nanomanager.update_uis(src)
@@ -592,15 +636,8 @@
//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)
if (R.amount <= 0) //Try to use a record that actually has something to dump.
continue
var/dump_path = R.product_path
if (!dump_path)
continue
while(R.amount>0)
new dump_path(src.loc)
R.amount--
while(R.get_amount()>0)
R.get_product(loc)
break
stat |= BROKEN
@@ -615,20 +652,15 @@
return 0
for(var/datum/data/vending_product/R in src.product_records)
if (R.amount <= 0) //Try to use a record that actually has something to dump.
throw_item = R.get_product(loc)
if (!throw_item)
continue
var/dump_path = R.product_path
if (!dump_path)
continue
R.amount--
throw_item = new dump_path(src.loc)
break
if (!throw_item)
return 0
spawn(0)
throw_item.throw_at(target, 16, 3, src)
src.visible_message("<span class='warning'>[src] launches [throw_item.name] at [target.name]!</span>")
src.visible_message("<span class='warning'>\The [src] launches \a [throw_item] at \the [target]!</span>")
return 1
/*
@@ -656,7 +688,7 @@
icon = 'icons/obj/objects.dmi'
icon_state = "dispenser"
product_paths = "/obj/item/weapon/tank/oxygen;/obj/item/weapon/tank/phoron;/obj/item/weapon/tank/emergency_oxygen;/obj/item/weapon/tank/emergency_oxygen/engi;/obj/item/clothing/mask/breath"
product_amounts = "10;10;10;5;25"
productamounts = "10;10;10;5;25"
vend_delay = 0
*/
@@ -882,7 +914,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(entry, name)
var/datum/data/vending_product/product = new/datum/data/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
@@ -905,8 +937,26 @@
desc = "A kitchen and restaurant equipment vendor."
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware"
products = list(/obj/item/weapon/tray = 8,/obj/item/weapon/material/kitchen/utensil/fork = 6, /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/clothing/suit/chef/classic = 2)
contraband = list(/obj/item/weapon/material/kitchen/rollingpin = 2, /obj/item/weapon/material/knife/butch = 2)
products = list(
/obj/item/weapon/tray = 8,
/obj/item/weapon/material/kitchen/utensil/fork = 6,
/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/clothing/suit/chef/classic = 2,
/obj/item/weapon/storage/toolbox/lunchbox = 3,
/obj/item/weapon/storage/toolbox/lunchbox/heart = 3,
/obj/item/weapon/storage/toolbox/lunchbox/cat = 3,
/obj/item/weapon/storage/toolbox/lunchbox/nt = 3,
/obj/item/weapon/storage/toolbox/lunchbox/mars = 3,
/obj/item/weapon/storage/toolbox/lunchbox/cti = 3,
/obj/item/weapon/storage/toolbox/lunchbox/nymph = 3,
/obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3)
contraband = list(/obj/item/weapon/material/kitchen/rollingpin = 2,
/obj/item/weapon/material/knife/butch = 2)
/obj/machinery/vending/sovietsoda
name = "BODA"
@@ -924,8 +974,10 @@
icon_deny = "tool-deny"
//req_access = list(access_maint_tunnels) //Maintenance access
products = list(/obj/item/stack/cable_coil/random = 10,/obj/item/weapon/crowbar = 5,/obj/item/weapon/weldingtool = 3,/obj/item/weapon/wirecutters = 5,
/obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5)
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2)
/obj/item/weapon/wrench = 5,/obj/item/device/analyzer = 5,/obj/item/device/t_scanner = 5,/obj/item/weapon/screwdriver = 5,
/obj/item/device/flashlight/glowstick = 3, /obj/item/device/flashlight/glowstick/red = 3, /obj/item/device/flashlight/glowstick/blue = 3,
/obj/item/device/flashlight/glowstick/orange =3, /obj/item/device/flashlight/glowstick/yellow = 3)
contraband = list(/obj/item/weapon/weldingtool/hugetank = 2,/obj/item/clothing/gloves/fyellow = 2, )
premium = list(/obj/item/clothing/gloves/yellow = 1)
/obj/machinery/vending/engivend
@@ -939,12 +991,15 @@
/obj/item/weapon/circuitboard/airalarm = 10,/obj/item/weapon/circuitboard/firealarm = 10,/obj/item/weapon/circuitboard/status_display = 2,
/obj/item/weapon/circuitboard/ai_status_display = 2,/obj/item/weapon/circuitboard/newscaster = 2,/obj/item/weapon/circuitboard/holopad = 2,
/obj/item/weapon/circuitboard/intercom = 4,/obj/item/weapon/circuitboard/security/telescreen/entertainment = 4,
/obj/item/weapon/circuitboard/atm = 0,/obj/item/weapon/circuitboard/guestpass = 0,/obj/item/weapon/circuitboard/keycard_auth = 0,
/obj/item/weapon/circuitboard/photocopier = 0,/obj/item/weapon/circuitboard/fax = 0,/obj/item/weapon/circuitboard/conveyor = 0,
/obj/item/weapon/circuitboard/microwave = 0,/obj/item/weapon/circuitboard/vending = 0,/obj/item/weapon/circuitboard/washing = 0,
/obj/item/weapon/stock_parts/motor = 0,/obj/item/weapon/stock_parts/spring = 0,/obj/item/weapon/stock_parts/gear = 0)
/obj/item/weapon/stock_parts/motor = 2,/obj/item/weapon/stock_parts/spring = 2,/obj/item/weapon/stock_parts/gear = 2,
/obj/item/weapon/circuitboard/atm,/obj/item/weapon/circuitboard/guestpass,/obj/item/weapon/circuitboard/keycard_auth,
/obj/item/weapon/circuitboard/photocopier,/obj/item/weapon/circuitboard/fax,/obj/item/weapon/circuitboard/request,
/obj/item/weapon/circuitboard/microwave,/obj/item/weapon/circuitboard/washing,/obj/item/weapon/circuitboard/scanner_console,
/obj/item/weapon/circuitboard/sleeper_console,/obj/item/weapon/circuitboard/body_scanner,/obj/item/weapon/circuitboard/sleeper,
/obj/item/weapon/circuitboard/dna_analyzer)
contraband = list(/obj/item/weapon/cell/potato = 3)
premium = list(/obj/item/weapon/storage/belt/utility = 3)
product_records = list()
//This one's from bay12
/obj/machinery/vending/engineering

View File

@@ -22,11 +22,12 @@
if(!build_machine_type)
return
var/ndir
if(!frame_type)
var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Computer", "Machine", "Holopad", "Conveyor",
"Photocopier", "Fax", "Microwave", "Vending Machine",
"Photocopier", "Fax", "Microwave",
"Recharger", "Washing Machine", "Grinder",
"Medical Console", "Medical Pod", "DNA Analyzer",
"Mass Driver",
"Cancel")
if(response == "Cancel")
@@ -37,22 +38,29 @@
switch(response)
if("Holopad")
new /obj/item/stack/material/steel( usr.loc, 1 ) //holopads are smaller, they only need 4 sheets
if("Conveyor")
ndir = get_dir(src,usr)
if (!(ndir in cardinal))
return
if("Fax")
new /obj/item/stack/material/steel( usr.loc, 2 ) //faxes are smaller, they only need 3 sheets
if("Microwave")
new /obj/item/stack/material/steel( usr.loc, 1 ) //microwaves are smaller, they only need 4 sheets
if("Vending Machine")
frame_type = "vending"
if("Recharger")
new /obj/item/stack/material/steel( usr.loc, 2 ) //rechargers are smaller, they only need 3 sheets
if("Washing Machine")
frame_type = "washing"
if("Grinder")
new /obj/item/stack/material/steel( usr.loc, 2 ) //grinders are smaller, they only need 3 sheets
if("Medical Console")
frame_type = "console"
if("Medical Pod")
frame_type = "medpod"
if("DNA Analyzer")
frame_type = "dna_analyzer"
if("Mass Driver")
frame_type = "massdriver"
var/ndir
ndir = usr.dir
if (!(ndir in cardinal))
return
var/obj/machinery/M = new build_machine_type(get_turf(src.loc), ndir, 1, frame_type)
M.fingerprints = src.fingerprints
@@ -64,7 +72,7 @@
if(!frame_type)
var/response = input(usr, "What kind of frame would you like to make?", "Frame type request", null) in list("Fire Alarm", "Air Alarm", "Display", "Newscaster",
"ATM", "Guest Pass Console", "Intercom", "Keycard Authenticator",
"Wall Charger",
"Wall Charger", "Supply Request Console",
"Cancel")
if(response == "Cancel")
@@ -92,6 +100,8 @@
if("Wall Charger")
frame_type = "wrecharger"
new /obj/item/stack/material/steel( usr.loc, 2 ) //wall rechargers are smaller, they only need 3 sheets
if("Supply Request Console")
frame_type = "request"
if(!build_machine_type)
return

View File

@@ -21,7 +21,8 @@
var/obj/crayon
var/list/washing = list()
/obj/machinery/washing_machine/New()
/obj/machinery/washing_machine/map/New()
circuit = new circuit(src)
component_parts = list()
component_parts += new /obj/item/weapon/stock_parts/motor(src)
component_parts += new /obj/item/weapon/stock_parts/gear(src)

View File

@@ -193,16 +193,14 @@ steam.start() -- spawns the effect
affect(M)
/obj/effect/effect/smoke/proc/affect(var/mob/living/carbon/M)
if (istype(M))
if (!istype(M))
return 0
if (M.internal != null)
if(M.wear_mask && (M.wear_mask.item_flags & AIRTIGHT))
if(M.wear_mask && (M.wear_mask.item_flags & AIRTIGHT))
return 0
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.head && (H.head.item_flags & AIRTIGHT))
return 0
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.head && (H.head.item_flags & AIRTIGHT))
return 0
return 0
return 1
/////////////////////////////////////////////
@@ -225,7 +223,8 @@ steam.start() -- spawns the effect
/////////////////////////////////////////////
/obj/effect/effect/smoke/bad
time_to_live = 200
time_to_live = 600
//var/list/projectiles
/obj/effect/effect/smoke/bad/Move()
..()
@@ -235,70 +234,25 @@ steam.start() -- spawns the effect
/obj/effect/effect/smoke/bad/affect(var/mob/living/carbon/M)
if (!..())
return 0
M.drop_item()
M.adjustOxyLoss(1)
if (M.coughedtime != 1)
M.coughedtime = 1
if(prob(25))
M.emote("cough")
spawn ( 20 )
M.coughedtime = 0
/obj/effect/effect/smoke/bad/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
if(air_group || (height==0)) return 1
if(istype(mover, /obj/item/projectile/beam))
var/obj/item/projectile/beam/B = mover
B.damage = (B.damage/2)
/* Not feasile until a later date
/obj/effect/effect/smoke/bad/Crossed(atom/movable/M as mob|obj)
..()
if(istype(M, /obj/item/projectile/beam))
var/obj/item/projectile/beam/B = M
if(!(B in projectiles))
B.damage = (B.damage/2)
projectiles += B
destroyed_event.register(B, src, /obj/effect/effect/smoke/bad/proc/on_projectile_delete)
world << "Damage is: [B.damage]"
return 1
/////////////////////////////////////////////
// Sleep smoke
/////////////////////////////////////////////
/obj/effect/effect/smoke/sleepy
/obj/effect/effect/smoke/sleepy/Move()
..()
for(var/mob/living/carbon/M in get_turf(src))
affect(M)
/obj/effect/effect/smoke/sleepy/affect(mob/living/carbon/M as mob )
if (!..())
return 0
M.drop_item()
M:sleeping += 1
if (M.coughedtime != 1)
M.coughedtime = 1
M.emote("cough")
spawn ( 20 )
M.coughedtime = 0
/////////////////////////////////////////////
// Mustard Gas
/////////////////////////////////////////////
/obj/effect/effect/smoke/mustard
name = "mustard gas"
icon_state = "mustard"
/obj/effect/effect/smoke/mustard/Move()
..()
for(var/mob/living/carbon/human/R in get_turf(src))
affect(R)
/obj/effect/effect/smoke/mustard/affect(var/mob/living/carbon/human/R)
if (!..())
return 0
if (R.wear_suit != null)
return 0
R.burn_skin(0.75)
if (R.coughedtime != 1)
R.coughedtime = 1
R.emote("gasp")
spawn (20)
R.coughedtime = 0
R.updatehealth()
return
/obj/effect/effect/smoke/bad/proc/on_projectile_delete(obj/item/projectile/beam/proj)
projectiles -= proj
*/
/////////////////////////////////////////////
// Smoke spread
@@ -321,7 +275,7 @@ steam.start() -- spawns the effect
if(direct)
direction = direct
/datum/effect/effect/system/smoke_spread/start()
/datum/effect/effect/system/smoke_spread/start(var/I)
var/i = 0
for(i=0, i<src.number, i++)
if(src.total_smoke > 20)
@@ -331,6 +285,7 @@ steam.start() -- spawns the effect
src.location = get_turf(holder)
var/obj/effect/effect/smoke/smoke = PoolOrNew(smoke_type, src.location)
src.total_smoke++
smoke.color = I
var/direction = src.direction
if(!direction)
if(src.cardinals)
@@ -348,14 +303,6 @@ steam.start() -- spawns the effect
/datum/effect/effect/system/smoke_spread/bad
smoke_type = /obj/effect/effect/smoke/bad
/datum/effect/effect/system/smoke_spread/sleepy
smoke_type = /obj/effect/effect/smoke/sleepy
/datum/effect/effect/system/smoke_spread/mustard
smoke_type = /obj/effect/effect/smoke/mustard
/////////////////////////////////////////////
//////// Attach an Ion trail to any object, that spawns when it moves (like for the jetpack)
/// just pass in the object to attach it to in set_up
@@ -507,9 +454,9 @@ steam.start() -- spawns the effect
M << "<span class='warning'>The solution violently explodes.</span>"
explosion(
location,
round(min(devst, BOMBCAP_DVSTN_RADIUS)),
round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
round(min(light, BOMBCAP_LIGHT_RADIUS)),
location,
round(min(devst, BOMBCAP_DVSTN_RADIUS)),
round(min(heavy, BOMBCAP_HEAVY_RADIUS)),
round(min(light, BOMBCAP_LIGHT_RADIUS)),
round(min(flash, BOMBCAP_FLASH_RADIUS))
)

View File

@@ -86,6 +86,17 @@
qdel(src)
return
/obj/structure/closet/body_bag/proc/get_occupants()
var/list/occupants = list()
for(var/mob/living/carbon/human/H in contents)
occupants += H
return occupants
/obj/structure/closet/body_bag/proc/update(var/broadcast=0)
if(istype(loc, /obj/structure/morgue))
var/obj/structure/morgue/M = loc
M.update(broadcast)
/obj/structure/closet/body_bag/update_icon()
if(opened)
icon_state = icon_opened

View File

@@ -199,7 +199,7 @@
src.force = on_damage
src.damtype = "fire"
processing_objects += src
/obj/item/device/flashlight/flare/proc/ignite() //Used for flare launchers.
on = !on
update_icon()
@@ -208,6 +208,76 @@
processing_objects += src
return 1
//Glowsticks
/obj/item/device/flashlight/glowstick
name = "green glowstick"
desc = "A green military-grade glowstick."
w_class = 2.0
brightness_on = 4
light_power = 2
light_color = "#49F37C"
icon_state = "glowstick"
item_state = "glowstick"
var/fuel = 0
/obj/item/device/flashlight/glowstick/New()
fuel = rand(1600, 2000)
..()
/obj/item/device/flashlight/glowstick/process()
fuel = max(fuel - 1, 0)
if(!fuel || !on)
turn_off()
if(!fuel)
src.icon_state = "[initial(icon_state)]-empty"
processing_objects -= src
/obj/item/device/flashlight/glowstick/proc/turn_off()
on = 0
update_icon()
/obj/item/device/flashlight/glowstick/attack_self(mob/user)
if(!fuel)
user << "<span class='notice'>The glowstick has already been turned on.</span>"
return
if(on)
return
. = ..()
if(.)
user.visible_message("<span class='notice'>[user] cracks and shakes the glowstick.</span>", "<span class='notice'>You crack and shake the glowstick, turning it on!</span>")
processing_objects += src
/obj/item/device/flashlight/glowstick/red
name = "red glowstick"
desc = "A red military-grade glowstick."
light_color = "#FC0F29"
icon_state = "glowstick_red"
item_state = "glowstick_red"
/obj/item/device/flashlight/glowstick/blue
name = "blue glowstick"
desc = "A blue military-grade glowstick."
light_color = "#599DFF"
icon_state = "glowstick_blue"
item_state = "glowstick_blue"
/obj/item/device/flashlight/glowstick/orange
name = "orange glowstick"
desc = "A orange military-grade glowstick."
light_color = "#FA7C0B"
icon_state = "glowstick_orange"
item_state = "glowstick_orange"
/obj/item/device/flashlight/glowstick/yellow
name = "yellow glowstick"
desc = "A yellow military-grade glowstick."
light_color = "#FEF923"
icon_state = "glowstick_yellow"
item_state = "glowstick_yellow"
/obj/item/device/flashlight/slime
gender = PLURAL
name = "glowing slime extract"

View File

@@ -0,0 +1,140 @@
/obj/item/device/closet_painter
name = "closet painter"
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "labeler1"
item_state = "flight"
var/colour = "plain"
var/colour_secure = "plain"
var/list/colours = list(
"plain" = list("open" = "open", "closed" = "closed"),
"blue" = list("open" = "open", "closed" = "blue"),
"mixed" = list("open" = "open", "closed" = "mixed"),
"grey" = list("open" = "open", "closed" = "grey"),
"green" = list("open" = "open", "closed" = "green"),
"orange" = list("open" = "open", "closed" = "orange"),
"pink" = list("open" = "open", "closed" = "pink"),
"red" = list("open" = "open", "closed" = "red"),
"white" = list("open" = "open", "closed" = "white"),
"yellow" = list("open" = "open", "closed" = "yellow"),
"black" = list("open" = "open", "closed" = "black"),
"bio" = list("open" = "bioopen", "closed" = "bio"),
"bio-virology" = list("open" = "bio_virologyopen", "closed" = "bio_virology"),
"bio-security" = list("open" = "bio_securityopen", "closed" = "bio_security"),
"bio-janitor" = list("open" = "bio_janitoropen", "closed" = "bio_janitor"),
"bio-scientist" = list("open" = "bio_scientistopen", "closed" = "bio_scientist"),
"bombsuit" = list("open" = "bombsuitopen", "closed" = "bombsuit"),
"bombsuit-security" = list("open" = "bombsuitsecopen", "closed" = "bombsuitsec"),
"full-red" = list("open" = "syndicateopen", "closed" = "syndicate"),
"full-green" = list("open" = "syndicate1open", "closed" = "syndicate1"),
"full-purple" = list("open" = "aclosetopen", "closed" = "acloset"),
"mining" = list("open" = "miningopen", "closed" = "mining"),
"emergency" = list("open" = "emergencyopen", "closed" = "emergency"),
"fire" = list("open" = "fireclosetopen", "closed" = "firecloset"),
"tool" = list("open" = "toolclosetopen", "closed" = "toolcloset"),
"radiation" = list("open" = "toolclosetopen", "closed" = "radsuitcloset")
)
var/list/colours_secure = list(
"plain" = list("open" = "open", "closed" = "secure", "locked" = "secure1", "broken" = "securebroken", "off" = "secureoff"),
"medical-red" = list("open" = "medicalopen", "closed" = "medical", "locked" = "medical1", "broken" = "medicalbroken", "off" = "medicaloff"),
"medical-green" = list("open" = "securemedopen", "closed" = "securemed", "locked" = "securemed1", "broken" = "securemedbroken", "off" = "securemedoff"),
"CMO" = list("open" = "cmosecureopen", "closed" = "cmosecure", "locked" = "cmosecure1", "broken" = "cmosecurebroken", "off" = "cmosecureoff"),
"cargo" = list("open" = "securecargoopen", "closed" = "securecargo", "locked" = "securecargo1", "broken" = "securecargobroken", "off" = "securecargooff"),
"mining" = list("open" = "miningsecopen", "closed" = "miningsec", "locked" = "miningsec1", "broken" = "miningsecbroken", "off" = "miningsecoff"),
"QM" = list("open" = "secureqmopen", "closed" = "secureqm", "locked" = "secureqm1", "broken" = "secureqmbroken", "off" = "secureqmoff"),
"hydroponics" = list("open" = "hydrosecureopen", "closed" = "hydrosecure", "locked" = "hydrosecure1", "broken" = "hydrosecurebroken", "off" = "hydrosecureoff"),
"atmospherics" = list("open" = "secureatmopen", "closed" = "secureatm", "locked" = "secureatm1", "broken" = "secureatmbroken", "off" = "secureatmoff"),
"engineer" = list("open" = "secureengopen", "closed" = "secureeng", "locked" = "secureeng1", "broken" = "secureengbroken", "off" = "secureengoff"),
"CE" = list("open" = "secureceopen", "closed" = "securece", "locked" = "securece1", "broken" = "securecebroken", "off" = "secureceoff"),
"electrical" = list("open" = "toolclosetopen", "closed" = "secureengelec", "locked" = "secureengelec1", "broken" = "secureengelecbroken", "off" = "secureengelecoff"),
"welding" = list("open" = "toolclosetopen", "closed" = "secureengweld", "locked" = "secureengweld1", "broken" = "secureengweldbroken", "off" = "secureengweldoff"),
"research" = list("open" = "secureresopen", "closed" = "secureres", "locked" = "secureres1", "broken" = "secureresbroken", "off" = "secureresoff"),
"RD" = list("open" = "rdsecureopen", "closed" = "rdsecure", "locked" = "rdsecure1", "broken" = "rdsecurebroken", "off" = "rdsecureoff"),
"security" = list("open" = "secopen", "closed" = "sec", "locked" = "sec1", "broken" = "secbroken", "off" = "secoff"),
"warden" = list("open" = "wardensecureopen", "closed" = "wardensecure", "locked" = "wardensecure1", "broken" = "wardensecurebroken", "off" = "wardensecureoff"),
"HoS" = list("open" = "hossecureopen", "closed" = "hossecure", "locked" = "hossecure1", "broken" = "hossecurebroken", "off" = "hossecureoff"),
"HoP" = list("open" = "hopsecureopen", "closed" = "hopsecure", "locked" = "hopsecure1", "broken" = "hopsecurebroken", "off" = "hopsecureoff"),
"Captain" = list("open" = "capsecureopen", "closed" = "capsecure", "locked" = "capsecure1", "broken" = "capsecurebroken", "off" = "capsecureoff")
)
/obj/item/device/closet_painter/afterattack(atom/A, var/mob/user, proximity)
if(!proximity)
return
if(!istype(A,/obj/structure/closet))
user << "<span class='warning'>\The [src] can only be used on closets.</span>"
return
var/config_error
if(istype(A,/obj/structure/closet/secure_closet))
var/obj/structure/closet/secure_closet/F = A
if(F.broken)
user << "<span class='warning'>\The [src] cannot paint broken closets.</span>"
return
var/list/colour_data = colours_secure[colour_secure]
if(!islist(colour_data))
config_error = 1
if(!config_error)
F.icon_opened = colour_data["open"]
F.icon_closed = colour_data["closed"]
F.icon_locked = colour_data["locked"]
F.icon_broken = colour_data["broken"]
F.icon_off = colour_data["off"]
F.update_icon()
else
var/obj/structure/closet/F = A
var/list/colour_data = colours[colour]
if(!islist(colour_data))
config_error = 1
if(!config_error)
F.icon_opened = colour_data["open"]
F.icon_closed = colour_data["closed"]
F.update_icon()
if(config_error)
user << "<span class='warning'>\The [src] flashes an error light. You might need to reconfigure it.</span>"
return
/obj/item/device/closet_painter/attack_self(var/mob/user)
var/choice = input("Do you wish to change the regular closet colour or the secure closet colour?") as null|anything in list("Regular Closet Colour","Secure Closet Colour")
if(choice == "Regular Closet Colour")
choose_colour()
else if(choice == "Secure Closet Colour")
choose_colour_secure()
/obj/item/device/closet_painter/examine(mob/user)
..(user)
user << "It is configured to produce the '[colour]' paint scheme or the '[colour_secure]' secure closet paint scheme."
/obj/item/device/closet_painter/verb/choose_colour()
set name = "Choose Colour"
set desc = "Choose a regular closet painter colour."
set category = "Object"
set src in usr
if(usr.incapacitated())
return
var/new_colour = input("Select a colour.") as null|anything in colours
if(new_colour && !isnull(colours[new_colour]))
colour = new_colour
usr << "<span class='notice'>You set \the [src] regular closet colour to '[colour]'.</span>"
/obj/item/device/closet_painter/verb/choose_colour_secure()
set name = "Choose Secure Colour"
set desc = "Choose a secure closet painter colour."
set category = "Object"
set src in usr
if(usr.incapacitated())
return
var/new_colour_secure = input("Select a colour.") as null|anything in colours_secure
if(new_colour_secure && !isnull(colours_secure[new_colour_secure]))
colour_secure = new_colour_secure
usr << "<span class='notice'>You set \the [src] secure closet colour to '[colour_secure]'.</span>"

View File

@@ -31,7 +31,7 @@
/obj/item/device/suit_cooling_unit/New()
processing_objects |= src
cell = new/obj/item/weapon/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find
cell = new/obj/item/weapon/cell/high() //comes not with the crappy default power cell - because this is dedicated EVA equipment
cell.loc = src
/obj/item/device/suit_cooling_unit/process()

View File

@@ -155,6 +155,10 @@ datum/uplink_item/dd_SortValue()
name = "9mm"
path = /obj/item/ammo_magazine/mc9mm
/datum/uplink_item/item/ammo/c45m
name = ".45"
path = /obj/item/ammo_magazine/c45m
/datum/uplink_item/item/ammo/darts
name = "Darts"
path = /obj/item/ammo_magazine/chemdart
@@ -163,6 +167,14 @@ datum/uplink_item/dd_SortValue()
name = "14.5mm"
path = /obj/item/weapon/storage/box/sniperammo
/datum/uplink_item/item/ammo/a556
name = "5.56mm"
path = /obj/item/ammo_magazine/a556
/datum/uplink_item/item/ammo/a556/ap
name = "5.56mm AP"
path = /obj/item/ammo_magazine/a556/ap
/datum/uplink_item/item/ammo/a10mm
name = "10mm"
path = /obj/item/ammo_magazine/a10mm
@@ -171,6 +183,23 @@ datum/uplink_item/dd_SortValue()
name = "7.62mm"
path = /obj/item/ammo_magazine/a762
/datum/uplink_item/item/ammo/a762/ap
name = "7.62mm AP"
path = /obj/item/ammo_magazine/a762/ap
/datum/uplink_item/item/ammo/g12
name = "12 gauge"
path = /obj/item/ammo_magazine/g12
/datum/uplink_item/item/ammo/g12/beanbag
name = "12 gauge beanbag"
path = /obj/item/ammo_magazine/g12/beanbag
item_cost = 1 // Discount due to it being LTL.
/datum/uplink_item/item/ammo/g12/pellet
name = "12 gauge pellet"
path = /obj/item/ammo_magazine/g12/pellet
/***************************************
* Highly Visible and Dangerous Weapons *
***************************************/
@@ -192,10 +221,10 @@ datum/uplink_item/dd_SortValue()
item_cost = 5
path = /obj/item/weapon/gun/energy/crossbow
/datum/uplink_item/item/visible_weapons/g9mm
name = "Silenced 9mm"
/datum/uplink_item/item/visible_weapons/silenced_45
name = "Silenced .45"
item_cost = 5
path = /obj/item/weapon/storage/box/syndie_kit/g9mm
path = /obj/item/weapon/gun/projectile/silenced
/datum/uplink_item/item/visible_weapons/riggedlaser
name = "Exosuit Rigged Laser"
@@ -223,6 +252,36 @@ datum/uplink_item/dd_SortValue()
item_cost = 7
path = /obj/item/weapon/gun/projectile/automatic/sts35
/datum/uplink_item/item/visible_weapons/combatshotgun
name = "Combat Shotgun"
item_cost = 7
path = /obj/item/weapon/gun/projectile/shotgun/pump/combat
/datum/uplink_item/item/visible_weapons/egun
name = "Energy Gun"
item_cost = 5
path = /obj/item/weapon/gun/energy/gun
/datum/uplink_item/item/visible_weapons/lasercannon
name = "Laser Cannon"
item_cost = 6
path = /obj/item/weapon/gun/energy/lasercannon
/datum/uplink_item/item/visible_weapons/lasercarbine
name = "Laser Carbine"
item_cost = 7
path = /obj/item/weapon/gun/energy/laser
/datum/uplink_item/item/visible_weapons/ionrifle
name = "Ion Rifle"
item_cost = 5
path = /obj/item/weapon/gun/energy/ionrifle
/datum/uplink_item/item/visible_weapons/xray
name = "Xray Gun"
item_cost = 7
path = /obj/item/weapon/gun/energy/xray
/*************************************
* Stealthy and Inconspicuous Weapons *
*************************************/
@@ -387,10 +446,6 @@ datum/uplink_item/dd_SortValue()
item_cost = 20
path = /obj/item/weapon/circuitboard/teleporter
/datum/uplink_item/item/tools/teleporter/New()
..()
antag_roles = list(MODE_MERCENARY)
/datum/uplink_item/item/tools/money
name = "Operations Funding"
item_cost = 3
@@ -573,7 +628,6 @@ datum/uplink_item/dd_SortValue()
/datum/uplink_item/item/badassery/surplus/New()
..()
antag_roles = list(MODE_MERCENARY)
desc = "A crate containing [item_worth] telecrystal\s worth of surplus leftovers."
/datum/uplink_item/item/badassery/surplus/get_goods(var/obj/item/device/uplink/U, var/loc)
@@ -622,7 +676,6 @@ var/image/default_abstract_uplink_icon
..()
name = "[command_name()] Update Announcement"
desc = "Causes a falsified [command_name()] Update. Triggers immediately after supplying additional data."
antag_roles = list(MODE_MERCENARY)
/datum/uplink_item/abstract/announcements/fake_centcom/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
command_announcement.Announce(args.["message"], args.["title"])
@@ -633,10 +686,6 @@ var/image/default_abstract_uplink_icon
desc = "Creates a fake crew arrival announcement as well as fake crew records, using your current appearance (including held items!) and worn id card. Trigger with care!"
item_cost = 4
/datum/uplink_item/abstract/announcements/fake_crew_arrival/New()
..()
antag_roles = list(MODE_MERCENARY)
/datum/uplink_item/abstract/announcements/fake_crew_arrival/get_goods(var/obj/item/device/uplink/U, var/loc, var/mob/user, var/list/args)
if(!user)
return 0

View File

@@ -38,7 +38,7 @@ var/datum/uplink_random_selection/default_uplink_selection = new/datum/uplink_ra
/datum/uplink_random_selection/default/New()
..()
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/g9mm)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/silenced_45)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/mc9mm)
items += new/datum/uplink_random_item(/datum/uplink_item/item/visible_weapons/revolver)
items += new/datum/uplink_random_item(/datum/uplink_item/item/ammo/a357)

View File

@@ -2,8 +2,8 @@
name = "medical pack"
singular_name = "medical pack"
icon = 'icons/obj/items.dmi'
amount = 5
max_amount = 5
amount = 10
max_amount = 10
w_class = 2
throw_speed = 4
throw_range = 20
@@ -65,24 +65,43 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.bandage())
if(affecting.is_bandaged())
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been bandaged.</span>"
return 1
else
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
var/used = 0
for (var/datum/wound/W in affecting.wounds)
if (W.internal)
continue
if(W.bandaged)
continue
if(used == amount)
break
if(!do_mob(user, M, W.damage/5))
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
break
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message("<span class='notice'>\The [user] bandages [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You bandage [W.desc] on [M]'s [affecting.name].</span>" )
user.visible_message("<span class='notice'>\The [user] bandages \a [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You bandage \a [W.desc] on [M]'s [affecting.name].</span>" )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
user.visible_message("<span class='notice'>\The [user] places a bruise patch over [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a bruise patch over [W.desc] on [M]'s [affecting.name].</span>" )
else if (W.damage_type == BRUISE)
user.visible_message("<span class='notice'>\The [user] places a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a bruise patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
else
user.visible_message("<span class='notice'>\The [user] places a bandaid over [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a bandaid over [W.desc] on [M]'s [affecting.name].</span>" )
use(1)
user.visible_message("<span class='notice'>\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>" )
W.bandage()
used++
affecting.update_damages()
if(used == amount)
if(affecting.is_bandaged())
user << "<span class='warning'>\The [src] is used up.</span>"
else
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
use(used)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
@@ -108,13 +127,19 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.salve())
if(affecting.is_salved())
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
return 1
else
user.visible_message("<span class='notice'>[user] salves wounds on [M]'s [affecting.name].</span>", \
"<span class='notice'>You salve wounds on [M]'s [affecting.name].</span>" )
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
if(!do_mob(user, M, 10))
user << "<span class='notice'>You must stand still to salve wounds.</span>"
return 1
user.visible_message("<span class='notice'>[user] salved wounds on [M]'s [affecting.name].</span>", \
"<span class='notice'>You salved wounds on [M]'s [affecting.name].</span>" )
use(1)
affecting.salve()
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
@@ -127,7 +152,7 @@
singular_name = "advanced trauma kit"
desc = "An advanced trauma kit for severe injuries."
icon_state = "traumakit"
heal_brute = 12
heal_brute = 0
origin_tech = list(TECH_BIO = 1)
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
@@ -139,29 +164,43 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
var/bandaged = affecting.bandage()
var/disinfected = affecting.disinfect()
if(!(bandaged || disinfected))
if(affecting.is_bandaged() && affecting.is_disinfected())
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been treated.</span>"
return 1
else
user.visible_message("<span class='notice'>\The [user] starts treating [M]'s [affecting.name].</span>", \
"<span class='notice'>You start treating [M]'s [affecting.name].</span>" )
var/used = 0
for (var/datum/wound/W in affecting.wounds)
if (W.internal)
continue
if (W.bandaged && W.disinfected)
continue
if(used == amount)
break
if(!do_mob(user, M, W.damage/5))
user << "<span class='notice'>You must stand still to bandage wounds.</span>"
break
if (W.current_stage <= W.max_bleeding_stage)
user.visible_message("<span class='notice'>\The [user] cleans [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
"<span class='notice'>You clean and seal [W.desc] on [M]'s [affecting.name].</span>" )
//H.add_side_effect("Itch")
else if (istype(W,/datum/wound/bruise))
user.visible_message("<span class='notice'>\The [user] places a medical patch over [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a medical patch over [W.desc] on [M]'s [affecting.name].</span>" )
user.visible_message("<span class='notice'>\The [user] cleans \a [W.desc] on [M]'s [affecting.name] and seals the edges with bioglue.</span>", \
"<span class='notice'>You clean and seal \a [W.desc] on [M]'s [affecting.name].</span>" )
else if (W.damage_type == BRUISE)
user.visible_message("<span class='notice'>\The [user] places a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You place a medical patch over \a [W.desc] on [M]'s [affecting.name].</span>" )
else
user.visible_message("<span class='notice'>\The [user] smears some bioglue over [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You smear some bioglue over [W.desc] on [M]'s [affecting.name].</span>" )
if (bandaged)
affecting.heal_damage(heal_brute,0)
use(1)
user.visible_message("<span class='notice'>\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>", \
"<span class='notice'>You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>" )
W.bandage()
W.disinfect()
W.heal_damage(heal_brute)
used++
affecting.update_damages()
if(used == amount)
if(affecting.is_bandaged())
user << "<span class='warning'>\The [src] is used up.</span>"
else
user << "<span class='warning'>\The [src] is used up, but there are more wounds to treat on \the [affecting.name].</span>"
use(used)
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))
@@ -174,7 +213,7 @@
singular_name = "advanced burn kit"
desc = "An advanced treatment kit for severe burns."
icon_state = "burnkit"
heal_burn = 12
heal_burn = 0
origin_tech = list(TECH_BIO = 1)
@@ -187,14 +226,20 @@
var/obj/item/organ/external/affecting = H.get_organ(user.zone_sel.selecting)
if(affecting.open == 0)
if(!affecting.salve())
if(affecting.is_salved())
user << "<span class='warning'>The wounds on [M]'s [affecting.name] have already been salved.</span>"
return 1
else
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
if(!do_mob(user, M, 10))
user << "<span class='notice'>You must stand still to salve wounds.</span>"
return 1
user.visible_message( "<span class='notice'>[user] covers wounds on [M]'s [affecting.name] with regenerative membrane.</span>", \
"<span class='notice'>You cover wounds on [M]'s [affecting.name] with regenerative membrane.</span>" )
affecting.heal_damage(0,heal_burn)
use(1)
affecting.salve()
else
if (can_operate(H)) //Checks if mob is lying down on table for surgery
if (do_surgery(H,user,src))

View File

@@ -68,6 +68,7 @@
icon_state = "emag"
item_state = "card-id"
origin_tech = list(TECH_MAGNET = 2, TECH_ILLEGAL = 2)
var/default_uses = 10
var/uses = 10
/obj/item/weapon/card/emag/resolve_attackby(atom/A, mob/user)
@@ -87,6 +88,12 @@
qdel(src)
return 1
/obj/item/weapon/card/emag/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/device/telecrystal))
src.uses += default_uses/2 //Adds half the default amount of uses which is more than you get per TC when buying, as to balance the utility of having multiple emags vs one heavily usable one
usr << "<span class='notice'>You add \the [O] to \the [src]. Increasing the uses of \the [src] to [uses].</span>"
qdel(O)
/obj/item/weapon/card/id
name = "identification card"

View File

@@ -36,6 +36,12 @@
board_type = "atm"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/request
name = T_BOARD("reques console")
build_path = /obj/machinery/requests_console
board_type = "request"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
//Alarm
/obj/item/weapon/circuitboard/firealarm
@@ -70,6 +76,18 @@
board_type = "holopad"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
/obj/item/weapon/circuitboard/scanner_console
name = T_BOARD("body scanner console")
build_path = /obj/machinery/body_scanconsole
board_type = "console"
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
/obj/item/weapon/circuitboard/sleeper_console
name = T_BOARD("sleeper console")
build_path = /obj/machinery/sleep_console
board_type = "console"
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
//Machine
/obj/item/weapon/circuitboard/photocopier
@@ -78,10 +96,10 @@
board_type = "photocopier"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/motor" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/weapon/stock_parts/matter_bin" = 1)
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/matter_bin = 1)
/obj/item/weapon/circuitboard/fax
name = T_BOARD("fax")
@@ -89,19 +107,19 @@
board_type = "fax"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/motor" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/weapon/stock_parts/matter_bin" = 1)
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/matter_bin = 1)
/obj/item/weapon/circuitboard/conveyor
name = T_BOARD("conveyor")
build_path = /obj/machinery/conveyor
board_type = "conveyor"
req_components = list(
"/obj/item/weapon/stock_parts/gear" = 2,
"/obj/item/weapon/stock_parts/motor" = 2,
"/obj/item/stack/cable_coil" = 5)
/obj/item/weapon/stock_parts/gear = 2,
/obj/item/weapon/stock_parts/motor = 2,
/obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/microwave
name = T_BOARD("microwave")
@@ -109,29 +127,17 @@
board_type = "microwave"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/weapon/stock_parts/motor" = 1,
"/obj/item/weapon/stock_parts/capacitor" = 1)
/obj/item/weapon/circuitboard/vending
name = T_BOARD("vending")
build_path = /obj/machinery/vending
board_type = "vending"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/weapon/stock_parts/motor" = 2,
"/obj/item/weapon/stock_parts/spring" = 2,
"/obj/item/stack/material/glass/reinforced" = 2)
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/recharger
name = T_BOARD("recharger")
build_path = /obj/machinery/recharger
board_type = "recharger"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/capacitor" = 1,
"/obj/item/stack/cable_coil" = 5)
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/recharger/wrecharger
name = T_BOARD("wall recharger")
@@ -144,18 +150,78 @@
board_type = "washing"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/motor" = 1,
"/obj/item/weapon/stock_parts/gear" = 2)
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/gear = 2)
/obj/item/weapon/circuitboard/grinder
name = T_BOARD("reagent grinder")
build_path = /obj/machinery/reagentgrinder
board_type = "grinder"
matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
req_components = list(
"/obj/item/weapon/stock_parts/motor" = 1,
"/obj/item/weapon/stock_parts/gear" = 1,
"/obj/item/weapon/reagent_containers/glass/beaker/large" = 1)
/obj/item/weapon/stock_parts/motor = 1,
/obj/item/weapon/stock_parts/gear = 1,
/obj/item/weapon/reagent_containers/glass/beaker/large = 1)
/obj/item/weapon/circuitboard/teleporter_hub
name = T_BOARD("teleporter hub")
build_path = /obj/machinery/teleport/hub
board_type = "teleporter_hub"
// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 4)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 4,
/obj/item/weapon/stock_parts/micro_laser = 4,
/obj/item/stack/cable_coil = 10)
/obj/item/weapon/circuitboard/teleporter_station
name = T_BOARD("teleporter station")
build_path = /obj/machinery/teleport/station
board_type = "teleporter_station"
// origin_tech = list(TECH_DATA = 2, TECH_BLUESPACE = 3)
req_components = list(
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/stack/cable_coil = 10)
/obj/item/weapon/circuitboard/body_scanner
name = T_BOARD("body scanner")
build_path = /obj/machinery/bodyscanner
board_type = "medpod"
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 3,
/obj/item/stack/material/glass/reinforced = 2)
/obj/item/weapon/circuitboard/sleeper
name = T_BOARD("sleeper")
build_path = /obj/machinery/sleeper
board_type = "medpod"
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/reagent_containers/glass/beaker = 3,
/obj/item/weapon/reagent_containers/syringe = 3,
/obj/item/stack/material/glass/reinforced = 2)
/obj/item/weapon/circuitboard/dna_analyzer
name = T_BOARD("dna analyzer")
build_path = /obj/machinery/dnaforensics
board_type = "dna_analyzer"
origin_tech = list(TECH_MAGNET = 4, TECH_BIO = 2, TECH_DATA = 2)
req_components = list(
/obj/item/weapon/stock_parts/scanning_module = 2,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/mass_driver
name = T_BOARD("mass driver")
build_path = /obj/machinery/mass_driver
board_type = "massdriver"
req_components = list(
/obj/item/weapon/stock_parts/gear = 2,
/obj/item/weapon/stock_parts/motor = 2,
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/stock_parts/spring = 1,
/obj/item/stack/cable_coil = 5)
//for testing - If this is still in when I commit, someone shoot me. --leaving in for now, shouldn't be able to get these on station anyways.
/obj/item/weapon/storage/box/frame_parts
@@ -175,7 +241,6 @@
new /obj/item/weapon/circuitboard/photocopier( src )
new /obj/item/weapon/circuitboard/fax( src )
new /obj/item/weapon/circuitboard/microwave( src )
new /obj/item/weapon/circuitboard/vending( src )
new /obj/item/weapon/circuitboard/washing( src )
new /obj/item/weapon/stock_parts/scanning_module( src )
new /obj/item/weapon/stock_parts/motor( src )

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/biogenerator
@@ -8,5 +8,5 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1)
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/clonepod
@@ -8,10 +8,10 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_BIO = 3)
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/stock_parts/console_screen" = 1)
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/scanning_module = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/clonescanner
name = T_BOARD("cloning scanner")
@@ -19,8 +19,8 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 2, TECH_BIO = 2)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 2)
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stack/cable_coil = 2)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/mech_recharger
@@ -8,6 +8,6 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 2, TECH_POWER = 2, TECH_ENGINEERING = 2)
req_components = list(
"/obj/item/weapon/stock_parts/capacitor" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 2)
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 2)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/miningdrill
@@ -8,10 +8,10 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1)
req_components = list(
"/obj/item/weapon/stock_parts/capacitor" = 1,
"/obj/item/weapon/cell" = 1,
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1)
/obj/item/weapon/stock_parts/capacitor = 1,
/obj/item/weapon/cell = 1,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/miningdrillbrace
name = T_BOARD("mining drill brace")

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/pacman
@@ -8,10 +8,10 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_POWER = 3, TECH_PHORON = 3, TECH_ENGINEERING = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/capacitor" = 1)
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/capacitor = 1)
/obj/item/weapon/circuitboard/pacman/super
name = T_BOARD("SUPERPACMAN-type generator")

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/smes
@@ -7,18 +7,18 @@
build_path = "/obj/machinery/power/smes/buildable"
board_type = "machine"
origin_tech = list(TECH_POWER = 6, TECH_ENGINEERING = 4)
req_components = list("/obj/item/weapon/smes_coil" = 1, "/obj/item/stack/cable_coil" = 30)
req_components = list(/obj/item/weapon/smes_coil = 1, /obj/item/stack/cable_coil = 30)
/obj/item/weapon/circuitboard/batteryrack
name = T_BOARD("battery rack PSU")
build_path = "/obj/machinery/power/smes/batteryrack"
board_type = "machine"
origin_tech = list(TECH_POWER = 3, TECH_ENGINEERING = 2)
req_components = list("/obj/item/weapon/cell" = 3)
req_components = list(/obj/item/weapon/cell = 3)
/obj/item/weapon/circuitboard/ghettosmes
name = T_BOARD("makeshift PSU")
desc = "An APC circuit repurposed into some power storage device controller"
build_path = "/obj/machinery/power/smes/batteryrack/makeshift"
board_type = "machine"
req_components = list("/obj/item/weapon/cell" = 3)
req_components = list(/obj/item/weapon/cell = 3)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/recharge_station
@@ -8,7 +8,7 @@
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
"/obj/item/stack/cable_coil" = 5,
"/obj/item/weapon/stock_parts/capacitor" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/cell" = 1)
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/cell = 1)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
obj/item/weapon/circuitboard/rdserver
@@ -8,8 +8,8 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_DATA = 3)
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 1)
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/scanning_module = 1)
/obj/item/weapon/circuitboard/destructive_analyzer
name = T_BOARD("destructive analyzer")
@@ -17,9 +17,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/scanning_module" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1)
/obj/item/weapon/stock_parts/scanning_module = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/autolathe
name = T_BOARD("autolathe")
@@ -27,9 +27,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 3,
"/obj/item/weapon/stock_parts/manipulator" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1)
/obj/item/weapon/stock_parts/matter_bin = 3,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/console_screen = 1)
/obj/item/weapon/circuitboard/protolathe
name = T_BOARD("protolathe")
@@ -37,10 +37,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/reagent_containers/glass/beaker" = 2)
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/circuit_imprinter
name = T_BOARD("circuit imprinter")
@@ -48,9 +47,9 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_ENGINEERING = 2, TECH_DATA = 2)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 1,
"/obj/item/weapon/reagent_containers/glass/beaker" = 2)
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/reagent_containers/glass/beaker = 2)
/obj/item/weapon/circuitboard/mechfab
name = "Circuit board (Exosuit Fabricator)"
@@ -58,7 +57,7 @@ obj/item/weapon/circuitboard/rdserver
board_type = "machine"
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 3)
req_components = list(
"/obj/item/weapon/stock_parts/matter_bin" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 1,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1)
/obj/item/weapon/stock_parts/matter_bin = 2,
/obj/item/weapon/stock_parts/manipulator = 1,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/console_screen = 1)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/shield_gen_ex
@@ -8,12 +8,12 @@
build_path = "/obj/machinery/shield_gen/external"
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
/obj/item/weapon/stock_parts/manipulator/pico = 2,
/obj/item/weapon/stock_parts/subspace/transmitter = 1,
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/subspace/amplifier = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/shield_gen
name = T_BOARD("bubble shield generator")
@@ -21,12 +21,12 @@
build_path = "/obj/machinery/shield_gen"
origin_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/subspace/transmitter" = 1,
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
/obj/item/weapon/stock_parts/manipulator/pico = 2,
/obj/item/weapon/stock_parts/subspace/transmitter = 1,
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/subspace/amplifier = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stack/cable_coil = 5)
/obj/item/weapon/circuitboard/shield_cap
name = T_BOARD("shield capacitor")
@@ -34,9 +34,9 @@
build_path = "/obj/machinery/shield_capacitor"
origin_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
"/obj/item/weapon/stock_parts/subspace/treatment" = 1,
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
/obj/item/weapon/stock_parts/manipulator/pico = 2,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/treatment = 1,
/obj/item/weapon/stock_parts/subspace/analyzer = 1,
/obj/item/weapon/stock_parts/console_screen = 1,
/obj/item/stack/cable_coil = 5)

View File

@@ -10,69 +10,69 @@
build_path = "/obj/machinery/telecomms/receiver"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 3, TECH_BLUESPACE = 2)
req_components = list(
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/stock_parts/micro_laser" = 1)
/obj/item/weapon/stock_parts/subspace/ansible = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/micro_laser = 1)
/obj/item/weapon/circuitboard/telecomms/hub
name = T_BOARD("hub mainframe")
build_path = "/obj/machinery/telecomms/hub"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/subspace/filter" = 2)
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/telecomms/relay
name = T_BOARD("relay mainframe")
build_path = "/obj/machinery/telecomms/relay"
origin_tech = list(TECH_DATA = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 3)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/subspace/filter" = 2)
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/filter = 2)
/obj/item/weapon/circuitboard/telecomms/bus
name = T_BOARD("bus mainframe")
build_path = "/obj/machinery/telecomms/bus"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1)
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/telecomms/processor
name = T_BOARD("processor unit")
build_path = "/obj/machinery/telecomms/processor"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 3,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
"/obj/item/weapon/stock_parts/subspace/treatment" = 2,
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/subspace/amplifier" = 1)
/obj/item/weapon/stock_parts/manipulator = 3,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/treatment = 2,
/obj/item/weapon/stock_parts/subspace/analyzer = 1,
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/subspace/amplifier = 1)
/obj/item/weapon/circuitboard/telecomms/server
name = T_BOARD("telecommunication server")
build_path = "/obj/machinery/telecomms/server"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1)
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1)
/obj/item/weapon/circuitboard/telecomms/broadcaster
name = T_BOARD("subspace broadcaster")
build_path = "/obj/machinery/telecomms/broadcaster"
origin_tech = list(TECH_DATA = 4, TECH_ENGINEERING = 4, TECH_BLUESPACE = 2)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/stack/cable_coil" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
"/obj/item/weapon/stock_parts/micro_laser/high" = 2)
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/stack/cable_coil = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/micro_laser/high = 2)
//This isn't a real telecomms board but I don't want to make a whole file to hold only one circuitboard.
/obj/item/weapon/circuitboard/telecomms/exonet_node
@@ -80,10 +80,10 @@
build_path = "/obj/machinery/exonet_node"
origin_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4)
req_components = list(
"/obj/item/weapon/stock_parts/subspace/ansible" = 1,
"/obj/item/weapon/stock_parts/subspace/filter" = 1,
"/obj/item/weapon/stock_parts/manipulator" = 2,
"/obj/item/weapon/stock_parts/micro_laser" = 1,
"/obj/item/weapon/stock_parts/subspace/crystal" = 1,
"/obj/item/weapon/stock_parts/subspace/treatment" = 2,
"/obj/item/stack/cable_coil" = 2)
/obj/item/weapon/stock_parts/subspace/ansible = 1,
/obj/item/weapon/stock_parts/subspace/filter = 1,
/obj/item/weapon/stock_parts/manipulator = 2,
/obj/item/weapon/stock_parts/micro_laser = 1,
/obj/item/weapon/stock_parts/subspace/crystal = 1,
/obj/item/weapon/stock_parts/subspace/treatment = 2,
/obj/item/stack/cable_coil = 2)

View File

@@ -1,5 +1,5 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/unary_atmos
@@ -18,16 +18,16 @@
build_path = "/obj/machinery/atmospherics/unary/heater"
origin_tech = list(TECH_POWER = 2, TECH_ENGINEERING = 1)
req_components = list(
"/obj/item/stack/cable_coil" = 5,
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/capacitor" = 2)
/obj/item/stack/cable_coil = 5,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/capacitor = 2)
/obj/item/weapon/circuitboard/unary_atmos/cooler
name = T_BOARD("gas cooling system")
build_path = "/obj/machinery/atmospherics/unary/freezer"
origin_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/matter_bin" = 1,
"/obj/item/weapon/stock_parts/capacitor" = 2,
"/obj/item/weapon/stock_parts/manipulator" = 1)
/obj/item/stack/cable_coil = 2,
/obj/item/weapon/stock_parts/matter_bin = 1,
/obj/item/weapon/stock_parts/capacitor = 2,
/obj/item/weapon/stock_parts/manipulator = 1)

View File

@@ -1,5 +1,5 @@
/obj/item/weapon/grenade/smokebomb
desc = "It is set to detonate in 2 seconds."
desc = "It is set to detonate in 2 seconds. These high-tech grenades can have their color adapted on the fly with a multitool!"
name = "smoke bomb"
icon = 'icons/obj/grenade.dmi'
icon_state = "flashbang"
@@ -7,6 +7,8 @@
item_state = "flashbang"
slot_flags = SLOT_BELT
var/datum/effect/effect/system/smoke_spread/bad/smoke
var/smoke_color
var/smoke_strength = 8
/obj/item/weapon/grenade/smokebomb/New()
..()
@@ -22,18 +24,15 @@
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
src.smoke.set_up(10, 0, usr.loc)
spawn(0)
src.smoke.start()
sleep(10)
src.smoke.start()
sleep(10)
src.smoke.start()
sleep(10)
src.smoke.start()
for(var/i = 1 to smoke_strength)
src.smoke.start(smoke_color)
sleep(10)
qdel(src)
for(var/obj/effect/blob/B in view(8,src))
var/damage = round(30/(get_dist(B,src)+1))
B.health -= damage
B.update_icon()
sleep(80)
qdel(src)
return
/obj/item/weapon/grenade/smokebomb/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/device/multitool))
var/new_smoke_color = input(user, "Choose a color for the smoke:", "Smoke Color", smoke_color) as color|null
if(new_smoke_color)
smoke_color = new_smoke_color

View File

@@ -203,6 +203,15 @@
slot_r_hand_str = "duffle_med",
)
/obj/item/weapon/storage/backpack/dufflebag/emt
name = "EMT dufflebag"
desc = "A large dufflebag for holding extra medical supplies. This one has reflective stripes!"
icon_state = "duffle_emt"
item_state_slots = list(
slot_l_hand_str = "duffle_emt",
slot_r_hand_str = "duffle_emt",
)
/obj/item/weapon/storage/backpack/dufflebag/sec
name = "security dufflebag"
desc = "A large dufflebag for holding extra security supplies and ammunition."
@@ -235,12 +244,12 @@
..()
new /obj/item/weapon/storage/wallet/random( src )
/obj/item/weapon/storage/backpack/satchel_norm
/obj/item/weapon/storage/backpack/satchel/norm
name = "satchel"
desc = "A trendy looking satchel."
icon_state = "satchel-norm"
/obj/item/weapon/storage/backpack/satchel_eng
/obj/item/weapon/storage/backpack/satchel/eng
name = "industrial satchel"
desc = "A tough satchel with extra pockets."
icon_state = "satchel-eng"
@@ -249,7 +258,7 @@
slot_r_hand_str = "engiepack",
)
/obj/item/weapon/storage/backpack/satchel_med
/obj/item/weapon/storage/backpack/satchel/med
name = "medical satchel"
desc = "A sterile satchel used in medical departments."
icon_state = "satchel-med"
@@ -258,27 +267,27 @@
slot_r_hand_str = "medicalpack",
)
/obj/item/weapon/storage/backpack/satchel_vir
/obj/item/weapon/storage/backpack/satchel/vir
name = "virologist satchel"
desc = "A sterile satchel with virologist colours."
icon_state = "satchel-vir"
/obj/item/weapon/storage/backpack/satchel_chem
/obj/item/weapon/storage/backpack/satchel/chem
name = "chemist satchel"
desc = "A sterile satchel with chemist colours."
icon_state = "satchel-chem"
/obj/item/weapon/storage/backpack/satchel_gen
/obj/item/weapon/storage/backpack/satchel/gen
name = "geneticist satchel"
desc = "A sterile satchel with geneticist colours."
icon_state = "satchel-gen"
/obj/item/weapon/storage/backpack/satchel_tox
/obj/item/weapon/storage/backpack/satchel/tox
name = "scientist satchel"
desc = "Useful for holding research materials."
icon_state = "satchel-tox"
/obj/item/weapon/storage/backpack/satchel_sec
/obj/item/weapon/storage/backpack/satchel/sec
name = "security satchel"
desc = "A robust satchel for security related needs."
icon_state = "satchel-sec"
@@ -287,12 +296,12 @@
slot_r_hand_str = "securitypack",
)
/obj/item/weapon/storage/backpack/satchel_hyd
/obj/item/weapon/storage/backpack/satchel/hyd
name = "hydroponics satchel"
desc = "A green satchel for plant related work."
icon_state = "satchel_hyd"
/obj/item/weapon/storage/backpack/satchel_cap
/obj/item/weapon/storage/backpack/satchel/cap
name = "captain's satchel"
desc = "An exclusive satchel for officers."
icon_state = "satchel-cap"

View File

@@ -333,6 +333,8 @@
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
new /obj/item/weapon/grenade/smokebomb(src)
/obj/item/weapon/storage/box/anti_photons
name = "box of anti-photon grenades"

View File

@@ -14,6 +14,7 @@
throw_speed = 2
throw_range = 8
var/empty = 0
max_storage_space = 14
/obj/item/weapon/storage/firstaid/fire
@@ -131,8 +132,8 @@
/obj/item/weapon/storage/firstaid/surgery
name = "surgery kit"
desc = "Contains tools for surgery."
storage_slots = 10
max_storage_space = 23
max_storage_space = 21
max_w_class = 3
/obj/item/weapon/storage/firstaid/surgery/New()
..()
@@ -163,6 +164,8 @@
allow_quick_gather = 1
use_to_pickup = 1
use_sound = null
max_storage_space = 14
max_w_class = 1
/obj/item/weapon/storage/pill_bottle/antitox
name = "bottle of Dylovene pills"

View File

@@ -136,10 +136,10 @@
filled = TRUE
/obj/item/weapon/storage/toolbox/lunchbox/mars
name = "\improper Mars university lunchbox"
name = "\improper Mojave university lunchbox"
icon_state = "lunchbox_marsuniversity"
item_state = "toolbox_red"
desc = "A little lunchbox. This one is branded with the Mars university logo!"
desc = "A little lunchbox. This one is branded with the Mojave university logo!"
/obj/item/weapon/storage/toolbox/lunchbox/mars/filled
filled = TRUE

View File

@@ -247,6 +247,16 @@
src.update_icon()
for(var/mob/M in viewers(src))
M.show_message("<span class='warning'>[src] has been [welded?"welded shut":"unwelded"] by [user.name].</span>", 3, "You hear welding.", 2)
else if(istype(W, /obj/item/weapon/wrench))
if(welded)
if(anchored)
user.visible_message("\The [user] begins unsecuring \the [src] from the floor.", "You start unsecuring \the [src] from the floor.")
else
user.visible_message("\The [user] begins securing \the [src] to the floor.", "You start securing \the [src] to the floor.")
if(do_after(user, 20))
if(!src) return
user << "<span class='notice'>You [anchored? "un" : ""]secured \the [src]!</span>"
anchored = !anchored
else
src.attack_hand(user)
return

View File

@@ -13,7 +13,7 @@
if(prob(75))
new /obj/item/weapon/storage/backpack(src)
else
new /obj/item/weapon/storage/backpack/satchel_norm(src)
new /obj/item/weapon/storage/backpack/satchel/norm(src)
if(prob(25))
new /obj/item/weapon/storage/backpack/dufflebag(src)
new /obj/item/clothing/under/rank/cargotech(src)
@@ -44,7 +44,7 @@
if(prob(75))
new /obj/item/weapon/storage/backpack(src)
else
new /obj/item/weapon/storage/backpack/satchel_norm(src)
new /obj/item/weapon/storage/backpack/satchel/norm(src)
if(prob(25))
new /obj/item/weapon/storage/backpack/dufflebag(src)
new /obj/item/clothing/under/rank/cargo(src)

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