This commit is contained in:
Zuhayr
2014-12-23 00:00:48 +10:30
301 changed files with 5059 additions and 4574 deletions

View File

@@ -176,6 +176,7 @@
#include "code\datums\wires\radio.dm"
#include "code\datums\wires\robot.dm"
#include "code\datums\wires\smartfridge.dm"
#include "code\datums\wires\smes.dm"
#include "code\datums\wires\suit_storage_unit.dm"
#include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm"
@@ -387,12 +388,14 @@
#include "code\game\machinery\computer\pod.dm"
#include "code\game\machinery\computer\prisoner.dm"
#include "code\game\machinery\computer\prisonshuttle.dm"
#include "code\game\machinery\computer\RCON_Console.dm"
#include "code\game\machinery\computer\robot.dm"
#include "code\game\machinery\computer\security.dm"
#include "code\game\machinery\computer\shuttle.dm"
#include "code\game\machinery\computer\skills.dm"
#include "code\game\machinery\computer\specops_shuttle.dm"
#include "code\game\machinery\computer\station_alert.dm"
#include "code\game\machinery\computer\supply.dm"
#include "code\game\machinery\computer\syndicate_specops_shuttle.dm"
#include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_control.dm"
@@ -583,6 +586,23 @@
#include "code\game\objects\items\weapons\twohanded.dm"
#include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\wires.dm"
#include "code\game\objects\items\weapons\circuitboards\broken.dm"
#include "code\game\objects\items\weapons\circuitboards\circuitboard.dm"
#include "code\game\objects\items\weapons\circuitboards\mecha.dm"
#include "code\game\objects\items\weapons\circuitboards\other.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\computer.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\research.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\supply.dm"
#include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\cloning.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\pacman.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\power.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\research.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\shieldgen.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\telecomms.dm"
#include "code\game\objects\items\weapons\circuitboards\machinery\unary_atmos.dm"
#include "code\game\objects\items\weapons\grenades\chem_grenade.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm"
@@ -1370,7 +1390,6 @@
#include "code\modules\scripting\Scanner\Tokens.dm"
#include "code\modules\security levels\keycard authentication.dm"
#include "code\modules\security levels\security levels.dm"
#include "code\modules\shieldgen\circuits_and_designs.dm"
#include "code\modules\shieldgen\emergency_shield.dm"
#include "code\modules\shieldgen\energy_field.dm"
#include "code\modules\shieldgen\sheldwallgen.dm"

View File

@@ -317,3 +317,7 @@
"You hear ratchet.")
new /obj/item/pipe(loc, make_from=src)
del(src)
/obj/machinery/atmospherics/valve/examine(mob/user)
..()
user << "It is [open ? "open" : "closed"]."

View File

@@ -1,7 +1,7 @@
//Engine control and monitoring console
/obj/machinery/computer/engines
name = "engines control console"
name = "engine control console"
icon_state = "id"
var/state = "status"
var/list/engines = list()

View File

@@ -106,6 +106,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al
for (var/language_name in all_languages)
var/datum/language/L = all_languages[language_name]
if(!(L.flags & NONGLOBAL))
language_keys[":[lowertext(L.key)]"] = L
language_keys[".[lowertext(L.key)]"] = L
language_keys["#[lowertext(L.key)]"] = L

View File

@@ -38,8 +38,18 @@ proc/random_facial_hair_style(gender, species = "Human")
return f_style
proc/random_name(gender, species = "Human")
if(gender==FEMALE) return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
else return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
var/datum/species/current_species
if(species)
current_species = all_species[species]
if(!current_species)
if(gender==FEMALE)
return capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names))
else
return capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
else
return current_species.get_random_name(gender)
proc/random_skin_tone()
switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino"))

View File

@@ -65,7 +65,7 @@ datum/controller/lighting/proc/process()
//Does not loop. Should be run prior to process() being called for the first time.
//Note: if we get additional z-levels at runtime (e.g. if the gateway thin ever gets finished) we can initialize specific
//z-levels with the z_level argument
datum/controller/lighting/proc/Initialize(var/z_level)
datum/controller/lighting/proc/initializeLighting(var/z_level)
processing = 0
spawn(-1)
set background = 1

View File

@@ -84,7 +84,7 @@ datum/controller/game_controller/proc/setup()
if(ticker)
ticker.pregame()
lighting_controller.Initialize()
lighting_controller.initializeLighting()
datum/controller/game_controller/proc/setup_objects()

View File

@@ -16,11 +16,11 @@
New(ateleatom, adestination, aprecision=0, afteleport=1, aeffectin=null, aeffectout=null, asoundin=null, asoundout=null)
..()
if(!Init(arglist(args)))
if(!initTeleport(arglist(args)))
return 0
return 1
proc/Init(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout)
proc/initTeleport(ateleatom,adestination,aprecision,afteleport,aeffectin,aeffectout,asoundin,asoundout)
if(!setTeleatom(ateleatom))
return 0
if(!setDestination(adestination))

60
code/datums/wires/smes.dm Normal file
View File

@@ -0,0 +1,60 @@
/datum/wires/smes
holder_type = /obj/machinery/power/smes/buildable
wire_count = 5
var/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable
var/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s
var/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s
var/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks
var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable
/datum/wires/smes/CanUse(var/mob/living/L)
var/obj/machinery/power/smes/buildable/S = holder
if(S.open_hatch)
return 1
return 0
/datum/wires/smes/GetInteractWindow()
var/obj/machinery/power/smes/buildable/S = holder
. += ..()
. += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]<br>"
. += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]<br>"
. += "The blue light is [S.RCon ? "on" : "off"]"
/datum/wires/smes/UpdateCut(var/index, var/mended)
var/obj/machinery/power/smes/buildable/S = holder
switch(index)
if(SMES_WIRE_RCON)
S.RCon = mended
if(SMES_WIRE_INPUT)
S.input_cut = !mended
if(SMES_WIRE_OUTPUT)
S.output_cut = !mended
if(SMES_WIRE_GROUNDING)
S.grounding = mended
if(SMES_WIRE_FAILSAFES)
S.safeties_enabled = mended
/datum/wires/smes/UpdatePulsed(var/index)
var/obj/machinery/power/smes/buildable/S = holder
switch(index)
if(SMES_WIRE_RCON)
if(S.RCon)
S.RCon = 0
spawn(10)
S.RCon = 1
if(SMES_WIRE_INPUT)
S.toggle_input()
if(SMES_WIRE_OUTPUT)
S.toggle_output()
if(SMES_WIRE_GROUNDING)
S.grounding = 0
if(SMES_WIRE_FAILSAFES)
if(S.safeties_enabled)
S.safeties_enabled = 0
spawn(10)
S.safeties_enabled = 1

View File

@@ -629,9 +629,9 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm"
/obj/item/weapon/research//Makes testing much less of a pain -Sieve
name = "research"
/obj/item/weapon/research
name = "research debugging device"
desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/stock_parts.dmi'
icon_state = "capacitor"
desc = "A debug item for research."
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;phorontech=8;engineering=8"
icon_state = "smes_coil"
origin_tech = "materials=19;programming=19;magnets=19;powerstorage=19;bluespace=19;combat=19;biotech=19;syndicate=19;phorontech=19;engineering=19"

View File

@@ -38,148 +38,144 @@ length to avoid portals or something i guess?? Not that they're counted right no
PriorityQueue
var/L[]
var/cmp
var/list/queue
var/proc/comparison_function
New(compare)
L = new()
cmp = compare
proc
IsEmpty()
return !L.len
Enqueue(d)
var/i
var/j
L.Add(d)
i = L.len
j = i>>1
while(i > 1 && call(cmp)(L[j],L[i]) > 0)
L.Swap(i,j)
i = j
j >>= 1
queue = list()
comparison_function = compare
Dequeue()
if(!L.len) return 0
. = L[1]
Remove(1)
proc/IsEmpty()
return !queue.len
Remove(i)
if(i > L.len) return 0
L.Swap(i,L.len)
L.Cut(L.len)
if(i < L.len)
_Fix(i)
_Fix(i)
var/child = i + i
var/item = L[i]
while(child <= L.len)
if(child + 1 <= L.len && call(cmp)(L[child],L[child + 1]) > 0)
proc/Enqueue(var/data)
queue.Add(data)
var/index = queue.len
//From what I can tell, this automagically sorts the added data into the correct location.
while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0)
queue.Swap(index, index / 2)
index /= 2
proc/Dequeue()
if(!queue.len)
return 0
return Remove(1)
proc/Remove(var/index)
if(index > queue.len)
return 0
var/thing = queue[index]
queue.Swap(index, queue.len)
queue.Cut(queue.len)
if(index < queue.len)
FixQueue(index)
return thing
proc/FixQueue(var/index)
var/child = 2 * index
var/item = queue[index]
while(child <= queue.len)
if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0)
child++
if(call(cmp)(item,L[child]) > 0)
L[i] = L[child]
i = child
if(call(comparison_function)(item, queue[child]) > 0)
queue[index] = queue[child]
index = child
else
break
child = i + i
L[i] = item
List()
var/ret[] = new()
var/copy = L.Copy()
while(!IsEmpty())
ret.Add(Dequeue())
L = copy
return ret
RemoveItem(i)
var/ind = L.Find(i)
if(ind)
Remove(ind)
child = 2 * index
queue[index] = item
proc/List()
return queue.Copy()
proc/Length()
return queue.len
proc/RemoveItem(data)
var/index = queue.Find(data)
if(index)
return Remove(index)
PathNode
var/datum/source
var/PathNode/prevNode
var/f
var/g
var/h
var/nt // Nodes traversed
New(s,p,pg,ph,pnt)
source = s
prevNode = p
g = pg
h = ph
f = g + h
source.bestF = f
nt = pnt
var/datum/position
var/PathNode/previous_node
datum
var/bestF
proc
PathWeightCompare(PathNode/a, PathNode/b)
return a.f - b.f
var/best_estimated_cost
var/estimated_cost
var/known_cost
var/cost
var/nodes_traversed
AStar(start,end,adjacent,dist,maxnodes,maxnodedepth = 30,mintargetdist,minnodedist,id=null, var/turf/exclude=null)
New(_position, _previous_node, _known_cost, _cost, _nodes_traversed)
position = _position
previous_node = _previous_node
// world << "A*: [start] [end] [adjacent] [dist] [maxnodes] [maxnodedepth] [mintargetdist], [minnodedist] [id]"
known_cost = _known_cost
cost = _cost
estimated_cost = cost + known_cost
best_estimated_cost = estimated_cost
nodes_traversed = _nodes_traversed
proc/PathWeightCompare(PathNode/a, PathNode/b)
return a.estimated_cost - b.estimated_cost
proc/AStar(var/start, var/end, var/proc/adjacent, var/proc/dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude)
var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare)
var/closed[] = new()
var/path[]
var/list/closed = list()
var/list/path
var/list/path_node_by_position = list()
start = get_turf(start)
if(!start) return 0
if(!start)
return 0
open.Enqueue(new /PathNode(start,null,0,call(start,dist)(end)))
open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0))
while(!open.IsEmpty() && !path)
{
var/PathNode/cur = open.Dequeue()
closed.Add(cur.source)
var/PathNode/current = open.Dequeue()
closed.Add(current.position)
var/closeenough
if(mintargetdist)
closeenough = call(cur.source,dist)(end) <= mintargetdist
if(current.position == end || call(current.position, dist)(end) <= min_target_dist)
path = new /list(current.nodes_traversed + 1)
path[path.len] = current.position
var/index = path.len - 1
if(cur.source == end || closeenough)
path = new()
path.Add(cur.source)
while(cur.prevNode)
cur = cur.prevNode
path.Add(cur.source)
while(current.previous_node)
current = current.previous_node
path[index--] = current.position
break
var/L[] = call(cur.source,adjacent)(id)
if(minnodedist && maxnodedepth)
if(call(cur.source,minnodedist)(end) + cur.nt >= maxnodedepth)
continue
else if(maxnodedepth)
if(cur.nt >= maxnodedepth)
if(min_node_dist && max_node_depth)
if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth)
continue
for(var/datum/d in L)
if(d == exclude)
if(max_node_depth)
if(current.nodes_traversed >= max_node_depth)
continue
var/ng = cur.g + call(cur.source,dist)(d)
if(d.bestF)
if(ng + call(d,dist)(end) < d.bestF)
for(var/i = 1; i <= open.L.len; i++)
var/PathNode/n = open.L[i]
if(n.source == d)
open.Remove(i)
break
for(var/datum/datum in call(current.position, adjacent)(id))
if(datum == exclude)
continue
var/best_estimated_cost = current.estimated_cost + call(current.position, dist)(datum)
//handle removal of sub-par positions
if(datum in path_node_by_position)
var/PathNode/target = path_node_by_position[datum]
if(target.best_estimated_cost)
if(best_estimated_cost + call(datum, dist)(end) < target.best_estimated_cost)
open.RemoveItem(target)
else
continue
open.Enqueue(new /PathNode(d,cur,ng,call(d,dist)(end),cur.nt+1))
if(maxnodes && open.L.len > maxnodes)
open.L.Cut(open.L.len)
}
var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1)
path_node_by_position[datum] = next_node
open.Enqueue(next_node)
var/PathNode/temp
while(!open.IsEmpty())
temp = open.Dequeue()
temp.source.bestF = 0
while(closed.len)
temp = closed[closed.len]
temp.bestF = 0
closed.Cut(closed.len)
if(path)
for(var/i = 1; i <= path.len/2; i++)
path.Swap(i,path.len-i+1)
if(max_nodes && open.Length() > max_nodes)
open.Remove(open.Length())
return path

View File

@@ -770,9 +770,16 @@ var/list/ghostteleportlocs = list()
/area/maintenance/substation/engineering // Probably will be connected to engineering SMES room, as wires cannot be crossed properly without them sharing powernets.
name = "Engineering Substation"
// No longer used:
/area/maintenance/substation/medical_science // Medbay and Science. Each has it's own separated machinery, but it originates from the same room.
name = "Medical Research Substation"
/area/maintenance/substation/medical // Medbay
name = "Medical Substation"
/area/maintenance/substation/research // Research
name = "Research Substation"
/area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ...
name = "Civilian East Substation"
@@ -1040,6 +1047,7 @@ var/list/ghostteleportlocs = list()
/area/holodeck/source_space
name = "\improper Holodeck - Space"
has_gravity = 0

View File

@@ -56,7 +56,7 @@
"Devices and Tools" = list(
new/datum/uplink_item(/obj/item/weapon/card/emag, 3, "Cryptographic Sequencer", "EC"),
new/datum/uplink_item(/obj/item/weapon/storage/toolbox/syndicate, 1, "Fully Loaded Toolbox", "ST"),
new/datum/uplink_item(/obj/item/weapon/stamp/chameleon, 3, "Morphic Chameleon Stmap", "CS"),
new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/clerical, 3, "Morphic Clerical Kit", "CK"),
new/datum/uplink_item(/obj/item/weapon/storage/box/syndie_kit/space, 3, "Space Suit", "SS"),
new/datum/uplink_item(/obj/item/clothing/glasses/thermal/syndi, 3, "Thermal Imaging Glasses", "TM"),
new/datum/uplink_item(/obj/item/device/encryptionkey/binary, 3, "Binary Translator Key", "BT"),

View File

@@ -33,7 +33,7 @@
var/datum/dna2/record/buf=null
var/read_only = 0 //Well,it's still a floppy disk
/obj/item/weapon/disk/data/proc/Initialize()
/obj/item/weapon/disk/data/proc/initializeDisk()
buf = new
buf.dna=new
@@ -42,7 +42,7 @@
read_only = 1
New()
Initialize()
initializeDisk()
buf.types=DNA2_BUF_UE|DNA2_BUF_UI
//data = "066000033000000000AF00330660FF4DB002690"
//data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff
@@ -57,7 +57,7 @@
read_only = 1
New()
Initialize()
initializeDisk()
buf.types=DNA2_BUF_SE
var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4)
for(var/i=new_SE.len;i<=DNA_SE_LENGTH;i++)

View File

@@ -16,14 +16,22 @@ var/global/list/holodeck_programs = list(
)
/obj/machinery/computer/HolodeckControl
name = "Holodeck Control Computer"
name = "holodeck control console"
desc = "A computer used to control a nearby holodeck."
icon_state = "holocontrol"
use_power = 1
active_power_usage = 8000 //8kW for the scenery + 500W per holoitem
var/item_power_usage = 500
var/area/linkedholodeck = null
var/area/target = null
var/active = 0
var/list/holographic_items = list()
var/list/holographic_mobs = list()
var/damaged = 0
var/safety_disabled = 0
var/mob/last_to_emag = null
var/last_change = 0
var/list/supported_programs = list( \
"Empty Court" = "emptycourt", \
@@ -38,12 +46,12 @@ var/global/list/holodeck_programs = list(
"Theatre" = "theatre", \
"Meeting Hall" = "meetinghall" \
)
var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "ildlife Simulation" = "wildlifecarp")
var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp")
attack_ai(var/mob/user as mob)
/obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob)
return src.attack_hand(user)
attack_hand(var/mob/user as mob)
/obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
if(..())
return
@@ -58,12 +66,15 @@ var/global/list/holodeck_programs = list(
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
if(issilicon(user))
if(emagged)
if(safety_disabled)
if (emagged)
dat += "<font color=red><b>ERROR</b>: Cannot re-enable Safety Protocols.</font><BR>"
else
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
else
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
if(emagged)
if(safety_disabled)
for(var/prog in restricted_programs)
dat += "<A href='?src=\ref[src];program=[restricted_programs[prog]]'>(<font color=red>Begin [prog]</font>)</A><BR>"
dat += "Ensure the holodeck is empty before testing.<BR>"
@@ -78,7 +89,7 @@ var/global/list/holodeck_programs = list(
return
Topic(href, href_list)
/obj/machinery/computer/HolodeckControl/Topic(href, href_list)
if(..())
return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
@@ -92,9 +103,15 @@ var/global/list/holodeck_programs = list(
loadProgram(target)
else if(href_list["AIoverride"])
if(!issilicon(usr)) return
emagged = !emagged
if(emagged)
if(!issilicon(usr))
return
if(safety_disabled && emagged)
return //if a traitor has gone through the trouble to emag the thing, let them keep it.
safety_disabled = !safety_disabled
update_projections()
if(safety_disabled)
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
log_game("[key_name(usr)] overrided the holodeck's safeties")
else
@@ -105,17 +122,35 @@ var/global/list/holodeck_programs = list(
src.updateUsrDialog()
return
/obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
if(istype(D, /obj/item/weapon/card/emag) && !emagged)
if(istype(D, /obj/item/weapon/card/emag))
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
last_to_emag = user //emag again to change the owner
if (!emagged)
emagged = 1
user << "\blue You vastly increase projector power and override the safety and security protocols."
safety_disabled = 1
update_projections()
user << "<span class='notice'>You vastly increase projector power and override the safety and security protocols.</span>"
user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator."
log_game("[key_name(usr)] emagged the Holodeck Control Computer")
src.updateUsrDialog()
return
/obj/machinery/computer/HolodeckControl/proc/update_projections()
if (safety_disabled)
item_power_usage = 2500
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
H.damtype = BRUTE
else
item_power_usage = initial(item_power_usage)
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
H.damtype = initial(H.damtype)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
C.set_safety(!safety_disabled)
if (last_to_emag)
C.friends = list(last_to_emag)
/obj/machinery/computer/HolodeckControl/New()
..()
linkedholodeck = locate(/area/holodeck/alphadeck)
@@ -148,14 +183,27 @@ var/global/list/holodeck_programs = list(
emergencyShutdown()
..()
/obj/machinery/computer/HolodeckControl/power_change()
var/oldstat
..()
if (stat != oldstat && active && (stat & NOPOWER))
emergencyShutdown()
/obj/machinery/computer/HolodeckControl/process()
for(var/item in holographic_items) // do this first, to make sure people don't take items out when power is down.
if(!(get_turf(item) in linkedholodeck))
derez(item, 0)
if (!safety_disabled)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
if (get_area(C.loc) != linkedholodeck)
holographic_mobs -= C
C.derez()
if(!..())
return
if(active)
use_power(item_power_usage * (holographic_items.len + holographic_mobs.len))
if(!checkInteg(linkedholodeck))
damaged = 1
@@ -163,6 +211,7 @@ var/global/list/holodeck_programs = list(
if(target)
loadProgram(target)
active = 0
use_power = 1
for(var/mob/M in range(10,src))
M.show_message("The holodeck overloads!")
@@ -199,6 +248,7 @@ var/global/list/holodeck_programs = list(
return 1
//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn)
@@ -218,12 +268,14 @@ var/global/list/holodeck_programs = list(
T.hotspot_expose(50000,50000,1)
active = 1
use_power = 2
else
for(var/item in holographic_items)
derez(item)
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
@@ -238,22 +290,20 @@ var/global/list/holodeck_programs = list(
last_change = world.time
active = 1
use_power = 2
for(var/item in holographic_items)
derez(item)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
del(B)
for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck)
del(C)
holographic_items = A.copy_contents_to(linkedholodeck , 1)
if(emagged)
for(var/obj/item/weapon/holo/esword/H in linkedholodeck)
H.damtype = BRUTE
spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start")
@@ -266,13 +316,22 @@ var/global/list/holodeck_programs = list(
T.temperature = 5000
T.hotspot_expose(50000,50000,1)
if(L.name=="Holocarp Spawn")
new /mob/living/simple_animal/hostile/carp(L.loc)
holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
if(L.name=="Holocarp Spawn Random")
if (prob(4)) //With 4 spawn points, carp should only appear 15% of the time.
holographic_mobs += new /mob/living/simple_animal/hostile/carp/holodeck(L.loc)
update_projections()
/obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Get rid of any items
for(var/item in holographic_items)
derez(item)
for(var/mob/living/simple_animal/hostile/carp/holodeck/C in holographic_mobs)
holographic_mobs -= C
C.derez()
//Turn it back to the regular non-holographic room
target = locate(/area/holodeck/source_plating)
if(target)
@@ -281,6 +340,7 @@ var/global/list/holodeck_programs = list(
var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1)
active = 0
use_power = 1
@@ -327,17 +387,6 @@ var/global/list/holodeck_programs = list(
/obj/structure/table/holotable/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
user << "\red You need a better grip to do that!"
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("\red [G.assailant] puts [G.affecting] on the table.")
del(W)
return
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holotable! There are no bolts!"
return
@@ -424,13 +473,13 @@ var/global/list/holodeck_programs = list(
icon_state = "sword[item_color]"
w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
user << "\blue [src] is now active."
user << "<span class='notice'>[src] is now active.</span>"
else
force = 3
icon_state = "sword0"
w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1)
user << "\blue [src] can now be concealed."
user << "<span class='notice'>[src] can now be concealed.</span>"
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
@@ -463,16 +512,16 @@ var/global/list/holodeck_programs = list(
if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W
if(G.state<2)
user << "\red You need a better grip to do that!"
user << "<span class='warning'>You need a better grip to do that!</span>"
return
G.affecting.loc = src.loc
G.affecting.Weaken(5)
visible_message("\red [G.assailant] dunks [G.affecting] into the [src]!", 3)
visible_message("<span class='warning'>[G.assailant] dunks [G.affecting] into the [src]!</span>", 3)
del(W)
return
else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src)
visible_message("\blue [user] dunks [W] into the [src]!", 3)
visible_message("<span class='notice'>[user] dunks [W] into the [src]!</span>", 3)
return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
@@ -482,9 +531,9 @@ var/global/list/holodeck_programs = list(
return
if(prob(50))
I.loc = src.loc
visible_message("\blue Swish! \the [I] lands in \the [src].", 3)
visible_message("<span class='notice'>Swish! \the [I] lands in \the [src].</span>", 3)
else
visible_message("\red \the [I] bounces off of \the [src]'s rim!", 3)
visible_message("<span class='warning'>\The [I] bounces off of \the [src]'s rim!</span>", 3)
return 0
else
return ..(mover, target, height, air_group)
@@ -578,3 +627,39 @@ var/global/list/holodeck_programs = list(
if (istype(W, /obj/item/weapon/wrench))
user << "It's a holorack! You can't unwrench it!"
return
//Holocarp
/mob/living/simple_animal/hostile/carp/holodeck
icon = 'icons/mob/AI.dmi'
icon_state = "holo4"
icon_living = "holo4"
icon_dead = "holo4"
icon_gib = null
meat_amount = 0
meat_type = null
/mob/living/simple_animal/hostile/carp/holodeck/proc/set_safety(var/safe)
if (safe)
faction = "neutral"
melee_damage_lower = 0
melee_damage_upper = 0
wall_smash = 0
destroy_surroundings = 0
else
faction = "carp"
melee_damage_lower = initial(melee_damage_lower)
melee_damage_upper = initial(melee_damage_upper)
wall_smash = initial(wall_smash)
destroy_surroundings = initial(destroy_surroundings)
/mob/living/simple_animal/hostile/carp/holodeck/gib()
derez() //holograms can't gib
/mob/living/simple_animal/hostile/carp/holodeck/death()
..()
derez()
/mob/living/simple_animal/hostile/carp/holodeck/proc/derez()
visible_message("<span class='notice'>\The [src] fades away!</span>")
del(src)

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/operating
name = "Operating Computer"
name = "patient monitoring console"
density = 1
anchored = 1.0
icon_state = "operating"

View File

@@ -0,0 +1,107 @@
/obj/machinery/computer/rcon
name = "\improper RCON remote control console"
desc = "Console used to remotely control machinery on the station."
icon = 'icons/obj/computer.dmi'
icon_state = "ai-fixer"
circuit = /obj/item/weapon/circuitboard/rcon_console
req_one_access = list(access_engine)
var/current_tag = null
var/list/known_SMESs = null
var/list/known_breakers = null
/obj/machinery/computer/rcon/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/rcon/attack_hand(var/mob/user as mob)
..()
ui_interact(user)
/obj/machinery/computer/rcon/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
FindDevices() // Update our devices list
var/data[0]
// SMES DATA (simplified view)
var/list/smeslist[0]
for(var/obj/machinery/power/smes/buildable/SMES in known_SMESs)
smeslist.Add(list(list(
"charge" = round(SMES.Percentage()),
"input_set" = SMES.input_attempt,
"input_val" = round(SMES.input_level),
"output_set" = SMES.output_attempt,
"output_val" = round(SMES.output_level),
"output_load" = round(SMES.output_used),
"RCON_tag" = SMES.RCon_tag
)))
data["smes_info"] = smeslist
// BREAKER DATA (simplified view)
var/list/breakerlist[0]
for(var/obj/machinery/power/breakerbox/BR in known_breakers)
breakerlist.Add(list(list(
"RCON_tag" = BR.RCon_tag,
"enabled" = BR.on
)))
data["breaker_info"] = breakerlist
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "rcon.tmpl", "RCON Control Console", 600, 400)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
ui.open()
// auto update every Master Controller tick
ui.set_auto_update(1)
/obj/machinery/computer/rcon/Topic(href, href_list)
if(href_list["smes_in_toggle"])
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_toggle"])
if(SMES)
SMES.toggle_input()
if(href_list["smes_out_toggle"])
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_toggle"])
if(SMES)
SMES.toggle_output()
if(href_list["smes_in_set"])
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_in_set"])
if(SMES)
var/inputset = input(usr, "Enter new input level (0-[SMES.input_level_max])", "SMES Input Power Control") as num
SMES.set_input(inputset)
if(href_list["smes_out_set"])
var/obj/machinery/power/smes/buildable/SMES = GetSMESByTag(href_list["smes_out_set"])
if(SMES)
var/outputset = input(usr, "Enter new output level (0-[SMES.output_level_max])", "SMES Input Power Control") as num
SMES.set_output(outputset)
if(href_list["toggle_breaker"])
var/obj/machinery/power/breakerbox/toggle = null
for(var/obj/machinery/power/breakerbox/breaker in known_breakers)
if(breaker.RCon_tag == href_list["toggle_breaker"])
toggle = breaker
if(toggle)
if(toggle.update_locked)
usr << "The breaker box was recently toggled. Please wait before toggling it again."
else
toggle.auto_toggle()
/obj/machinery/computer/rcon/proc/GetSMESByTag(var/tag)
if(!tag)
return
for(var/obj/machinery/power/smes/buildable/S in known_SMESs)
if(S.RCon_tag == tag)
return S
/obj/machinery/computer/rcon/proc/FindDevices()
known_SMESs = new /list()
for(var/obj/machinery/power/smes/buildable/SMES in machines)
if(SMES.RCon_tag && (SMES.RCon_tag != "NO_TAG") && SMES.RCon)
known_SMESs.Add(SMES)
known_breakers = new /list()
for(var/obj/machinery/power/breakerbox/breaker in machines)
if(breaker.RCon_tag != "NO_TAG")
known_breakers.Add(breaker)

View File

@@ -1,7 +1,7 @@
/obj/structure/AIcore
density = 1
anchored = 0
name = "AI core"
name = "\improper AI core"
icon = 'icons/mob/AI.dmi'
icon_state = "0"
var/state = 0
@@ -175,7 +175,7 @@
del(src)
/obj/structure/AIcore/deactivated
name = "Inactive AI"
name = "inactive AI"
icon = 'icons/mob/AI.dmi'
icon_state = "ai-empty"
anchored = 1

View File

@@ -1,5 +1,5 @@
/obj/machinery/computer/aifixer
name = "AI System Integrity Restorer"
name = "\improper AI system integrity restorer"
icon = 'icons/obj/computer.dmi'
icon_state = "ai-fixer"
circuit = /obj/item/weapon/circuitboard/aifixer

View File

@@ -2,7 +2,7 @@
/obj/machinery/computer/atmos_alert
name = "Atmospheric Alert Computer"
name = "atmospheric alert computer"
desc = "Used to access the station's atmospheric sensors."
circuit = "/obj/item/weapon/circuitboard/atmos_alert"
icon_state = "alert:0"

View File

@@ -3,363 +3,13 @@
/obj/structure/computerframe
density = 1
anchored = 0
name = "Computer-frame"
name = "computer frame"
icon = 'icons/obj/stock_parts.dmi'
icon_state = "0"
var/state = 0
var/obj/item/weapon/circuitboard/circuit = null
// weight = 1.0E8
/obj/item/weapon/circuitboard
density = 0
anchored = 0
w_class = 2.0
name = "Circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "id_mod"
item_state = "electronic"
origin_tech = "programming=2"
var/build_path = null
var/board_type = "computer"
var/list/req_components = null
var/frame_desc = null
var/contain_parts = 1
//Not sure where else to put this
/obj/item/weapon/circuitboard/broken
name = "broken electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_electronics_smoked"
origin_tech = null
board_type = "other"
//Called when the circuitboard is used to contruct a new machine.
/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M)
if (istype(M, build_path))
return 1
return 0
//Called when a computer is deconstructed to produce a circuitboard.
//Only used by computers, as other machines store their circuitboard instance.
/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M)
if (istype(M, build_path))
return 1
return 0
/*
Circuit Board Definitions
*/
/obj/item/weapon/circuitboard/message_monitor
name = "Circuit board (Message Monitor)"
build_path = /obj/machinery/computer/message_monitor
origin_tech = "programming=3"
//TODO: Move these into computer/camera.dm
/obj/item/weapon/circuitboard/security
name = "Circuit board (Security Camera Monitor)"
build_path = /obj/machinery/computer/security
var/network = list("SS13")
req_access = list(access_security)
var/locked = 1
var/emagged = 0
/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
if (..(C))
C.network = network
/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
if (..(C))
network = C.network
/obj/item/weapon/circuitboard/security/engineering
name = "Circuit board (Engineering Camera Monitor)"
build_path = /obj/machinery/computer/security/engineering
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
req_access = list()
/obj/item/weapon/circuitboard/security/mining
name = "Circuit board (Mining Camera Monitor)"
build_path = /obj/machinery/computer/security/mining
network = list("MINE")
req_access = list()
/obj/item/weapon/circuitboard/aicore
name = "Circuit board (AI Core)"
origin_tech = "programming=4;biotech=2"
board_type = "other"
/obj/item/weapon/circuitboard/aiupload
name = "Circuit board (AI Upload)"
build_path = /obj/machinery/computer/aiupload
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/borgupload
name = "Circuit board (Cyborg Upload)"
build_path = /obj/machinery/computer/borgupload
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/med_data
name = "Circuit board (Medical Records)"
build_path = /obj/machinery/computer/med_data
/obj/item/weapon/circuitboard/pandemic
name = "Circuit board (PanD.E.M.I.C. 2200)"
build_path = /obj/machinery/computer/pandemic
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/scan_consolenew
name = "Circuit board (DNA Machine)"
build_path = /obj/machinery/computer/scan_consolenew
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/communications
name = "Circuit board (Communications)"
build_path = /obj/machinery/computer/communications
origin_tech = "programming=2;magnets=2"
/obj/item/weapon/circuitboard/card
name = "Circuit board (ID Computer)"
build_path = /obj/machinery/computer/card
/obj/item/weapon/circuitboard/card/centcom
name = "Circuit board (CentCom ID Computer)"
build_path = /obj/machinery/computer/card/centcom
//obj/item/weapon/circuitboard/shield
// name = "Circuit board (Shield Control)"
// build_path = "/obj/machinery/computer/stationshield"
/obj/item/weapon/circuitboard/teleporter
name = "Circuit board (Teleporter)"
build_path = /obj/machinery/computer/teleporter
origin_tech = "programming=2;bluespace=2"
/obj/item/weapon/circuitboard/secure_data
name = "Circuit board (Security Records)"
build_path = /obj/machinery/computer/secure_data
/obj/item/weapon/circuitboard/skills
name = "Circuit board (Employment Records)"
build_path = /obj/machinery/computer/skills
/obj/item/weapon/circuitboard/stationalert
name = "Circuit board (Station Alerts)"
build_path = /obj/machinery/computer/station_alert
///obj/item/weapon/circuitboard/atmospheresiphonswitch
// name = "Circuit board (Atmosphere Siphon Control)"
// build_path = /obj/machinery/computer/atmosphere/siphonswitch
/obj/item/weapon/circuitboard/air_management
name = "Circuit board (Atmospheric Monitor)"
build_path = /obj/machinery/computer/general_air_control
var/frequency = 1439
/obj/item/weapon/circuitboard/air_management/tank_control
name = "Circuit board (Tank Control)"
build_path = /obj/machinery/computer/general_air_control/large_tank_control
frequency = 1441
/obj/item/weapon/circuitboard/air_management/supermatter_core
name = "Circuit board (Core Control)"
build_path = /obj/machinery/computer/general_air_control/supermatter_core
frequency = 1438
/obj/item/weapon/circuitboard/air_management/injector_control
name = "Circuit board (Injector Control)"
build_path = /obj/machinery/computer/general_air_control/fuel_injection
/obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C)
if (..(C))
C.frequency = frequency
/obj/item/weapon/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C)
if (..(C))
frequency = C.frequency
/obj/item/weapon/circuitboard/atmos_alert
name = "Circuit board (Atmospheric Alert)"
build_path = /obj/machinery/computer/atmos_alert
/obj/item/weapon/circuitboard/pod
name = "Circuit board (Massdriver control)"
build_path = /obj/machinery/computer/pod
/obj/item/weapon/circuitboard/robotics
name = "Circuit board (Robotics Control)"
build_path = /obj/machinery/computer/robotics
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/drone_control
name = "Circuit board (Drone Control)"
build_path = /obj/machinery/computer/drone_control
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/cloning
name = "Circuit board (Cloning)"
build_path = /obj/machinery/computer/cloning
origin_tech = "programming=3;biotech=3"
/obj/item/weapon/circuitboard/arcade
name = "Circuit board (Arcade)"
build_path = /obj/machinery/computer/arcade
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/turbine_control
name = "Circuit board (Turbine control)"
build_path = /obj/machinery/computer/turbine_computer
/obj/item/weapon/circuitboard/solar_control
name = "Circuit board (Solar Control)"
build_path = /obj/machinery/power/solar_control
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/powermonitor
name = "Circuit board (Power Monitor)"
build_path = /obj/machinery/computer/power_monitor
/obj/item/weapon/circuitboard/olddoor
name = "Circuit board (DoorMex)"
build_path = /obj/machinery/computer/pod/old
/obj/item/weapon/circuitboard/syndicatedoor
name = "Circuit board (ProComp Executive)"
build_path = /obj/machinery/computer/pod/old/syndicate
/obj/item/weapon/circuitboard/swfdoor
name = "Circuit board (Magix)"
build_path = /obj/machinery/computer/pod/old/swf
/obj/item/weapon/circuitboard/prisoner
name = "Circuit board (Prisoner Management)"
build_path = /obj/machinery/computer/prisoner
/obj/item/weapon/circuitboard/rdconsole
name = "Circuit Board (RD Console)"
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/mecha_control
name = "Circuit Board (Exosuit Control Console)"
build_path = /obj/machinery/computer/mecha
/obj/item/weapon/circuitboard/rdservercontrol
name = "Circuit Board (R&D Server Control)"
build_path = /obj/machinery/computer/rdservercontrol
/obj/item/weapon/circuitboard/crew
name = "Circuit board (Crew monitoring computer)"
build_path = /obj/machinery/computer/crew
origin_tech = "programming=3;biotech=2;magnets=2"
/obj/item/weapon/circuitboard/mech_bay_power_console
name = "Circuit board (Mech Bay Power Control Console)"
build_path = /obj/machinery/computer/mech_bay_power_console
origin_tech = "programming=2;powerstorage=3"
/obj/item/weapon/circuitboard/ordercomp
name = "Circuit board (Supply ordering console)"
build_path = /obj/machinery/computer/ordercomp
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/supplycomp
name = "Circuit board (Supply shuttle console)"
build_path = /obj/machinery/computer/supplycomp
origin_tech = "programming=3"
var/contraband_enabled = 0
/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC)
if (..(SC))
SC.can_order_contraband = contraband_enabled
/obj/item/weapon/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC)
if (..(SC))
contraband_enabled = SC.can_order_contraband
/obj/item/weapon/circuitboard/operating
name = "Circuit board (Operating Computer)"
build_path = /obj/machinery/computer/operating
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/comm_monitor
name = "Circuit board (Telecommunications Monitor)"
build_path = /obj/machinery/computer/telecomms/monitor
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/comm_server
name = "Circuit board (Telecommunications Server Monitor)"
build_path = /obj/machinery/computer/telecomms/server
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/comm_traffic
name = "Circuitboard (Telecommunications Traffic Control)"
build_path = /obj/machinery/computer/telecomms/traffic
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/curefab
name = "Circuit board (Cure fab)"
build_path = /obj/machinery/computer/curer
/obj/item/weapon/circuitboard/splicer
name = "Circuit board (Disease Splicer)"
build_path = /obj/machinery/computer/diseasesplicer
/obj/item/weapon/circuitboard/mining_shuttle
name = "Circuit board (Mining Shuttle)"
build_path = /obj/machinery/computer/shuttle_control/mining
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/engineering_shuttle
name = "Circuit board (Engineering Shuttle)"
build_path = /obj/machinery/computer/shuttle_control/engineering
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/research_shuttle
name = "Circuit board (Research Shuttle)"
build_path = /obj/machinery/computer/shuttle_control/research
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/HolodeckControl // Not going to let people get this, but it's just here for future
name = "Circuit board (Holodeck Control)"
build_path = /obj/machinery/computer/HolodeckControl
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/aifixer
name = "Circuit board (AI Integrity Restorer)"
build_path = /obj/machinery/computer/aifixer
origin_tech = "programming=3;biotech=2"
/obj/item/weapon/circuitboard/area_atmos
name = "Circuit board (Area Air Control)"
build_path = /obj/machinery/computer/area_atmos
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/prison_shuttle
name = "Circuit board (Prison Shuttle)"
build_path = /obj/machinery/computer/prison_shuttle
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/device/multitool))
var/catastasis = src.contraband_enabled
var/opposite_catastasis
if(catastasis)
opposite_catastasis = "STANDARD"
catastasis = "BROAD"
else
opposite_catastasis = "BROAD"
catastasis = "STANDARD"
switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
//switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
if("Switch to STANDARD","Switch to BROAD")
src.contraband_enabled = !src.contraband_enabled
if("Cancel")
return
else
user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
return
/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/card/emag))
if(emagged)
user << "Circuit lock is already removed."
return
user << "\blue You override the circuit lock and open controls."
emagged = 1
locked = 0
else if(istype(I,/obj/item/weapon/card/id))
if(emagged)
user << "\red Circuit lock does not respond."
return
if(check_access(I))
locked = !locked
user << "\blue You [locked ? "" : "un"]lock the circuit controls."
else
user << "\red Access denied."
else if(istype(I,/obj/item/device/multitool))
if(locked)
user << "\red Circuit controls are locked."
return
var/existing_networks = list2text(network,",")
var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
if(!input)
usr << "No input found please hang up and try your call again."
return
var/list/tempnetwork = text2list(input, ",")
tempnetwork = difflist(tempnetwork,RESTRICTED_CAMERA_NETWORKS,1)
if(tempnetwork.len < 1)
usr << "No network found please hang up and try your call again."
return
network = tempnetwork
return
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/screwdriver))
user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.")
if(src.build_path == /obj/machinery/computer/rdconsole/core)
src.name = "Circuit Board (RD Console - Robotics)"
src.build_path = /obj/machinery/computer/rdconsole/robotics
user << "\blue Access protocols set to robotics."
else
src.name = "Circuit Board (RD Console)"
src.build_path = /obj/machinery/computer/rdconsole/core
user << "\blue Access protocols set to default."
return
/obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
switch(state)
if(0)

View File

@@ -2,7 +2,7 @@
/obj/machinery/computer/security
name = "Security Cameras"
name = "security camera monitor"
desc = "Used to access the various cameras on the station."
icon_state = "cameras"
var/obj/machinery/camera/current = null
@@ -23,6 +23,69 @@
user.reset_view(current)
return 1
ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1)
if(src.z > 6) return
if(stat & (NOPOWER|BROKEN)) return
if(user.stat) return
var/data[0]
data["current"] = null
var/list/L = list()
for (var/obj/machinery/camera/C in cameranet.cameras)
if(can_access_camera(C))
L.Add(C)
camera_sort(L)
var/cameras[0]
for(var/obj/machinery/camera/C in L)
var/cam[0]
cam["name"] = C.c_tag
cam["deact"] = !C.can_use()
cam["camera"] = "\ref[C]"
cam["x"] = C.x
cam["y"] = C.y
cam["z"] = C.z
cameras[++cameras.len] = cam
if(C == current)
data["current"] = cam
data["cameras"] = cameras
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800)
// adding a template with the key "mapContent" enables the map ui functionality
ui.add_template("mapContent", "sec_camera_map_content.tmpl")
// adding a template with the key "mapHeader" replaces the map header content
ui.add_template("mapHeader", "sec_camera_map_header.tmpl")
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
Topic(href, href_list)
if(href_list["switchTo"])
if(src.z>6 || stat&(NOPOWER|BROKEN)) return
if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return
var/obj/machinery/camera/C = locate(href_list["switchTo"]) in cameranet.cameras
if(!C) return
switch_to_camera(usr, C)
return 1
else if(href_list["reset"])
if(src.z>6 || stat&(NOPOWER|BROKEN)) return
if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return
current = null
usr.check_eye(current)
return 1
else
. = ..()
attack_hand(var/mob/user as mob)
if (src.z > 6)
@@ -32,35 +95,7 @@
if(!isAI(user))
user.set_machine(src)
var/list/L = list()
for (var/obj/machinery/camera/C in cameranet.cameras)
L.Add(C)
camera_sort(L)
var/list/D = list()
D["Cancel"] = "Cancel"
for(var/obj/machinery/camera/C in L)
if(can_access_camera(C))
D[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
var/t = input(user, "Which camera should you change to?") as null|anything in D
if(!t)
user.unset_machine()
return 0
var/obj/machinery/camera/C = D[t]
if(t == "Cancel")
user.unset_machine()
return 0
if(C)
switch_to_camera(user, C)
spawn(5)
attack_hand(user)
return
ui_interact(user)
proc/can_access_camera(var/obj/machinery/camera/C)
var/list/shared_networks = src.network & C.network
@@ -79,6 +114,7 @@
if (!C.can_use() || user.stat || (get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) && !istype(user, /mob/living/silicon)))
return 0
src.current = C
check_eye(user)
use_power(50)
return 1
@@ -151,28 +187,28 @@
circuit = null
/obj/machinery/computer/security/wooden_tv
name = "Security Cameras"
name = "security camera monitor"
desc = "An old TV hooked into the stations camera network."
icon_state = "security_det"
circuit = null
/obj/machinery/computer/security/mining
name = "Outpost Cameras"
name = "outpost camera monitor"
desc = "Used to access the various cameras on the outpost."
icon_state = "miningcameras"
network = list("MINE")
circuit = /obj/item/weapon/circuitboard/security/mining
/obj/machinery/computer/security/engineering
name = "Engineering Cameras"
name = "engineering camera monitor"
desc = "Used to monitor fires and breaches."
icon_state = "engineeringcameras"
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
circuit = /obj/item/weapon/circuitboard/security/engineering
/obj/machinery/computer/security/nuclear
name = "Mission Monitor"
name = "head mounted camera monitor"
desc = "Used to access the built-in cameras in helmets."
icon_state = "syndicam"
network = list("NUKE")

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/card
name = "Identification Computer"
name = "\improper ID card modification console"
desc = "Terminal for programming NanoTrasen employee ID cards to access parts of the station."
icon_state = "id"
req_access = list(access_change_ids)
@@ -282,7 +282,7 @@
return 1
/obj/machinery/computer/card/centcom
name = "CentCom Identification Computer"
name = "\improper CentCom ID card modification console"
circuit = "/obj/item/weapon/circuitboard/card/centcom"
req_access = list(access_cent_captain)

View File

@@ -1,5 +1,5 @@
/obj/machinery/computer/cloning
name = "Cloning console"
name = "cloning control console"
icon = 'icons/obj/computer.dmi'
icon_state = "dna"
circuit = "/obj/item/weapon/circuitboard/cloning"

View File

@@ -2,8 +2,8 @@
// The communications computer
/obj/machinery/computer/communications
name = "Communications Console"
desc = "This can be used for various important functions. Still under developement."
name = "command and communications console"
desc = "Used to command and control the station. Can relay long-range communications."
icon_state = "comm"
req_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/communications"

View File

@@ -1,5 +1,5 @@
/obj/machinery/computer/crew
name = "Crew monitoring computer"
name = "crew monitoring computer"
desc = "Used to monitor active health sensors built into most of the crew's uniforms."
icon_state = "crew"
use_power = 1

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/hologram_comp
name = "Hologram Computer"
name = "hologram computer"
desc = "Rumoured to control holograms."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "holo_console0"

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/aiupload
name = "AI Upload"
name = "\improper AI upload console"
desc = "Used to upload laws to the AI."
icon_state = "command"
circuit = "/obj/item/weapon/circuitboard/aiupload"
@@ -54,7 +54,7 @@
/obj/machinery/computer/borgupload
name = "Cyborg Upload"
name = "cyborg upload console"
desc = "Used to upload laws to Cyborgs."
icon_state = "command"
circuit = "/obj/item/weapon/circuitboard/borgupload"

View File

@@ -3,7 +3,7 @@
/obj/machinery/computer/lockdown
//for reference
/*name = "Lockdown Control"
/*name = "lockdown control"
desc = "Used to control blast doors."
icon_state = "lockdown"
circuit = "/obj/item/weapon/circuitboard/lockdown"

View File

@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/med_data//TODO:SANITY
name = "Medical Records"
desc = "This can be used to check medical records."
name = "medical records console"
desc = "Used to view, edit and maintain medical records."
icon_state = "medcomp"
req_one_access = list(access_medical, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/med_data"

View File

@@ -1,12 +1,8 @@
// Allows you to monitor messages that passes the server.
/obj/machinery/computer/message_monitor
name = "Message Monitor Console"
desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages."
name = "messaging monitor console"
desc = "Used to access and maintain data on messaging servers. Allows you to view PDA and request console messages."
icon_state = "comm_logs"
var/hack_icon = "comm_logsc"
var/normal_icon = "comm_logs"

View File

@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/pod
name = "Pod Launch Control"
desc = "A controll for launching pods. Some people prefer firing Mechas."
name = "pod launch control console"
desc = "A control console for launching pods. Some people prefer firing Mechas."
icon_state = "computer_generic"
circuit = /obj/item/weapon/circuitboard/pod
var/id = 1.0

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/prisoner
name = "Prisoner Management"
name = "prisoner management console"
icon = 'icons/obj/computer.dmi'
icon_state = "explosive"
req_access = list(access_armory)
@@ -100,5 +100,3 @@
src.add_fingerprint(usr)
src.updateUsrDialog()
return

View File

@@ -11,7 +11,7 @@ var/prison_shuttle_time = 0
var/prison_shuttle_timeleft = 0
/obj/machinery/computer/prison_shuttle
name = "Prison Shuttle Console"
name = "prison shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
req_access = list(access_security)

View File

@@ -1,9 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/robotics
name = "Robotics Control"
desc = "Used to remotely lockdown or detonate linked Cyborgs."
name = "robotics control console"
desc = "Used to remotely lockdown or detonate linked cyborgs."
icon = 'icons/obj/computer.dmi'
icon_state = "robot"
req_access = list(access_robotics)

View File

@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/secure_data//TODO:SANITY
name = "Security Records"
desc = "Used to view and edit personnel's security records"
name = "security records console"
desc = "Used to view, edit and maintain security records"
icon_state = "security"
req_one_access = list(access_security, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/secure_data"

View File

@@ -1,8 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/skills//TODO:SANITY
name = "Employment Records"
desc = "Used to view personnel's employment records"
name = "employment records console"
desc = "Used to view, edit and maintain employment records."
icon_state = "medlaptop"
req_one_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/skills"

View File

@@ -12,7 +12,7 @@ var/specops_shuttle_time = 0
var/specops_shuttle_timeleft = 0
/obj/machinery/computer/specops_shuttle
name = "Spec. Ops. Shuttle Console"
name = "special operations shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "shuttle"
req_access = list(access_cent_specops)

View File

@@ -1,6 +1,6 @@
/obj/machinery/computer/station_alert
name = "Station Alert Computer"
name = "Station Alert Console"
desc = "Used to access the station's automated alert system."
icon_state = "alert:0"
circuit = "/obj/item/weapon/circuitboard/stationalert"

View File

@@ -0,0 +1,416 @@
/obj/machinery/computer/supplycomp
name = "supply control console"
icon = 'icons/obj/computer.dmi'
icon_state = "supply"
req_access = list(access_cargo)
circuit = "/obj/item/weapon/circuitboard/supplycomp"
var/temp = null
var/reqtime = 0 //Cooldown for requisitions - Quarxink
var/hacked = 0
var/can_order_contraband = 0
var/last_viewed_group = "categories"
/obj/machinery/computer/ordercomp
name = "supply ordering console"
icon = 'icons/obj/computer.dmi'
icon_state = "request"
circuit = "/obj/item/weapon/circuitboard/ordercomp"
var/temp = null
var/reqtime = 0 //Cooldown for requisitions - Quarxink
var/last_viewed_group = "categories"
/obj/machinery/computer/ordercomp/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/supplycomp/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/ordercomp/attack_hand(var/mob/user as mob)
if(..())
return
user.set_machine(src)
var/dat
if(temp)
dat = temp
else
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
if (shuttle)
dat += {"<BR><B>Supply shuttle</B><HR>
Location: [shuttle.has_arrive_time() ? "Moving to station ([shuttle.eta_minutes()] Mins.)":shuttle.at_station() ? "Docked":"Away"]<BR>
<HR>Supply points: [supply_controller.points]<BR>
<BR>\n<A href='?src=\ref[src];order=categories'>Request items</A><BR><BR>
<A href='?src=\ref[src];vieworders=1'>View approved orders</A><BR><BR>
<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR><BR>
<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450")
onclose(user, "computer")
return
/obj/machinery/computer/ordercomp/Topic(href, href_list)
if(..())
return
if( isturf(loc) && (in_range(src, usr) || istype(usr, /mob/living/silicon)) )
usr.set_machine(src)
if(href_list["order"])
if(href_list["order"] == "categories")
//all_supply_groups
//Request what?
last_viewed_group = "categories"
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><HR><BR><BR>"
temp += "<b>Select a category</b><BR><BR>"
for(var/supply_group_name in all_supply_groups )
temp += "<A href='?src=\ref[src];order=[supply_group_name]'>[supply_group_name]</A><BR>"
else
last_viewed_group = href_list["order"]
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
temp += "<A href='?src=\ref[src];order=categories'>Back to all categories</A><HR><BR><BR>"
temp += "<b>Request from: [last_viewed_group]</b><BR><BR>"
for(var/supply_name in supply_controller.supply_packs )
var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
if(N.hidden || N.contraband || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
else if (href_list["doorder"])
if(world.time < reqtime)
for(var/mob/V in hearers(src))
V.show_message("<b>[src]</b>'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
return
//Find the correct supply_pack datum
var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
if(!istype(P)) return
var/timeout = world.time + 600
var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN)
if(world.time > timeout) return
if(!reason) return
var/idname = "*None Provided*"
var/idrank = "*None Provided*"
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
idname = H.get_authentification_name()
idrank = H.get_assignment()
else if(issilicon(usr))
idname = usr.real_name
supply_controller.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
reqform.name = "Requisition Form - [P.name]"
reqform.info += "<h3>[station_name] Supply Requisition Form</h3><hr>"
reqform.info += "INDEX: #[supply_controller.ordernum]<br>"
reqform.info += "REQUESTED BY: [idname]<br>"
reqform.info += "RANK: [idrank]<br>"
reqform.info += "REASON: [reason]<br>"
reqform.info += "SUPPLY CRATE TYPE: [P.name]<br>"
reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]<br>"
reqform.info += "CONTENTS:<br>"
reqform.info += P.manifest
reqform.info += "<hr>"
reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:<br>"
reqform.update_icon() //Fix for appearing blank when printed.
reqtime = (world.time + 5) % 1e5
//make our supply_order datum
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = supply_controller.ordernum
O.object = P
O.orderedby = idname
supply_controller.requestlist += O
temp = "Thanks for your request. The cargo team will process it as soon as possible.<BR>"
temp += "<BR><A href='?src=\ref[src];order=[last_viewed_group]'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
else if (href_list["vieworders"])
temp = "Current approved orders: <BR><BR>"
for(var/S in supply_controller.shoppinglist)
var/datum/supply_order/SO = S
temp += "[SO.object.name] approved by [SO.orderedby] [SO.comment ? "([SO.comment])":""]<BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else if (href_list["viewrequests"])
temp = "Current requests: <BR><BR>"
for(var/S in supply_controller.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby]<BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else if (href_list["mainmenu"])
temp = null
add_fingerprint(usr)
updateUsrDialog()
return
/obj/machinery/computer/supplycomp/attack_hand(var/mob/user as mob)
if(!allowed(user))
user << "\red Access Denied."
return
if(..())
return
user.set_machine(src)
post_signal("supply")
var/dat
if (temp)
dat = temp
else
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
if (shuttle)
dat += "<BR><B>Supply shuttle</B><HR>"
dat += "\nLocation: "
if (shuttle.has_arrive_time())
dat += "In transit ([shuttle.eta_minutes()] Mins.)<BR>"
else
if (shuttle.at_station())
if (shuttle.docking_controller)
switch(shuttle.docking_controller.get_docking_status())
if ("docked") dat += "Docked at station<BR>"
if ("undocked") dat += "Undocked from station<BR>"
if ("docking") dat += "Docking with station [shuttle.can_force()? "<span class='warning'><A href='?src=\ref[src];force_send=1'>Force Launch</A></span>" : ""]<BR>"
if ("undocking") dat += "Undocking from station [shuttle.can_force()? "<span class='warning'><A href='?src=\ref[src];force_send=1'>Force Launch</A></span>" : ""]<BR>"
else
dat += "Station<BR>"
if (shuttle.can_launch())
dat += "<A href='?src=\ref[src];send=1'>Send away</A>"
else if (shuttle.can_cancel())
dat += "<A href='?src=\ref[src];cancel_send=1'>Cancel launch</A>"
else
dat += "*Shuttle is busy*"
dat += "<BR>\n<BR>"
else
dat += "Away<BR>"
if (shuttle.can_launch())
dat += "<A href='?src=\ref[src];send=1'>Request supply shuttle</A>"
else if (shuttle.can_cancel())
dat += "<A href='?src=\ref[src];cancel_send=1'>Cancel request</A>"
else
dat += "*Shuttle is busy*"
dat += "<BR>\n<BR>"
dat += {"<HR>\nSupply points: [supply_controller.points]<BR>\n<BR>
\n<A href='?src=\ref[src];order=categories'>Order items</A><BR>\n<BR>
\n<A href='?src=\ref[src];viewrequests=1'>View requests</A><BR>\n<BR>
\n<A href='?src=\ref[src];vieworders=1'>View orders</A><BR>\n<BR>
\n<A href='?src=\ref[user];mach_close=computer'>Close</A>"}
user << browse(dat, "window=computer;size=575x450")
onclose(user, "computer")
return
/obj/machinery/computer/supplycomp/attackby(I as obj, user as mob)
if(istype(I,/obj/item/weapon/card/emag) && !hacked)
user << "\blue Special supplies unlocked."
hacked = 1
return
else
..()
return
/obj/machinery/computer/supplycomp/Topic(href, href_list)
if(!supply_controller)
world.log << "## ERROR: Eek. The supply_controller controller datum is missing somehow."
return
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
if (!shuttle)
world.log << "## ERROR: Eek. The supply/shuttle datum is missing somehow."
return
if(..())
return
if(isturf(loc) && ( in_range(src, usr) || istype(usr, /mob/living/silicon) ) )
usr.set_machine(src)
//Calling the shuttle
if(href_list["send"])
if(shuttle.at_station())
if (shuttle.forbidden_atoms_check())
temp = "For safety reasons the automated supply shuttle cannot transport live organisms, classified nuclear weaponry or homing beacons.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else
shuttle.launch(src)
temp = "Initiating launch sequence. \[<span class='warning'><A href='?src=\ref[src];force_send=1'>Force Launch</A></span>\]<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else
shuttle.launch(src)
temp = "The supply shuttle has been called and will arrive in approximately [round(supply_controller.movetime/600,1)] minutes.<BR><BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
post_signal("supply")
if (href_list["force_send"])
shuttle.force_launch(src)
if (href_list["cancel_send"])
shuttle.cancel_launch(src)
else if (href_list["order"])
//if(!shuttle.idle()) return //this shouldn't be necessary it seems
if(href_list["order"] == "categories")
//all_supply_groups
//Request what?
last_viewed_group = "categories"
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
temp += "<A href='?src=\ref[src];mainmenu=1'>Main Menu</A><HR><BR><BR>"
temp += "<b>Select a category</b><BR><BR>"
for(var/supply_group_name in all_supply_groups )
temp += "<A href='?src=\ref[src];order=[supply_group_name]'>[supply_group_name]</A><BR>"
else
last_viewed_group = href_list["order"]
temp = "<b>Supply points: [supply_controller.points]</b><BR>"
temp += "<A href='?src=\ref[src];order=categories'>Back to all categories</A><HR><BR><BR>"
temp += "<b>Request from: [last_viewed_group]</b><BR><BR>"
for(var/supply_name in supply_controller.supply_packs )
var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
if((N.hidden && !hacked) || (N.contraband && !can_order_contraband) || N.group != last_viewed_group) continue //Have to send the type instead of a reference to
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
/*temp = "Supply points: [supply_controller.points]<BR><HR><BR>Request what?<BR><BR>"
for(var/supply_name in supply_controller.supply_packs )
var/datum/supply_packs/N = supply_controller.supply_packs[supply_name]
if(N.hidden && !hacked) continue
if(N.contraband && !can_order_contraband) continue
temp += "<A href='?src=\ref[src];doorder=[supply_name]'>[supply_name]</A> Cost: [N.cost]<BR>" //the obj because it would get caught by the garbage
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"*/
else if (href_list["doorder"])
if(world.time < reqtime)
for(var/mob/V in hearers(src))
V.show_message("<b>[src]</b>'s monitor flashes, \"[world.time - reqtime] seconds remaining until another requisition form may be printed.\"")
return
//Find the correct supply_pack datum
var/datum/supply_packs/P = supply_controller.supply_packs[href_list["doorder"]]
if(!istype(P)) return
var/timeout = world.time + 600
var/reason = copytext(sanitize(input(usr,"Reason:","Why do you require this item?","") as null|text),1,MAX_MESSAGE_LEN)
if(world.time > timeout) return
if(!reason) return
var/idname = "*None Provided*"
var/idrank = "*None Provided*"
if(ishuman(usr))
var/mob/living/carbon/human/H = usr
idname = H.get_authentification_name()
idrank = H.get_assignment()
else if(issilicon(usr))
idname = usr.real_name
supply_controller.ordernum++
var/obj/item/weapon/paper/reqform = new /obj/item/weapon/paper(loc)
reqform.name = "Requisition Form - [P.name]"
reqform.info += "<h3>[station_name] Supply Requisition Form</h3><hr>"
reqform.info += "INDEX: #[supply_controller.ordernum]<br>"
reqform.info += "REQUESTED BY: [idname]<br>"
reqform.info += "RANK: [idrank]<br>"
reqform.info += "REASON: [reason]<br>"
reqform.info += "SUPPLY CRATE TYPE: [P.name]<br>"
reqform.info += "ACCESS RESTRICTION: [replacetext(get_access_desc(P.access))]<br>"
reqform.info += "CONTENTS:<br>"
reqform.info += P.manifest
reqform.info += "<hr>"
reqform.info += "STAMP BELOW TO APPROVE THIS REQUISITION:<br>"
reqform.update_icon() //Fix for appearing blank when printed.
reqtime = (world.time + 5) % 1e5
//make our supply_order datum
var/datum/supply_order/O = new /datum/supply_order()
O.ordernum = supply_controller.ordernum
O.object = P
O.orderedby = idname
supply_controller.requestlist += O
temp = "Order request placed.<BR>"
temp += "<BR><A href='?src=\ref[src];order=[last_viewed_group]'>Back</A> | <A href='?src=\ref[src];mainmenu=1'>Main Menu</A> | <A href='?src=\ref[src];confirmorder=[O.ordernum]'>Authorize Order</A>"
else if(href_list["confirmorder"])
//Find the correct supply_order datum
var/ordernum = text2num(href_list["confirmorder"])
var/datum/supply_order/O
var/datum/supply_packs/P
temp = "Invalid Request"
for(var/i=1, i<=supply_controller.requestlist.len, i++)
var/datum/supply_order/SO = supply_controller.requestlist[i]
if(SO.ordernum == ordernum)
O = SO
P = O.object
if(supply_controller.points >= P.cost)
supply_controller.requestlist.Cut(i,i+1)
supply_controller.points -= P.cost
supply_controller.shoppinglist += O
temp = "Thanks for your order.<BR>"
temp += "<BR><A href='?src=\ref[src];viewrequests=1'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
else
temp = "Not enough supply points.<BR>"
temp += "<BR><A href='?src=\ref[src];viewrequests=1'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
break
else if (href_list["vieworders"])
temp = "Current approved orders: <BR><BR>"
for(var/S in supply_controller.shoppinglist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""]<BR>"// <A href='?src=\ref[src];cancelorder=[S]'>(Cancel)</A><BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
/*
else if (href_list["cancelorder"])
var/datum/supply_order/remove_supply = href_list["cancelorder"]
supply_shuttle_shoppinglist -= remove_supply
supply_shuttle_points += remove_supply.object.cost
temp += "Canceled: [remove_supply.object.name]<BR><BR><BR>"
for(var/S in supply_shuttle_shoppinglist)
var/datum/supply_order/SO = S
temp += "[SO.object.name] approved by [SO.orderedby][SO.comment ? " ([SO.comment])":""] <A href='?src=\ref[src];cancelorder=[S]'>(Cancel)</A><BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
*/
else if (href_list["viewrequests"])
temp = "Current requests: <BR><BR>"
for(var/S in supply_controller.requestlist)
var/datum/supply_order/SO = S
temp += "#[SO.ordernum] - [SO.object.name] requested by [SO.orderedby] <A href='?src=\ref[src];confirmorder=[SO.ordernum]'>Approve</A> <A href='?src=\ref[src];rreq=[SO.ordernum]'>Remove</A><BR>"
temp += "<BR><A href='?src=\ref[src];clearreq=1'>Clear list</A>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else if (href_list["rreq"])
var/ordernum = text2num(href_list["rreq"])
temp = "Invalid Request.<BR>"
for(var/i=1, i<=supply_controller.requestlist.len, i++)
var/datum/supply_order/SO = supply_controller.requestlist[i]
if(SO.ordernum == ordernum)
supply_controller.requestlist.Cut(i,i+1)
temp = "Request removed.<BR>"
break
temp += "<BR><A href='?src=\ref[src];viewrequests=1'>Back</A> <A href='?src=\ref[src];mainmenu=1'>Main Menu</A>"
else if (href_list["clearreq"])
supply_controller.requestlist.Cut()
temp = "List cleared.<BR>"
temp += "<BR><A href='?src=\ref[src];mainmenu=1'>OK</A>"
else if (href_list["mainmenu"])
temp = null
add_fingerprint(usr)
updateUsrDialog()
return
/obj/machinery/computer/supplycomp/proc/post_signal(var/command)
var/datum/radio_frequency/frequency = radio_controller.return_frequency(1435)
if(!frequency) return
var/datum/signal/status_signal = new
status_signal.source = src
status_signal.transmission_method = 1
status_signal.data["command"] = command
frequency.post_signal(src, status_signal)

View File

@@ -11,7 +11,7 @@ var/syndicate_elite_shuttle_time = 0
var/syndicate_elite_shuttle_timeleft = 0
/obj/machinery/computer/syndicate_elite_shuttle
name = "Elite Syndicate Squad Shuttle Console"
name = "elite syndicate squad shuttle control console"
icon = 'icons/obj/computer.dmi'
icon_state = "syndishuttle"
req_access = list(access_cent_specops)

View File

@@ -1,5 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
//Circuit boards are in /code/game/objects/items/weapons/circuitboards/machinery/
/obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier.
name = "machine frame"
icon = 'icons/obj/stock_parts.dmi'
@@ -113,7 +115,7 @@
break
if(component_check)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
var/obj/machinery/new_machine = new src.circuit.build_path(src.loc)
var/obj/machinery/new_machine = new src.circuit.build_path(src.loc, src.dir)
new_machine.component_parts.Cut()
src.circuit.construct(new_machine)
for(var/obj/O in src)
@@ -154,260 +156,3 @@
user << desc
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil))
user << "\red You cannot add that component to the machine!"
//Machine Frame Circuit Boards
/*Common Parts: Parts List: Ignitor, Timer, Infra-red laser, Infra-red sensor, t_scanner, Capacitor, Valve, sensor unit,
micro-manipulator, console screen, beaker, Microlaser, matter bin, power cells.
Note: Once everything is added to the public areas, will add materials to circuit boards since autolathe won't be able
to destroy them and players will be able to make replacements.
*/
/obj/item/weapon/circuitboard/destructive_analyzer
name = "Circuit board (Destructive Analyzer)"
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = "magnets=2;engineering=2;programming=2"
frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser."
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/circuitboard/autolathe
name = "Circuit board (Autolathe)"
build_path = "/obj/machinery/autolathe"
board_type = "machine"
origin_tech = "engineering=2;programming=2"
frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen."
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/circuitboard/protolathe
name = "Circuit board (Protolathe)"
build_path = "/obj/machinery/r_n_d/protolathe"
board_type = "machine"
origin_tech = "engineering=2;programming=2"
frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers."
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/circuitboard/circuit_imprinter
name = "Circuit board (Circuit Imprinter)"
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
board_type = "machine"
origin_tech = "engineering=2;programming=2"
frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers."
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/circuitboard/pacman
name = "Circuit Board (PACMAN-type Generator)"
build_path = "/obj/machinery/power/port_gen/pacman"
board_type = "machine"
origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3"
frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor."
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/circuitboard/pacman/super
name = "Circuit Board (SUPERPACMAN-type Generator)"
build_path = "/obj/machinery/power/port_gen/pacman/super"
origin_tech = "programming=3;powerstorage=4;engineering=4"
/obj/item/weapon/circuitboard/pacman/mrs
name = "Circuit Board (MRSPACMAN-type Generator)"
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
origin_tech = "programming=3;powerstorage=5;engineering=5"
obj/item/weapon/circuitboard/rdserver
name = "Circuit Board (R&D Server)"
build_path = "/obj/machinery/r_n_d/server"
board_type = "machine"
origin_tech = "programming=3"
frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
req_components = list(
"/obj/item/stack/cable_coil" = 2,
"/obj/item/weapon/stock_parts/scanning_module" = 1)
/obj/item/weapon/circuitboard/mechfab
name = "Circuit board (Exosuit Fabricator)"
build_path = "/obj/machinery/mecha_part_fabricator"
board_type = "machine"
origin_tech = "programming=3;engineering=3"
frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen."
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/circuitboard/clonepod
name = "Circuit board (Clone Pod)"
build_path = "/obj/machinery/clonepod"
board_type = "machine"
origin_tech = "programming=3;biotech=3"
frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen."
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/weapon/circuitboard/clonescanner
name = "Circuit board (Cloning Scanner)"
build_path = "/obj/machinery/dna_scannernew"
board_type = "machine"
origin_tech = "programming=2;biotech=2"
frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
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/circuitboard/unary_atmos
board_type = "machine"
var/machine_dir = SOUTH
var/init_dirs = SOUTH
/obj/item/weapon/circuitboard/unary_atmos/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/screwdriver))
machine_dir = turn(machine_dir, 90)
init_dirs = machine_dir
user.visible_message("\blue \The [user] adjusts the jumper on the [src]'s port configuration pins.", "\blue You adjust the jumper on the port configuration pins. Now set to [dir2text(machine_dir)].")
return
/obj/item/weapon/circuitboard/unary_atmos/examine(mob/user)
..(user)
user << "The jumper is connecting the [dir2text(machine_dir)] pins."
/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U)
//TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up.
U.set_dir(src.machine_dir)
U.initialize_directions = src.init_dirs
U.initialize()
U.build_network()
if (U.node)
U.node.initialize()
U.node.build_network()
/obj/item/weapon/circuitboard/unary_atmos/heater
name = "Circuit Board (Gas Heating System)"
build_path = "/obj/machinery/atmospherics/unary/heater"
origin_tech = "powerstorage=2;engineering=1"
frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors."
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/weapon/circuitboard/unary_atmos/cooler
name = "Circuit Board (Gas Cooling System)"
build_path = "/obj/machinery/atmospherics/unary/freezer"
origin_tech = "magnets=2;engineering=2"
frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors."
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)
// Telecomms circuit boards:
/obj/item/weapon/circuitboard/telecomms/receiver
name = "Circuit Board (Subspace Receiver)"
build_path = "/obj/machinery/telecomms/receiver"
board_type = "machine"
origin_tech = "programming=4;engineering=3;bluespace=2"
frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser."
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/circuitboard/telecomms/hub
name = "Circuit Board (Hub Mainframe)"
build_path = "/obj/machinery/telecomms/hub"
board_type = "machine"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
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/circuitboard/telecomms/relay
name = "Circuit Board (Relay Mainframe)"
build_path = "/obj/machinery/telecomms/relay"
board_type = "machine"
origin_tech = "programming=3;engineering=4;bluespace=3"
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
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/circuitboard/telecomms/bus
name = "Circuit Board (Bus Mainframe)"
build_path = "/obj/machinery/telecomms/bus"
board_type = "machine"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
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/circuitboard/telecomms/processor
name = "Circuit Board (Processor Unit)"
build_path = "/obj/machinery/telecomms/processor"
board_type = "machine"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
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/circuitboard/telecomms/server
name = "Circuit Board (Telecommunication Server)"
build_path = "/obj/machinery/telecomms/server"
board_type = "machine"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
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/circuitboard/telecomms/broadcaster
name = "Circuit Board (Subspace Broadcaster)"
build_path = "/obj/machinery/telecomms/broadcaster"
board_type = "machine"
origin_tech = "programming=4;engineering=4;bluespace=2"
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
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)

View File

@@ -381,7 +381,7 @@
// Delete the mob.
del(occupant)
occupant = null
name = initial(name)
return
@@ -442,7 +442,6 @@
src.add_fingerprint(M)
/obj/machinery/cryopod/verb/eject()
set name = "Eject Pod"
set category = "Object"
set src in oview(1)
@@ -464,6 +463,8 @@
src.go_out()
add_fingerprint(usr)
name = initial(name)
return
/obj/machinery/cryopod/verb/move_inside()
@@ -511,6 +512,7 @@
time_entered = world.time
src.add_fingerprint(usr)
name = "[name] ([usr.name])"
return

View File

@@ -1059,6 +1059,10 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null)
..()
//High-sec airlocks are much harder to completely break by emitters.
if(secured_wires)
emitter_resistance *= 3
//if assembly is given, create the new door from the assembly
if (assembly)
assembly_type = assembly.type

View File

@@ -25,6 +25,8 @@
var/air_properties_vary_with_direction = 0
var/maxhealth = 300
var/health
var/emitter_hits = 0 // For use when tracking amount of emitter hits taken.
var/emitter_resistance = 10 // Amount of emitter hits doors whistand
var/min_force = 10 //minimum amount of force needed to damage the door with a melee weapon
var/hitsound = 'sound/weapons/smash.ogg' //sound door makes when hit with a weapon
@@ -133,9 +135,22 @@
if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
return
// Emitter Blasts - these will eventually completely destroy the door, given enough time.
if (istype(Proj, /obj/item/projectile/beam/emitter))
if(health > 0)
Proj.damage /= 4
else
emitter_hits ++
if(emitter_hits >= emitter_resistance)
visible_message("\red <B>[src.name] breaks apart!</B>", 1)
new /obj/effect/decal/cleanable/ash(src.loc) // Turn it to ashes!
del(src)
if(Proj.damage)
take_damage(Proj.damage)
/obj/machinery/door/hitby(AM as mob|obj)
..()

View File

@@ -6,6 +6,7 @@
var/id = 1.0
dir = 1
explosion_resistance = 25
emitter_resistance = 50 // Lots of emitter blasts, it's blast door after all.
/obj/machinery/door/poddoor/New()
. = ..()
@@ -28,6 +29,7 @@
icon_state = "pdoor0"
return
/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user)
if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) ))

View File

@@ -81,13 +81,28 @@ var/const/HOLOPAD_MODE = 0
/*This is the proc for special two-way communication between AI and holopad/people talking near holopad.
For the other part of the code, check silicon say.dm. Particularly robot talk.*/
/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb)
/obj/machinery/hologram/holopad/hear_talk(mob/living/M, text, verb, datum/language/speaking)
if(M&&hologram&&master)//Master is mostly a safety in case lag hits or something.
if(!master.say_understands(M))//The AI will be able to understand most mobs talking through the holopad.
if(!master.say_understands(M, speaking))//The AI will be able to understand most mobs talking through the holopad.
if(speaking)
text = speaking.scramble(text)
else
text = stars(text)
var/name_used = M.GetVoice()
//This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only.
var/rendered = "<i><span class='game say'>Holopad received, <span class='name'>[name_used]</span> [verb], <span class='message'>\"[text]\"</span></span></i>"
var/rendered
if(speaking)
rendered = "<i><span class='game say'>Holopad received, <span class='name'>[name_used]</span> [speaking.format_message(text, verb)]</span></i>"
else
rendered = "<i><span class='game say'>Holopad received, <span class='name'>[name_used]</span> [verb], <span class='message'>\"[text]\"</span></span></i>"
master.show_message(rendered, 2)
return
/obj/machinery/hologram/holopad/see_emote(mob/living/M, text)
if(M && hologram && master)
//var/name_used = M.GetVoice()
var/rendered = "<i><span class='game say'>Holopad received, <span class='message'>[text]</span></span></i>"
//The lack of name_used is needed, because message already contains a name. This is needed for simple mobs to emote properly.
master.show_message(rendered, 2)
return

View File

@@ -129,8 +129,10 @@ Class Procs:
return 0
return apc.drain_power()
/obj/machinery/New()
..()
/obj/machinery/New(l, d=0)
..(l)
if(d)
set_dir(d)
if(!machinery_sort_required && ticker)
dd_insertObjectList(machines, src)
else
@@ -335,6 +337,7 @@ Class Procs:
/obj/machinery/proc/dismantle()
playsound(loc, 'sound/items/Crowbar.ogg', 50, 1)
var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(loc)
M.set_dir(src.dir)
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)

View File

@@ -1,5 +1,5 @@
/obj/machinery/computer/teleporter
name = "Teleporter"
name = "Teleporter Control Console"
desc = "Used to control a linked teleportation Hub and Station."
icon_state = "teleport"
circuit = "/obj/item/weapon/circuitboard/teleporter"

View File

@@ -1,6 +1,6 @@
/obj/item/mecha_parts/mecha_equipment/tool/sleeper
name = "Mounted Sleeper"
desc = "Mounted Sleeper. (Can be attached to: Medical Exosuits)"
name = "mounted sleeper"
desc = "A sleeper. Mountable to an exosuit. (Can be attached to: Medical Exosuits)"
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper_0"
origin_tech = "programming=2;biotech=3"
@@ -373,7 +373,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
name = "Syringe Gun"
name = "syringe gun"
desc = "Exosuit-mounted chem synthesizer with syringe gun. Reagents inside are held in stasis, so no reactions will occur. (Can be attached to: Medical Exosuits)"
icon = 'icons/obj/gun.dmi'
icon_state = "syringegun"

View File

@@ -1,5 +1,5 @@
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
name = "Hydraulic Clamp"
name = "hydraulic clamp"
icon_state = "mecha_clamp"
equip_cooldown = 15
energy_drain = 10
@@ -64,7 +64,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill
name = "Drill"
name = "drill"
desc = "This is the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_drill"
equip_cooldown = 30
@@ -115,7 +115,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
name = "Diamond Drill"
name = "diamond drill"
desc = "This is an upgraded version of the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_diamond_drill"
origin_tech = "materials=4;engineering=3"
@@ -166,7 +166,7 @@
return 1
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher
name = "Extinguisher"
name = "extinguisher"
desc = "Exosuit-mounted extinguisher (Can be attached to: Engineering exosuits)"
icon_state = "mecha_exting"
equip_cooldown = 5
@@ -240,7 +240,7 @@
/obj/item/mecha_parts/mecha_equipment/tool/rcd
name = "Mounted RCD"
name = "mounted RCD"
desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)"
icon_state = "mecha_rcd"
origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4"
@@ -345,7 +345,7 @@
/obj/item/mecha_parts/mecha_equipment/teleporter
name = "Teleporter"
name = "teleporter"
desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport"
origin_tech = "bluespace=10"
@@ -365,7 +365,7 @@
/obj/item/mecha_parts/mecha_equipment/wormhole_generator
name = "Wormhole Generator"
name = "wormhole generator"
desc = "An exosuit module that allows generating of small quasi-stable wormholes."
icon_state = "mecha_wholegen"
origin_tech = "bluespace=3"
@@ -415,7 +415,7 @@
return
/obj/item/mecha_parts/mecha_equipment/gravcatapult
name = "Gravitational Catapult"
name = "gravitational catapult"
desc = "An exosuit mounted Gravitational Catapult."
icon_state = "mecha_teleport"
origin_tech = "bluespace=2;magnets=3"
@@ -491,8 +491,8 @@
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants.
name = "Armor Booster Module (Close Combat Weaponry)"
desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate."
name = "\improper CCW armor booster"
desc = "Close-combat armor booster. Boosts exosuit armor against armed melee attacks. Requires energy to operate."
icon_state = "mecha_abooster_ccw"
origin_tech = "materials=3"
equip_cooldown = 10
@@ -541,8 +541,8 @@
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
name = "Armor Booster Module (Ranged Weaponry)"
desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate."
name = "\improper RW armor booster"
desc = "Ranged-weaponry armor booster. Boosts exosuit armor against ranged attacks. Completely blocks taser shots, but requires energy to operate."
icon_state = "mecha_abooster_proj"
origin_tech = "materials=4"
equip_cooldown = 10
@@ -612,8 +612,8 @@
/obj/item/mecha_parts/mecha_equipment/repair_droid
name = "Repair Droid"
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage."
name = "repair droid"
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost any type of external or internal damage."
icon_state = "repair_droid"
origin_tech = "magnets=3;programming=3"
equip_cooldown = 20
@@ -702,7 +702,7 @@
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
name = "Energy Relay"
name = "energy relay"
desc = "Wirelessly drains energy from any available power channel in area. The performance index is quite low."
icon_state = "tesla"
origin_tech = "magnets=4;syndicate=2"
@@ -814,7 +814,7 @@
/obj/item/mecha_parts/mecha_equipment/generator
name = "Phoron Generator"
name = "phoron generator"
desc = "Generates power using solid phoron as fuel. Pollutes the environment."
icon_state = "tesla"
origin_tech = "phorontech=2;powerstorage=2;engineering=1"
@@ -952,7 +952,7 @@
/obj/item/mecha_parts/mecha_equipment/generator/nuclear
name = "ExoNuclear Reactor"
name = "\improper ExoNuclear reactor"
desc = "Generates power using uranium. Pollutes the environment."
icon_state = "tesla"
origin_tech = "powerstorage=3;engineering=3"
@@ -989,7 +989,7 @@
//This is pretty much just for the death-ripley so that it is harmless
/obj/item/mecha_parts/mecha_equipment/tool/safety_clamp
name = "KILL CLAMP"
name = "\improper KILL CLAMP"
icon_state = "mecha_clamp"
equip_cooldown = 15
energy_drain = 0

View File

@@ -9,7 +9,7 @@
//NEEDS SPRITE! (When this gets ticked in search for 'TODO MECHA JETPACK SPRITE MISSING' through code to uncomment the place where it's missing.)
/obj/item/mecha_parts/mecha_equipment/jetpack
name = "Jetpack"
name = "jetpack"
desc = "Using directed ion bursts and cunning solar wind reflection technique, this device enables controlled space flight."
icon_state = "mecha_equip"
equip_cooldown = 5
@@ -108,7 +108,7 @@
/obj/item/mecha_parts/mecha_equipment/defence_shocker
name = "Exosuit Defence Shocker"
name = "exosuit defence shocker"
desc = ""
icon_state = "mecha_teleport"
equip_cooldown = 10

View File

@@ -58,12 +58,12 @@
P.process()
/obj/item/mecha_parts/mecha_equipment/weapon/energy
name = "General Energy Weapon"
name = "general energy weapon"
auto_rearm = 1
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
equip_cooldown = 8
name = "CH-PS \"Immolator\" Laser"
name = "\improper CH-PS \"Immolator\" laser"
icon_state = "mecha_laser"
energy_drain = 30
projectile = /obj/item/projectile/beam
@@ -71,7 +71,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
equip_cooldown = 30
name = "Jury-rigged Welder-Laser"
name = "jury-rigged welder-laser"
desc = "While not regulation, this inefficient weapon can be attached to working exo-suits in desperate, or malicious, times."
icon_state = "mecha_laser"
energy_drain = 80
@@ -81,7 +81,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
equip_cooldown = 15
name = "CH-LC \"Solaris\" Laser Cannon"
name = "\improper CH-LC \"Solaris\" laser cannon"
icon_state = "mecha_laser"
energy_drain = 60
projectile = /obj/item/projectile/beam/heavylaser
@@ -89,7 +89,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
equip_cooldown = 40
name = "mkIV Ion Heavy Cannon"
name = "mkIV ion heavy cannon"
icon_state = "mecha_ion"
energy_drain = 120
projectile = /obj/item/projectile/ion
@@ -97,7 +97,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
equip_cooldown = 30
name = "eZ-13 mk2 Heavy pulse rifle"
name = "eZ-13 mk2 heavy pulse rifle"
icon_state = "mecha_pulse"
energy_drain = 120
origin_tech = "materials=3;combat=6;powerstorage=4"
@@ -117,7 +117,7 @@
return
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
name = "PBT \"Pacifier\" Mounted Taser"
name = "\improper PBT \"Pacifier\" mounted taser"
icon_state = "mecha_taser"
energy_drain = 20
equip_cooldown = 8
@@ -126,7 +126,7 @@
/* Commenting this out rather than removing it because it may be useful for reference.
/obj/item/mecha_parts/mecha_equipment/weapon/honker
name = "HoNkER BlAsT 5000"
name = "\improper HoNkER BlAsT 5000"
icon_state = "mecha_honker"
energy_drain = 200
equip_cooldown = 150
@@ -164,17 +164,6 @@
M.Paralyse(4)
else
M.make_jittery(500)
/* //else the mousetraps are useless
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(isobj(H.shoes))
var/thingy = H.shoes
H.drop_from_inventory(H.shoes)
walk_away(thingy,chassis,15,2)
spawn(20)
if(thingy)
walk(thingy,0)
*/
chassis.use_power(energy_drain)
log_message("Honked from [src.name]. HONK!")
do_after_cooldown()
@@ -182,7 +171,7 @@
*/
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic
name = "General Ballisic Weapon"
name = "general ballisic weapon"
var/projectile_energy_cost
get_equip_info()
@@ -207,7 +196,7 @@
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
name = "LBX AC 10 \"Scattershot\""
name = "\improper LBX AC 10 \"Scattershot\""
icon_state = "mecha_scatter"
equip_cooldown = 20
projectile = /obj/item/projectile/bullet/midbullet
@@ -219,7 +208,7 @@
projectile_energy_cost = 25
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
name = "Ultra AC 2"
name = "\improper Ultra AC 2"
icon_state = "mecha_uac2"
equip_cooldown = 10
projectile = /obj/item/projectile/bullet/weakbullet
@@ -238,7 +227,7 @@
AM.throw_at(target,missile_range, missile_speed, chassis)
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/explosive
name = "SRM-8 Missile Rack"
name = "\improper SRM-8 missile rack"
icon_state = "mecha_missilerack"
projectile = /obj/item/missile
fire_sound = 'sound/effects/bang.ogg'
@@ -266,7 +255,7 @@
return
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
name = "SGL-6 Grenade Launcher"
name = "\improper SGL-6 grenade launcher"
icon_state = "mecha_grenadelnchr"
projectile = /obj/item/weapon/grenade/flashbang
fire_sound = 'sound/effects/bang.ogg'
@@ -283,7 +272,7 @@
F.prime()
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
name = "SOP-6 Grenade Launcher"
name = "\improper SOP-6 grenade launcher"
projectile = /obj/item/weapon/grenade/flashbang/clusterbang
construction_cost = list("metal"=20000,"gold"=6000,"uranium"=6000)

View File

@@ -190,45 +190,28 @@
var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src)
if(F)
F.init_devices()
ui_interact(user)
var/output = "<html><head><title>[src.name]</title></head><body>"
if(!recharge_floor)
output += "<font color='red'>Mech Bay Recharge Station not initialized.</font><br>"
/obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/list/data = list()
data["has_floor"] = recharge_floor
data["has_port"] = recharge_port
if(recharge_floor && recharge_floor.recharging_mecha && recharge_floor.recharging_mecha.cell)
data["has_mech"] = 1
data["mecha_name"] = recharge_floor.recharging_mecha || "None"
data["mecha_charge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.charge
data["mecha_maxcharge"] = isnull(recharge_floor.recharging_mecha) ? 0 : recharge_floor.recharging_mecha.cell.maxcharge
data["mecha_charge_percentage"] = isnull(recharge_floor.recharging_mecha) ? 0 : round(recharge_floor.recharging_mecha.cell.percent())
else
output += {"<b>Mech Bay Recharge Station Data:</b><div style='margin-left: 15px;'>
<b>Mecha: </b>[recharge_floor.recharging_mecha||"None"]<br>"}
if(recharge_floor.recharging_mecha)
var/cell_charge = recharge_floor.recharging_mecha.get_charge()
output += "<b>Cell charge: </b>[isnull(cell_charge)?"No powercell found":"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]"]<br>"
output += "</div>"
if(!recharge_port)
output += "<font color='red'>Mech Bay Power Port not initialized.</font><br>"
else
output += "<b>Mech Bay Power Port Status: </b>[recharge_port.active()?"Now charging":"On hold"]<br>"
/*
output += {"<hr>
<b>Settings:</b>
<div style='margin-left: 15px;'>
<b>Start sequence on succesful init: </b><a href='?src=\ref[src];autostart=1'>[autostart?"On":"Off"]</a><br>
<b>Recharge Port Voltage: </b><a href='?src=\ref[src];voltage=30'>Low</a> - <a href='?src=\ref[src];voltage=45'>Medium</a> - <a href='?src=\ref[src];voltage=60'>High</a><br>
</div>"}
*/
output += "</ body></html>"
user << browse(output, "window=mech_bay_console")
onclose(user, "mech_bay_console")
return
// unused at the moment, also lacks any kind of exploit prevention
/*
/obj/machinery/computer/mech_bay_power_console/Topic(href, href_list)
if(href_list["autostart"])
autostart = !autostart
if(href_list["voltage"])
voltage = text2num(href_list["voltage"])
if(recharge_port)
recharge_port.set_voltage(voltage)
updateUsrDialog()
return
*/
data["has_mech"] = 0
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
ui.open()
// auto update every Master Controller tick
ui.set_auto_update(1)

View File

@@ -203,6 +203,12 @@
radio.talk_into(M, text)
return
/obj/mecha/see_emote(mob/living/M, text)
if(occupant && occupant.client)
var/rendered = "<span class='message'>[text]</span>"
occupant.show_message(rendered, 2)
..()
////////////////////////////
///// Action processing ////
////////////////////////////

View File

@@ -2,6 +2,8 @@
////// Mecha Parts //////
/////////////////////////
// Mecha circuitboards can be found in /code/game/objects/items/weapons/circuitboards/mecha.dm
/obj/item/mecha_parts
name = "mecha part"
icon = 'icons/mecha/mech_construct.dmi'
@@ -347,90 +349,3 @@
origin_tech = "materials=3;engineering=3"
construction_time = 200
construction_cost = list("metal"=15000)*/
///////// Circuitboards
/obj/item/weapon/circuitboard/mecha
name = "Exosuit Circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
item_state = "electronic"
board_type = "other"
flags = FPRINT | TABLEPASS | CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
throw_speed = 3
throw_range = 15
ripley
origin_tech = "programming=3"
ripley/peripherals
name = "Circuit board (Ripley Peripherals Control module)"
icon_state = "mcontroller"
ripley/main
name = "Circuit board (Ripley Central Control module)"
icon_state = "mainboard"
gygax
origin_tech = "programming=4"
gygax/peripherals
name = "Circuit board (Gygax Peripherals Control module)"
icon_state = "mcontroller"
gygax/targeting
name = "Circuit board (Gygax Weapon Control and Targeting module)"
icon_state = "mcontroller"
origin_tech = "programming=4;combat=4"
gygax/main
name = "Circuit board (Gygax Central Control module)"
icon_state = "mainboard"
durand
origin_tech = "programming=4"
durand/peripherals
name = "Circuit board (Durand Peripherals Control module)"
icon_state = "mcontroller"
durand/targeting
name = "Circuit board (Durand Weapon Control and Targeting module)"
icon_state = "mcontroller"
origin_tech = "programming=4;combat=4"
durand/main
name = "Circuit board (Durand Central Control module)"
icon_state = "mainboard"
honker
origin_tech = "programming=4"
honker/peripherals
name = "Circuit board (H.O.N.K Peripherals Control module)"
icon_state = "mcontroller"
honker/targeting
name = "Circuit board (H.O.N.K Weapon Control and Targeting module)"
icon_state = "mcontroller"
honker/main
name = "Circuit board (H.O.N.K Central Control module)"
icon_state = "mainboard"
odysseus
origin_tech = "programming=3"
odysseus/peripherals
name = "Circuit board (Odysseus Peripherals Control module)"
icon_state = "mcontroller"
odysseus/main
name = "Circuit board (Odysseus Central Control module)"
icon_state = "mainboard"

View File

@@ -1,23 +1,28 @@
/obj/effect/decal/remains/human
/obj/effect/decal/remains
name = "remains"
desc = "They look like human remains. They have a strange aura about them."
gender = PLURAL
icon = 'icons/effects/blood.dmi'
icon_state = "remains"
anchored = 1
anchored = 0
/obj/effect/decal/remains/human
desc = "They look like human remains. They have a strange aura about them."
/obj/effect/decal/remains/xeno
name = "remains"
desc = "They look like the remains of something... alien. They have a strange aura about them."
gender = PLURAL
icon = 'icons/effects/blood.dmi'
icon_state = "remainsxeno"
anchored = 1
/obj/effect/decal/remains/robot
name = "remains"
desc = "They look like the remains of something mechanical. They have a strange aura about them."
gender = PLURAL
icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot"
anchored = 1
/obj/effect/decal/remains/attack_hand(mob/user as mob)
user << "<span class='notice'>[src] sinks together into a pile of ash.</span>"
var/turf/simulated/floor/F = get_turf(src)
if (istype(F))
new /obj/effect/decal/cleanable/ash(F)
del(src)
/obj/effect/decal/remains/robot/attack_hand(mob/user as mob)
return

View File

@@ -1,7 +1,7 @@
// APC HULL
/obj/item/apc_frame
name = "APC frame"
name = "\improper APC frame"
desc = "Used for repairing or building APCs"
icon = 'icons/obj/apc_repair.dmi'
icon_state = "apc_frame"

View File

@@ -2,7 +2,7 @@
//Illicit drugs~
/obj/item/weapon/storage/pill_bottle/happy
name = "Happy pills"
name = "bottle of Happy pills"
desc = "Highly illegal drug. When you want to see the rainbow."
/obj/item/weapon/storage/pill_bottle/happy/New()
@@ -16,7 +16,7 @@
new /obj/item/weapon/reagent_containers/pill/happy( src )
/obj/item/weapon/storage/pill_bottle/zoom
name = "Zoom pills"
name = "bottle of Zoom pills"
desc = "Highly illegal drug. Trade brain for speed."
/obj/item/weapon/storage/pill_bottle/zoom/New()

View File

@@ -4,7 +4,7 @@
var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda
name = "PDA"
name = "\improper PDA"
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
icon = 'icons/obj/pda.dmi'
icon_state = "pda"
@@ -1391,7 +1391,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
//Some spare PDAs in a box
/obj/item/weapon/storage/box/PDAs
name = "spare PDAs"
name = "box of spare PDAs"
desc = "A box of spare PDA microcomputers."
icon = 'icons/obj/pda.dmi'
icon_state = "pdabox"

View File

@@ -35,27 +35,27 @@
var/list/stored_data = list()
/obj/item/weapon/cartridge/engineering
name = "Power-ON Cartridge"
name = "\improper Power-ON cartridge"
icon_state = "cart-e"
access_engine = 1
/obj/item/weapon/cartridge/atmos
name = "BreatheDeep Cartridge"
name = "\improper BreatheDeep cartridge"
icon_state = "cart-a"
access_atmos = 1
/obj/item/weapon/cartridge/medical
name = "Med-U Cartridge"
name = "\improper Med-U cartridge"
icon_state = "cart-m"
access_medical = 1
/obj/item/weapon/cartridge/chemistry
name = "ChemWhiz Cartridge"
name = "\improper ChemWhiz cartridge"
icon_state = "cart-chem"
access_reagent_scanner = 1
/obj/item/weapon/cartridge/security
name = "R.O.B.U.S.T. Cartridge"
name = "\improper R.O.B.U.S.T. cartridge"
icon_state = "cart-s"
access_security = 1
@@ -65,31 +65,31 @@
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/detective
name = "D.E.T.E.C.T. Cartridge"
name = "\improper D.E.T.E.C.T. cartridge"
icon_state = "cart-s"
access_security = 1
access_medical = 1
/obj/item/weapon/cartridge/janitor
name = "CustodiPRO Cartridge"
name = "\improper CustodiPRO cartridge"
desc = "The ultimate in clean-room design."
icon_state = "cart-j"
access_janitor = 1
/obj/item/weapon/cartridge/lawyer
name = "P.R.O.V.E. Cartridge"
name = "\improper P.R.O.V.E. cartridge"
icon_state = "cart-s"
access_security = 1
/obj/item/weapon/cartridge/clown
name = "Honkworks 5.0"
name = "\improper Honkworks 5.0 cartridge"
icon_state = "cart-clown"
access_clown = 1
charges = 5
/obj/item/weapon/cartridge/mime
name = "Gestur-O 1000"
name = "\improper Gestur-O 1000 cartridge"
icon_state = "cart-mi"
access_mime = 1
charges = 5
@@ -105,7 +105,7 @@
desc = "A data cartridge with an integrated radio signaler module."
/obj/item/weapon/cartridge/signal/science
name = "Signal Ace 2"
name = "\improper Signal Ace 2 cartridge"
desc = "Complete with integrated radio signaler!"
icon_state = "cart-tox"
access_reagent_scanner = 1
@@ -119,7 +119,7 @@
/obj/item/weapon/cartridge/quartermaster
name = "Space Parts & Space Vendors Cartridge"
name = "\improper Space Parts & Space Vendors cartridge"
desc = "Perfect for the Quartermaster on the go!"
icon_state = "cart-q"
access_quartermaster = 1
@@ -130,12 +130,12 @@
radio = new /obj/item/radio/integrated/mule(src)
/obj/item/weapon/cartridge/head
name = "Easy-Record DELUXE"
name = "\improper Easy-Record DELUXE"
icon_state = "cart-h"
access_status_display = 1
/obj/item/weapon/cartridge/hop
name = "HumanResources9001"
name = "\improper HumanResources9001 cartridge"
icon_state = "cart-h"
access_status_display = 1
access_quartermaster = 1
@@ -148,7 +148,7 @@
radio = new /obj/item/radio/integrated/mule(src)
/obj/item/weapon/cartridge/hos
name = "R.O.B.U.S.T. DELUXE"
name = "\improper R.O.B.U.S.T. DELUXE"
icon_state = "cart-hos"
access_status_display = 1
access_security = 1
@@ -159,21 +159,21 @@
radio = new /obj/item/radio/integrated/beepsky(src)
/obj/item/weapon/cartridge/ce
name = "Power-On DELUXE"
name = "\improper Power-On DELUXE"
icon_state = "cart-ce"
access_status_display = 1
access_engine = 1
access_atmos = 1
/obj/item/weapon/cartridge/cmo
name = "Med-U DELUXE"
name = "\improper Med-U DELUXE"
icon_state = "cart-cmo"
access_status_display = 1
access_reagent_scanner = 1
access_medical = 1
/obj/item/weapon/cartridge/rd
name = "Signal Ace DELUXE"
name = "\improper Signal Ace DELUXE"
icon_state = "cart-rd"
access_status_display = 1
access_reagent_scanner = 1
@@ -185,7 +185,7 @@
radio = new /obj/item/radio/integrated/signal(src)
/obj/item/weapon/cartridge/captain
name = "Value-PAK Cartridge"
name = "\improper Value-PAK cartridge"
desc = "Now with 200% more value!"
icon_state = "cart-c"
access_quartermaster = 1
@@ -198,7 +198,7 @@
access_atmos = 1
/obj/item/weapon/cartridge/syndicate
name = "Detomatix Cartridge"
name = "\improper Detomatix cartridge"
icon_state = "cart"
access_remote_door = 1
access_detonate_pda = 1

View File

@@ -1,5 +1,5 @@
/obj/item/radio/integrated
name = "PDA radio module"
name = "\improper PDA radio module"
desc = "An electronic radio system of nanotrasen origin."
icon = 'icons/obj/module.dmi'
icon_state = "power_mod"

View File

@@ -9,6 +9,8 @@
var/flush = null
origin_tech = "programming=4;materials=4"
var/mob/living/silicon/ai/carded_ai
/obj/item/device/aicard/attack(mob/living/silicon/decoy/M as mob, mob/user as mob)
if (!istype (M, /mob/living/silicon/decoy))
return ..()
@@ -151,6 +153,8 @@
ai.control_disabled = 1
ai.aiRestorePowerRoutine = 0
ai.aiRadio.disabledAi = 1
carded_ai = ai
ai.attack_log += text("\[[time_stamp()]\] <font color='orange'>Has been carded with [src.name] by [user.name] ([user.ckey])</font>")
user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to card [ai.name] ([ai.ckey])</font>")
@@ -166,7 +170,14 @@
/obj/item/device/aicard/proc/clear()
name = "inteliCard"
carded_ai = null
update_icon()
/obj/item/device/aicard/see_emote(mob/living/M, text)
if(carded_ai && carded_ai.client)
var/rendered = "<span class='message'>[text]</span>"
carded_ai.show_message(rendered, 2)
..()
/*
/obj/item/device/aicard/relaymove(var/mob/user, var/direction)
if(src.loc && istype(src.loc.loc, /obj/item/rig_module))

View File

@@ -1,5 +1,5 @@
/obj/item/device/chameleon
name = "chameleon-projector"
name = "chameleon projector"
icon_state = "shield0"
flags = FPRINT | TABLEPASS| CONDUCT
slot_flags = SLOT_BELT

View File

@@ -5,9 +5,9 @@
*/
/obj/item/device/debugger
icon = 'icons/obj/hacktool.dmi'
name = "debugger"
desc = "Used to debug electronic equipment."
icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g"
flags = FPRINT | TABLEPASS| CONDUCT
force = 5.0

View File

@@ -304,10 +304,15 @@
/obj/item/device/paicard/emp_act(severity)
for(var/mob/M in src)
M.emp_act(severity)
..()
/obj/item/device/paicard/ex_act(severity)
if(pai)
pai.ex_act(severity)
else
del(src)
/obj/item/device/paicard/see_emote(mob/living/M, text)
if(pai && pai.client)
var/rendered = "<span class='message'>[text]</span>"
pai.show_message(rendered, 2)
..()

View File

@@ -1,8 +1,8 @@
// Powersink - used to drain station power
/obj/item/device/powersink
desc = "A nulling power sink which drains energy from electrical systems."
name = "power sink"
desc = "A nulling power sink which drains energy from electrical systems."
icon_state = "powersink0"
item_state = "electronic"
w_class = 4.0

View File

@@ -1,5 +1,5 @@
/obj/item/device/radio/beacon
name = "Tracking Beacon"
name = "tracking beacon"
desc = "A beacon used by a teleporter."
icon_state = "beacon"
item_state = "signaler"

View File

@@ -1,6 +1,6 @@
/obj/item/device/encryptionkey/
name = "Standard Encrpytion Key"
name = "standard encrpytion key"
desc = "An encryption key for a radio headset. Contains cypherkeys."
icon = 'icons/obj/radio.dmi'
icon_state = "cypherkey"
@@ -28,96 +28,96 @@
origin_tech = "syndicate=3"
/obj/item/device/encryptionkey/headset_sec
name = "Security Radio Encryption Key"
name = "security radio encryption key"
icon_state = "sec_cypherkey"
channels = list("Security" = 1)
/obj/item/device/encryptionkey/headset_eng
name = "Engineering Radio Encryption Key"
name = "engineering radio encryption key"
icon_state = "eng_cypherkey"
channels = list("Engineering" = 1)
/obj/item/device/encryptionkey/headset_rob
name = "Robotics Radio Encryption Key"
name = "robotics radio encryption key"
icon_state = "rob_cypherkey"
channels = list("Engineering" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_med
name = "Medical Radio Encryption Key"
name = "medical radio encryption key"
icon_state = "med_cypherkey"
channels = list("Medical" = 1)
/obj/item/device/encryptionkey/headset_sci
name = "Science Radio Encryption Key"
name = "science radio encryption key"
icon_state = "sci_cypherkey"
channels = list("Science" = 1)
/obj/item/device/encryptionkey/headset_medsci
name = "Medical Research Radio Encryption Key"
name = "medical research radio encryption key"
icon_state = "medsci_cypherkey"
channels = list("Medical" = 1, "Science" = 1)
/obj/item/device/encryptionkey/headset_com
name = "Command Radio Encryption Key"
name = "command radio encryption key"
icon_state = "com_cypherkey"
channels = list("Command" = 1)
/obj/item/device/encryptionkey/heads/captain
name = "Captain's Encryption Key"
name = "captain's encryption key"
icon_state = "cap_cypherkey"
channels = list("Command" = 1, "Security" = 1, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0)
/obj/item/device/encryptionkey/heads/ai_integrated
name = "AI Integrated Encryption Key"
name = "ai integrated encryption key"
desc = "Integrated encryption key"
icon_state = "cap_cypherkey"
channels = list("Command" = 1, "Security" = 1, "Engineering" = 1, "Science" = 1, "Medical" = 1, "Supply" = 1, "Service" = 1, "AI Private" = 1)
/obj/item/device/encryptionkey/heads/rd
name = "Research Director's Encryption Key"
name = "research director's encryption key"
icon_state = "rd_cypherkey"
channels = list("Science" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hos
name = "Head of Security's Encryption Key"
name = "head of security's encryption key"
icon_state = "hos_cypherkey"
channels = list("Security" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/ce
name = "Chief Engineer's Encryption Key"
name = "chief engineer's encryption key"
icon_state = "ce_cypherkey"
channels = list("Engineering" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/cmo
name = "Chief Medical Officer's Encryption Key"
name = "chief medical officer's encryption key"
icon_state = "cmo_cypherkey"
channels = list("Medical" = 1, "Command" = 1)
/obj/item/device/encryptionkey/heads/hop
name = "Head of Personnel's Encryption Key"
name = "head of personnel's encryption key"
icon_state = "hop_cypherkey"
channels = list("Supply" = 1, "Service" = 1, "Command" = 1, "Security" = 0)
/*
/obj/item/device/encryptionkey/headset_mine
name = "Mining Radio Encryption Key"
name = "mining radio encryption key"
icon_state = "mine_cypherkey"
channels = list("Mining" = 1)
/obj/item/device/encryptionkey/heads/qm
name = "Quartermaster's Encryption Key"
name = "quartermaster's encryption key"
icon_state = "qm_cypherkey"
channels = list("Cargo" = 1, "Mining" = 1)
*/
/obj/item/device/encryptionkey/headset_cargo
name = "Supply Radio Encryption Key"
name = "supply radio encryption key"
icon_state = "cargo_cypherkey"
channels = list("Supply" = 1)
/obj/item/device/encryptionkey/headset_service
name = "Service Radio Encryption Key"
name = "service radio encryption key"
icon_state = "srv_cypherkey"
channels = list("Service" = 1)
/obj/item/device/encryptionkey/ert
name = "NanoTrasen ERT Radio Encryption Key"
name = "\improper NanoTrasen ERT radio encryption key"
channels = list("Response Team" = 1, "Science" = 1, "Command" = 1, "Medical" = 1, "Engineering" = 1, "Security" = 1, "Supply" = 1, "Service" = 1)

View File

@@ -120,7 +120,7 @@
ks2type = /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
name = "AI Subspace Transceiver"
name = "\improper AI subspace transceiver"
desc = "Integrated AI radio transceiver."
icon = 'icons/obj/robot_component.dmi'
icon_state = "radio"
@@ -135,7 +135,7 @@
return ..(freq, level, 1)
/obj/item/device/radio/headset/heads/rd
name = "Research Director's headset"
name = "research director's headset"
desc = "Headset of the researching God."
icon_state = "com_headset"
item_state = "headset"
@@ -198,7 +198,7 @@
ks2type = /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/ert
name = "CentCom Response Team headset"
name = "emergency response team radio headset"
desc = "The headset of the boss's boss."
icon_state = "com_headset"
item_state = "headset"

View File

@@ -9,7 +9,7 @@ MASS SPECTROMETER
REAGENT SCANNER
*/
/obj/item/device/t_scanner
name = "T-ray scanner"
name = "\improper T-ray scanner"
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
icon_state = "t-ray0"
var/on = 0
@@ -65,10 +65,10 @@ REAGENT SCANNER
/obj/item/device/healthanalyzer
name = "Health Analyzer"
name = "health analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon_state = "health"
item_state = "analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
flags = FPRINT | TABLEPASS | CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
@@ -227,8 +227,8 @@ REAGENT SCANNER
/obj/item/device/analyzer
desc = "A hand-held environmental scanner which reports current gas levels."
name = "analyzer"
desc = "A hand-held environmental scanner which reports current gas levels."
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
@@ -274,8 +274,8 @@ REAGENT SCANNER
return
/obj/item/device/mass_spectrometer
name = "mass spectrometer"
desc = "A hand-held mass spectrometer which identifies trace chemicals in a blood sample."
name = "mass-spectrometer"
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
@@ -342,7 +342,7 @@ REAGENT SCANNER
return
/obj/item/device/mass_spectrometer/adv
name = "advanced mass-spectrometer"
name = "advanced mass spectrometer"
icon_state = "adv_spectrometer"
details = 1
origin_tech = "magnets=4;biotech=2"

View File

@@ -1,6 +1,6 @@
/obj/item/device/taperecorder
desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
name = "universal recorder"
desc = "A device that can record up to an hour of dialogue and play it back. It automatically translates the content in playback."
icon_state = "taperecorderidle"
item_state = "analyzer"
w_class = 2.0

View File

@@ -29,7 +29,6 @@ effective or pretty fucking useless.
var/times_used = 0 //Number of times it's been used.
var/max_uses = 2
/obj/item/device/batterer/attack_self(mob/living/carbon/user as mob, flag = 0, emp = 0)
if(!user) return
if(times_used >= max_uses)
@@ -55,7 +54,3 @@ effective or pretty fucking useless.
times_used += 1
if(times_used >= max_uses)
icon_state = "battererburnt"

View File

@@ -1,8 +1,8 @@
/obj/item/device/transfer_valve
icon = 'icons/obj/assemblies.dmi'
name = "tank transfer valve"
icon_state = "valve_1"
desc = "Regulates the transfer of air between two tanks"
icon = 'icons/obj/assemblies.dmi'
icon_state = "valve_1"
var/obj/item/weapon/tank/tank_one
var/obj/item/weapon/tank/tank_two
var/obj/item/device/attached_device

View File

@@ -146,7 +146,7 @@ datum/nano_item_lists
*/
/obj/item/device/uplink/hidden
name = "Hidden Uplink."
name = "hidden uplink"
desc = "There is something wrong if you're examining this."
var/active = 0

View File

@@ -1,6 +1,6 @@
/obj/item/latexballon
name = "Latex glove"
desc = "" //todo
name = "latex glove"
desc = "A latex glove, usually used as a balloon."
icon_state = "latexballon"
item_state = "lgloves"
force = 0

View File

@@ -40,7 +40,7 @@
/obj/item/borg/sight/xray
name = "\proper x-ray Vision"
name = "\proper x-ray vision"
sight_mode = BORGXRAY

View File

@@ -113,7 +113,7 @@
* Fake singularity
*/
/obj/item/toy/spinningtoy
name = "Gravitational Singularity"
name = "gravitational singularity"
desc = "\"Singulo\" brand spinning toy."
icon = 'icons/obj/singularity.dmi'
icon_state = "singularity_s1"
@@ -420,7 +420,7 @@
* Water flower
*/
/obj/item/toy/waterflower
name = "Water Flower"
name = "water flower"
desc = "A seemingly innocent sunflower...with a twist."
icon = 'icons/obj/harvest.dmi'
icon_state = "sunflower"

View File

@@ -6,50 +6,65 @@
icon = 'icons/obj/trash.dmi'
w_class = 2.0
desc = "This is rubbish."
raisins
name = "4no raisins"
/obj/item/trash/raisins
name = "\improper 4no raisins"
icon_state= "4no_raisins"
candy
name = "Candy"
/obj/item/trash/candy
name = "candy"
icon_state= "candy"
cheesie
name = "Cheesie honkers"
/obj/item/trash/cheesie
name = "\improper Cheesie Honkers"
icon_state = "cheesie_honkers"
chips
name = "Chips"
/obj/item/trash/chips
name = "chips"
icon_state = "chips"
popcorn
name = "Popcorn"
/obj/item/trash/popcorn
name = "popcorn"
icon_state = "popcorn"
sosjerky
/obj/item/trash/sosjerky
name = "Scaredy's Private Reserve Beef Jerky"
icon_state = "sosjerky"
syndi_cakes
name = "Syndi cakes"
/obj/item/trash/syndi_cakes
name = "syndi cakes"
icon_state = "syndi_cakes"
waffles
name = "Waffles"
/obj/item/trash/waffles
name = "waffles"
icon_state = "waffles"
plate
name = "Plate"
/obj/item/trash/plate
name = "plate"
icon_state = "plate"
snack_bowl
name = "Snack bowl"
/obj/item/trash/snack_bowl
name = "snack bowl"
icon_state = "snack_bowl"
pistachios
name = "Pistachios pack"
/obj/item/trash/pistachios
name = "pistachios pack"
icon_state = "pistachios_pack"
semki
name = "Semki pack"
/obj/item/trash/semki
name = "semki pack"
icon_state = "semki_pack"
tray
name = "Tray"
/obj/item/trash/tray
name = "tray"
icon_state = "tray"
candle
/obj/item/trash/candle
name = "candle"
icon = 'icons/obj/candle.dmi'
icon_state = "candle4"
liquidfood
/obj/item/trash/liquidfood
name = "\improper \"LiquidFood\" ration"
icon_state = "liquidfood"

View File

@@ -1,6 +1,6 @@
//Contains the rapid construction device.
/obj/item/weapon/rcd
name = "rapid-construction-device (RCD)"
name = "rapid construction device (RCD)"
desc = "A device used to rapidly build walls and floors."
icon = 'icons/obj/items.dmi'
icon_state = "rcd"

View File

@@ -0,0 +1,6 @@
/obj/item/weapon/circuitboard/broken
name = "broken electronics"
icon = 'icons/obj/doors/door_assembly.dmi'
icon_state = "door_electronics_smoked"
origin_tech = null
board_type = "other"

View File

@@ -0,0 +1,38 @@
//Define a macro that we can use to assemble all the circuit board names
#ifdef T_BOARD
#error T_BOARD already defined elsewhere, we can't use it.
#endif
#define T_BOARD(name) "circuit board (" + (name) + ")"
/obj/item/weapon/circuitboard
name = "circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "id_mod"
item_state = "electronic"
origin_tech = "programming=2"
density = 0
anchored = 0
w_class = 2.0
flags = FPRINT | TABLEPASS | CONDUCT
force = 5.0
throwforce = 5.0
throw_speed = 3
throw_range = 15
var/build_path = null
var/board_type = "computer"
var/list/req_components = null
var/frame_desc = null
var/contain_parts = 1
//Called when the circuitboard is used to contruct a new machine.
/obj/item/weapon/circuitboard/proc/construct(var/obj/machinery/M)
if (istype(M, build_path))
return 1
return 0
//Called when a computer is deconstructed to produce a circuitboard.
//Only used by computers, as other machines store their circuitboard instance.
/obj/item/weapon/circuitboard/proc/deconstruct(var/obj/machinery/M)
if (istype(M, build_path))
return 1
return 0

View File

@@ -0,0 +1,27 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/air_management
name = T_BOARD("atmosphere monitoring console")
build_path = /obj/machinery/computer/general_air_control
var/frequency = 1439
/obj/item/weapon/circuitboard/air_management/tank_control
name = T_BOARD("tank control")
build_path = /obj/machinery/computer/general_air_control/large_tank_control
frequency = 1441
/obj/item/weapon/circuitboard/air_management/supermatter_core
name = T_BOARD("core control")
build_path = /obj/machinery/computer/general_air_control/supermatter_core
frequency = 1438
/obj/item/weapon/circuitboard/air_management/injector_control
name = T_BOARD("injector control")
build_path = /obj/machinery/computer/general_air_control/fuel_injection
/obj/item/weapon/circuitboard/air_management/construct(var/obj/machinery/computer/general_air_control/C)
if (..(C))
C.frequency = frequency
/obj/item/weapon/circuitboard/air_management/deconstruct(var/obj/machinery/computer/general_air_control/C)
if (..(C))
frequency = C.frequency

View File

@@ -0,0 +1,65 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/security
name = T_BOARD("security camera monitor")
build_path = /obj/machinery/computer/security
var/network = list("SS13")
req_access = list(access_security)
var/locked = 1
var/emagged = 0
/obj/item/weapon/circuitboard/security/engineering
name = T_BOARD("engineering camera monitor")
build_path = /obj/machinery/computer/security/engineering
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
req_access = list()
/obj/item/weapon/circuitboard/security/mining
name = T_BOARD("mining camera monitor")
build_path = /obj/machinery/computer/security/mining
network = list("MINE")
req_access = list()
/obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C)
if (..(C))
C.network = network
/obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C)
if (..(C))
network = C.network
/obj/item/weapon/circuitboard/security/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/card/emag))
if(emagged)
user << "Circuit lock is already removed."
return
user << "\blue You override the circuit lock and open controls."
emagged = 1
locked = 0
else if(istype(I,/obj/item/weapon/card/id))
if(emagged)
user << "\red Circuit lock does not respond."
return
if(check_access(I))
locked = !locked
user << "\blue You [locked ? "" : "un"]lock the circuit controls."
else
user << "\red Access denied."
else if(istype(I,/obj/item/device/multitool))
if(locked)
user << "\red Circuit controls are locked."
return
var/existing_networks = list2text(network,",")
var/input = strip_html(input(usr, "Which networks would you like to connect this camera console circuit to? Seperate networks with a comma. No Spaces!\nFor example: SS13,Security,Secret ", "Multitool-Circuitboard interface", existing_networks))
if(!input)
usr << "No input found please hang up and try your call again."
return
var/list/tempnetwork = text2list(input, ",")
tempnetwork = difflist(tempnetwork,RESTRICTED_CAMERA_NETWORKS,1)
if(tempnetwork.len < 1)
usr << "No network found please hang up and try your call again."
return
network = tempnetwork
return

View File

@@ -0,0 +1,190 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/message_monitor
name = T_BOARD("message monitor console")
build_path = /obj/machinery/computer/message_monitor
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/aiupload
name = T_BOARD("AI upload console")
build_path = /obj/machinery/computer/aiupload
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/borgupload
name = T_BOARD("cyborg upload console")
build_path = /obj/machinery/computer/borgupload
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/med_data
name = T_BOARD("medical records console")
build_path = /obj/machinery/computer/med_data
/obj/item/weapon/circuitboard/pandemic
name = T_BOARD("PanD.E.M.I.C. 2200")
build_path = /obj/machinery/computer/pandemic
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/scan_consolenew
name = T_BOARD("DNA machine")
build_path = /obj/machinery/computer/scan_consolenew
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/communications
name = T_BOARD("command and communications console")
build_path = /obj/machinery/computer/communications
origin_tech = "programming=2;magnets=2"
/obj/item/weapon/circuitboard/card
name = T_BOARD("ID card modification console")
build_path = /obj/machinery/computer/card
/obj/item/weapon/circuitboard/card/centcom
name = T_BOARD("CentCom ID card modification console")
build_path = /obj/machinery/computer/card/centcom
/obj/item/weapon/circuitboard/teleporter
name = T_BOARD("teleporter control console")
build_path = /obj/machinery/computer/teleporter
origin_tech = "programming=2;bluespace=2"
/obj/item/weapon/circuitboard/secure_data
name = T_BOARD("security records console")
build_path = /obj/machinery/computer/secure_data
/obj/item/weapon/circuitboard/skills
name = T_BOARD("employment records console")
build_path = /obj/machinery/computer/skills
/obj/item/weapon/circuitboard/stationalert
name = T_BOARD("station alert console")
build_path = /obj/machinery/computer/station_alert
/obj/item/weapon/circuitboard/atmos_alert
name = T_BOARD("atmospheric alert console")
build_path = /obj/machinery/computer/atmos_alert
/obj/item/weapon/circuitboard/pod
name = T_BOARD("massdriver control")
build_path = /obj/machinery/computer/pod
/obj/item/weapon/circuitboard/robotics
name = T_BOARD("robotics control console")
build_path = /obj/machinery/computer/robotics
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/drone_control
name = T_BOARD("drone control console")
build_path = /obj/machinery/computer/drone_control
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/cloning
name = T_BOARD("cloning control console")
build_path = /obj/machinery/computer/cloning
origin_tech = "programming=3;biotech=3"
/obj/item/weapon/circuitboard/arcade
name = T_BOARD("arcade machine")
build_path = /obj/machinery/computer/arcade
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/turbine_control
name = T_BOARD("turbine control console")
build_path = /obj/machinery/computer/turbine_computer
/obj/item/weapon/circuitboard/solar_control
name = T_BOARD("solar control console")
build_path = /obj/machinery/power/solar_control
origin_tech = "programming=2;powerstorage=2"
/obj/item/weapon/circuitboard/powermonitor
name = T_BOARD("power monitoring console")
build_path = /obj/machinery/computer/power_monitor
/obj/item/weapon/circuitboard/olddoor
name = T_BOARD("DoorMex")
build_path = /obj/machinery/computer/pod/old
/obj/item/weapon/circuitboard/syndicatedoor
name = T_BOARD("ProComp Executive")
build_path = /obj/machinery/computer/pod/old/syndicate
/obj/item/weapon/circuitboard/swfdoor
name = T_BOARD("Magix")
build_path = /obj/machinery/computer/pod/old/swf
/obj/item/weapon/circuitboard/prisoner
name = T_BOARD("prisoner management console")
build_path = /obj/machinery/computer/prisoner
/obj/item/weapon/circuitboard/mecha_control
name = T_BOARD("exosuit control console")
build_path = /obj/machinery/computer/mecha
/obj/item/weapon/circuitboard/rdservercontrol
name = T_BOARD("R&D server control console")
build_path = /obj/machinery/computer/rdservercontrol
/obj/item/weapon/circuitboard/crew
name = T_BOARD("crew monitoring console")
build_path = /obj/machinery/computer/crew
origin_tech = "programming=3;biotech=2;magnets=2"
/obj/item/weapon/circuitboard/mech_bay_power_console
name = T_BOARD("mech bay power control console")
build_path = /obj/machinery/computer/mech_bay_power_console
origin_tech = "programming=2;powerstorage=3"
/obj/item/weapon/circuitboard/operating
name = T_BOARD("patient monitoring console")
build_path = /obj/machinery/computer/operating
origin_tech = "programming=2;biotech=2"
/obj/item/weapon/circuitboard/curefab
name = T_BOARD("cure fabricator")
build_path = /obj/machinery/computer/curer
/obj/item/weapon/circuitboard/splicer
name = T_BOARD("disease splicer")
build_path = /obj/machinery/computer/diseasesplicer
/obj/item/weapon/circuitboard/ordercomp
name = T_BOARD("supply ordering console")
build_path = /obj/machinery/computer/ordercomp
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/mining_shuttle
name = T_BOARD("mining shuttle console")
build_path = /obj/machinery/computer/shuttle_control/mining
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/engineering_shuttle
name = T_BOARD("engineering shuttle console")
build_path = /obj/machinery/computer/shuttle_control/engineering
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/research_shuttle
name = T_BOARD("research shuttle console")
build_path = /obj/machinery/computer/shuttle_control/research
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/aifixer
name = T_BOARD("AI integrity restorer")
build_path = /obj/machinery/computer/aifixer
origin_tech = "programming=3;biotech=2"
/obj/item/weapon/circuitboard/area_atmos
name = T_BOARD("area air control console")
build_path = /obj/machinery/computer/area_atmos
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/prison_shuttle
name = T_BOARD("prison shuttle control console")
build_path = /obj/machinery/computer/prison_shuttle
origin_tech = "programming=2"
/obj/item/weapon/circuitboard/rcon_console
name = T_BOARD("RCON remote control console")
build_path = /obj/machinery/computer/rcon
origin_tech = "programming=4;engineering=3;powerstorage=5"

View File

@@ -0,0 +1,20 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/rdconsole
name = T_BOARD("R&D control console")
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/rdconsole/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/weapon/screwdriver))
user.visible_message("\blue \the [user] adjusts the jumper on the [src]'s access protocol pins.", "\blue You adjust the jumper on the access protocol pins.")
if(src.build_path == /obj/machinery/computer/rdconsole/core)
src.name = T_BOARD("RD Console - Robotics")
src.build_path = /obj/machinery/computer/rdconsole/robotics
user << "\blue Access protocols set to robotics."
else
src.name = T_BOARD("RD Console")
src.build_path = /obj/machinery/computer/rdconsole/core
user << "\blue Access protocols set to default."
return

View File

@@ -0,0 +1,39 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/supplycomp
name = T_BOARD("supply control console")
build_path = /obj/machinery/computer/supplycomp
origin_tech = "programming=3"
var/contraband_enabled = 0
/obj/item/weapon/circuitboard/supplycomp/construct(var/obj/machinery/computer/supplycomp/SC)
if (..(SC))
SC.can_order_contraband = contraband_enabled
/obj/item/weapon/circuitboard/supplycomp/deconstruct(var/obj/machinery/computer/supplycomp/SC)
if (..(SC))
contraband_enabled = SC.can_order_contraband
/obj/item/weapon/circuitboard/supplycomp/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I,/obj/item/device/multitool))
var/catastasis = src.contraband_enabled
var/opposite_catastasis
if(catastasis)
opposite_catastasis = "STANDARD"
catastasis = "BROAD"
else
opposite_catastasis = "BROAD"
catastasis = "STANDARD"
switch( alert("Current receiver spectrum is set to: [catastasis]","Multitool-Circuitboard interface","Switch to [opposite_catastasis]","Cancel") )
//switch( alert("Current receiver spectrum is set to: " {(src.contraband_enabled) ? ("BROAD") : ("STANDARD")} , "Multitool-Circuitboard interface" , "Switch to " {(src.contraband_enabled) ? ("STANDARD") : ("BROAD")}, "Cancel") )
if("Switch to STANDARD","Switch to BROAD")
src.contraband_enabled = !src.contraband_enabled
if("Cancel")
return
else
user << "DERP! BUG! Report this (And what you were doing to cause it) to Agouri"
return

View File

@@ -0,0 +1,18 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/comm_monitor
name = T_BOARD("telecommunications monitor console")
build_path = /obj/machinery/computer/telecomms/monitor
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/comm_server
name = T_BOARD("telecommunications server monitor console")
build_path = /obj/machinery/computer/telecomms/server
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/comm_traffic
name = T_BOARD("telecommunications traffic control console")
build_path = /obj/machinery/computer/telecomms/traffic
origin_tech = "programming=3"

View File

@@ -0,0 +1,28 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/clonepod
name = T_BOARD("clone pod")
build_path = "/obj/machinery/clonepod"
board_type = "machine"
origin_tech = "programming=3;biotech=3"
frame_desc = "Requires 2 Manipulator, 2 Scanning Module, 2 pieces of cable and 1 Console Screen."
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/weapon/circuitboard/clonescanner
name = T_BOARD("cloning scanner")
build_path = "/obj/machinery/dna_scannernew"
board_type = "machine"
origin_tech = "programming=2;biotech=2"
frame_desc = "Requires 1 Scanning module, 1 Micro Manipulator, 1 Micro-Laser, 2 pieces of cable and 1 Console Screen."
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)

View File

@@ -0,0 +1,25 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/pacman
name = T_BOARD("PACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman"
board_type = "machine"
origin_tech = "programming=3;powerstorage=3;phorontech=3;engineering=3"
frame_desc = "Requires 1 Matter Bin, 1 Micro-Laser, 2 Pieces of Cable, and 1 Capacitor."
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/circuitboard/pacman/super
name = T_BOARD("SUPERPACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman/super"
origin_tech = "programming=3;powerstorage=4;engineering=4"
/obj/item/weapon/circuitboard/pacman/mrs
name = T_BOARD("MRSPACMAN-type generator")
build_path = "/obj/machinery/power/port_gen/pacman/mrs"
origin_tech = "programming=3;powerstorage=5;engineering=5"

View File

@@ -0,0 +1,27 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/smes
name = T_BOARD("superconductive magnetic energy storage")
build_path = "/obj/machinery/power/smes/buildable"
board_type = "machine"
origin_tech = "powerstorage=6;engineering=4"
frame_desc = "Requires 1 superconducting magnetic coil and 30 wires."
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 = "powerstorage=3;engineering=2"
frame_desc = "Requires 3 power cells."
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"
frame_desc = "Requires 3 power cells."
req_components = list("/obj/item/weapon/cell" = 3)

View File

@@ -0,0 +1,70 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
obj/item/weapon/circuitboard/rdserver
name = T_BOARD("R&D server")
build_path = "/obj/machinery/r_n_d/server"
board_type = "machine"
origin_tech = "programming=3"
frame_desc = "Requires 2 pieces of cable, and 1 Scanning Module."
req_components = list(
"/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")
build_path = "/obj/machinery/r_n_d/destructive_analyzer"
board_type = "machine"
origin_tech = "magnets=2;engineering=2;programming=2"
frame_desc = "Requires 1 Scanning Module, 1 Micro Manipulator, and 1 Micro-Laser."
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/circuitboard/autolathe
name = T_BOARD("autolathe")
build_path = "/obj/machinery/autolathe"
board_type = "machine"
origin_tech = "engineering=2;programming=2"
frame_desc = "Requires 3 Matter Bins, 1 Micro Manipulator, and 1 Console Screen."
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/circuitboard/protolathe
name = T_BOARD("protolathe")
build_path = "/obj/machinery/r_n_d/protolathe"
board_type = "machine"
origin_tech = "engineering=2;programming=2"
frame_desc = "Requires 2 Matter Bins, 2 Micro Manipulators, and 2 Beakers."
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/circuitboard/circuit_imprinter
name = T_BOARD("circuit imprinter")
build_path = "/obj/machinery/r_n_d/circuit_imprinter"
board_type = "machine"
origin_tech = "engineering=2;programming=2"
frame_desc = "Requires 1 Matter Bin, 1 Micro Manipulator, and 2 Beakers."
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/circuitboard/mechfab
name = "Circuit board (Exosuit Fabricator)"
build_path = "/obj/machinery/mecha_part_fabricator"
board_type = "machine"
origin_tech = "programming=3;engineering=3"
frame_desc = "Requires 2 Matter Bins, 1 Micro Manipulator, 1 Micro-Laser and 1 Console Screen."
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)

View File

@@ -1,9 +1,9 @@
////////////////////////////////////////
// External Shield Generator
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/shield_gen_ex
name = "Circuit board (Hull shield generator)"
name = T_BOARD("hull shield generator")
board_type = "machine"
build_path = "/obj/machinery/shield_gen/external"
origin_tech = "bluespace=4;phorontech=3"
@@ -16,22 +16,10 @@
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
datum/design/shield_gen_ex
name = "Circuit Design (Experimental hull shield generator)"
desc = "Allows for the construction of circuit boards used to build an experimental hull shield generator."
id = "shield_gen"
req_tech = list("bluespace" = 4, "phorontech" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
build_path = "/obj/machinery/shield_gen/external"
////////////////////////////////////////
// Shield Generator
/obj/item/weapon/circuitboard/shield_gen
name = "Circuit board (Bubble shield generator)"
name = T_BOARD("bubble shield generator")
board_type = "machine"
build_path = "/obj/machinery/shield_gen/external"
build_path = "/obj/machinery/shield_gen"
origin_tech = "bluespace=4;phorontech=3"
frame_desc = "Requires 2 Pico Manipulators, 1 Subspace Transmitter, 5 Pieces of cable, 1 Subspace Crystal, 1 Subspace Amplifier and 1 Console Screen."
req_components = list(
@@ -42,20 +30,8 @@ datum/design/shield_gen_ex
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
datum/design/shield_gen
name = "Circuit Design (Bubble shield generator)"
desc = "Allows for the construction of circuit boards used to build an experimental shield generator."
id = "shield_gen"
req_tech = list("bluespace" = 4, "phorontech" = 3)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
build_path = "/obj/machinery/shield_gen/external"
////////////////////////////////////////
// Shield Capacitor
/obj/item/weapon/circuitboard/shield_cap
name = "Circuit board (Shield capacitor)"
name = T_BOARD("shield capacitor")
board_type = "machine"
build_path = "/obj/machinery/shield_capacitor"
origin_tech = "magnets=3;powerstorage=4"
@@ -67,12 +43,3 @@ datum/design/shield_gen
"/obj/item/weapon/stock_parts/subspace/analyzer" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
datum/design/shield_cap
name = "Circuit Design (Shield capacitor)"
desc = "Allows for the construction of circuit boards used to build an experimental shielding capacitor."
id = "shield_cap"
req_tech = list("magnets" = 3, "powerstorage" = 4)
build_type = IMPRINTER
materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$silver" = 10000)
build_path = "/obj/machinery/shield_gen/external"

View File

@@ -0,0 +1,82 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/telecomms
board_type = "machine"
/obj/item/weapon/circuitboard/telecomms/receiver
name = T_BOARD("subspace receiver")
build_path = "/obj/machinery/telecomms/receiver"
origin_tech = "programming=4;engineering=3;bluespace=2"
frame_desc = "Requires 1 Subspace Ansible, 1 Hyperwave Filter, 2 Micro Manipulators, and 1 Micro-Laser."
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/circuitboard/telecomms/hub
name = T_BOARD("hub mainframe")
build_path = "/obj/machinery/telecomms/hub"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filter."
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/circuitboard/telecomms/relay
name = T_BOARD("relay mainframe")
build_path = "/obj/machinery/telecomms/relay"
origin_tech = "programming=3;engineering=4;bluespace=3"
frame_desc = "Requires 2 Micro Manipulators, 2 Cable Coil and 2 Hyperwave Filters."
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/circuitboard/telecomms/bus
name = T_BOARD("bus mainframe")
build_path = "/obj/machinery/telecomms/bus"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
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/circuitboard/telecomms/processor
name = T_BOARD("processor unit")
build_path = "/obj/machinery/telecomms/processor"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 3 Micro Manipulators, 1 Hyperwave Filter, 2 Treatment Disks, 1 Wavelength Analyzer, 2 Cable Coils and 1 Subspace Amplifier."
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/circuitboard/telecomms/server
name = T_BOARD("telecommunication server")
build_path = "/obj/machinery/telecomms/server"
origin_tech = "programming=4;engineering=4"
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil and 1 Hyperwave Filter."
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/circuitboard/telecomms/broadcaster
name = T_BOARD("subspace broadcaster")
build_path = "/obj/machinery/telecomms/broadcaster"
origin_tech = "programming=4;engineering=4;bluespace=2"
frame_desc = "Requires 2 Micro Manipulators, 1 Cable Coil, 1 Hyperwave Filter, 1 Ansible Crystal and 2 High-Powered Micro-Lasers. "
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)

View File

@@ -0,0 +1,35 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
/obj/item/weapon/circuitboard/unary_atmos
board_type = "machine"
/obj/item/weapon/circuitboard/unary_atmos/construct(var/obj/machinery/atmospherics/unary/U)
//TODO: Move this stuff into the relevant constructor when pipe/construction.dm is cleaned up.
U.initialize()
U.build_network()
if (U.node)
U.node.initialize()
U.node.build_network()
/obj/item/weapon/circuitboard/unary_atmos/heater
name = T_BOARD("gas heating system")
build_path = "/obj/machinery/atmospherics/unary/heater"
origin_tech = "powerstorage=2;engineering=1"
frame_desc = "Requires 5 Pieces of Cable, 1 Matter Bin, and 2 Capacitors."
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/weapon/circuitboard/unary_atmos/cooler
name = T_BOARD("gas cooling system")
build_path = "/obj/machinery/atmospherics/unary/freezer"
origin_tech = "magnets=2;engineering=2"
frame_desc = "Requires 2 Pieces of Cable, 1 Matter Bin, 1 Micro Manipulator, and 2 Capacitors."
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)

View File

@@ -0,0 +1,88 @@
#ifdef T_BOARD_MECHA
#error T_BOARD_MECHA already defined elsewhere, we can't use it.
#endif
#define T_BOARD_MECHA(name) "exosuit module circuit board (" + (name) + ")"
/obj/item/weapon/circuitboard/mecha
name = "exosuit circuit board"
icon = 'icons/obj/module.dmi'
icon_state = "std_mod"
item_state = "electronic"
board_type = "other"
/obj/item/weapon/circuitboard/mecha/ripley
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/mecha/ripley/peripherals
name = T_BOARD_MECHA("Ripley peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/ripley/main
name = T_BOARD_MECHA("Ripley central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/gygax
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/mecha/gygax/peripherals
name = T_BOARD_MECHA("Gygax peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/gygax/targeting
name = T_BOARD_MECHA("Gygax weapon control and targeting")
icon_state = "mcontroller"
origin_tech = "programming=4;combat=4"
/obj/item/weapon/circuitboard/mecha/gygax/main
name = T_BOARD_MECHA("Gygax central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/durand
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/mecha/durand/peripherals
name = T_BOARD_MECHA("Durand peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/durand/targeting
name = T_BOARD_MECHA("Durand weapon control and targeting")
icon_state = "mcontroller"
origin_tech = "programming=4;combat=4"
/obj/item/weapon/circuitboard/mecha/durand/main
name = T_BOARD_MECHA("Durand central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/honker
origin_tech = "programming=4"
/obj/item/weapon/circuitboard/mecha/honker/peripherals
name = T_BOARD_MECHA("H.O.N.K peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/honker/targeting
name = T_BOARD_MECHA("H.O.N.K weapon control and targeting")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/honker/main
name = T_BOARD_MECHA("H.O.N.K central control")
icon_state = "mainboard"
/obj/item/weapon/circuitboard/mecha/odysseus
origin_tech = "programming=3"
/obj/item/weapon/circuitboard/mecha/odysseus/peripherals
name = T_BOARD_MECHA("Odysseus peripherals control")
icon_state = "mcontroller"
/obj/item/weapon/circuitboard/mecha/odysseus/main
name = T_BOARD_MECHA("Odysseus central control")
icon_state = "mainboard"
//Undef the macro, shouldn't be needed anywhere else
#undef T_BOARD_MECHA

View File

@@ -0,0 +1,10 @@
#ifndef T_BOARD
#error T_BOARD macro is not defined but we need it!
#endif
//Stuff that doesn't fit into any category goes here
/obj/item/weapon/circuitboard/aicore
name = T_BOARD("AI core")
origin_tech = "programming=4;biotech=2"
board_type = "other"

View File

@@ -1,5 +1,5 @@
/obj/item/weapon/dnainjector
name = "DNA-Injector"
name = "\improper DNA injector"
desc = "This injects the person with DNA."
icon = 'icons/obj/items.dmi'
icon_state = "dnainjector"
@@ -194,7 +194,7 @@
/obj/item/weapon/dnainjector/hulkmut
name = "DNA-Injector (Hulk)"
name = "\improper DNA injector (Hulk)"
desc = "This will make you big and strong, but give you a bad skin condition."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -204,7 +204,7 @@
..()
/obj/item/weapon/dnainjector/antihulk
name = "DNA-Injector (Anti-Hulk)"
name = "\improper DNA injector (Anti-Hulk)"
desc = "Cures green skin."
datatype = DNA2_BUF_SE
value = 0x001
@@ -214,7 +214,7 @@
..()
/obj/item/weapon/dnainjector/xraymut
name = "DNA-Injector (Xray)"
name = "\improper DNA injector (Xray)"
desc = "Finally you can see what the Captain does."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -224,7 +224,7 @@
..()
/obj/item/weapon/dnainjector/antixray
name = "DNA-Injector (Anti-Xray)"
name = "\improper DNA injector (Anti-Xray)"
desc = "It will make you see harder."
datatype = DNA2_BUF_SE
value = 0x001
@@ -234,7 +234,7 @@
..()
/obj/item/weapon/dnainjector/firemut
name = "DNA-Injector (Fire)"
name = "\improper DNA injector (Fire)"
desc = "Gives you fire."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -244,7 +244,7 @@
..()
/obj/item/weapon/dnainjector/antifire
name = "DNA-Injector (Anti-Fire)"
name = "\improper DNA injector (Anti-Fire)"
desc = "Cures fire."
datatype = DNA2_BUF_SE
value = 0x001
@@ -254,7 +254,7 @@
..()
/obj/item/weapon/dnainjector/telemut
name = "DNA-Injector (Tele.)"
name = "\improper DNA injector (Tele.)"
desc = "Super brain man!"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -264,7 +264,7 @@
..()
/obj/item/weapon/dnainjector/antitele
name = "DNA-Injector (Anti-Tele.)"
name = "\improper DNA injector (Anti-Tele.)"
desc = "Will make you not able to control your mind."
datatype = DNA2_BUF_SE
value = 0x001
@@ -274,7 +274,7 @@
..()
/obj/item/weapon/dnainjector/nobreath
name = "DNA-Injector (No Breath)"
name = "\improper DNA injector (No Breath)"
desc = "Hold your breath and count to infinity."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -284,7 +284,7 @@
..()
/obj/item/weapon/dnainjector/antinobreath
name = "DNA-Injector (Anti-No Breath)"
name = "\improper DNA injector (Anti-No Breath)"
desc = "Hold your breath and count to 100."
datatype = DNA2_BUF_SE
value = 0x001
@@ -294,7 +294,7 @@
..()
/obj/item/weapon/dnainjector/remoteview
name = "DNA-Injector (Remote View)"
name = "\improper DNA injector (Remote View)"
desc = "Stare into the distance for a reason."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -304,7 +304,7 @@
..()
/obj/item/weapon/dnainjector/antiremoteview
name = "DNA-Injector (Anti-Remote View)"
name = "\improper DNA injector (Anti-Remote View)"
desc = "Cures green skin."
datatype = DNA2_BUF_SE
value = 0x001
@@ -314,7 +314,7 @@
..()
/obj/item/weapon/dnainjector/regenerate
name = "DNA-Injector (Regeneration)"
name = "\improper DNA injector (Regeneration)"
desc = "Healthy but hungry."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -324,7 +324,7 @@
..()
/obj/item/weapon/dnainjector/antiregenerate
name = "DNA-Injector (Anti-Regeneration)"
name = "\improper DNA injector (Anti-Regeneration)"
desc = "Sickly but sated."
datatype = DNA2_BUF_SE
value = 0x001
@@ -334,7 +334,7 @@
..()
/obj/item/weapon/dnainjector/runfast
name = "DNA-Injector (Increase Run)"
name = "\improper DNA injector (Increase Run)"
desc = "Running Man."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -344,7 +344,7 @@
..()
/obj/item/weapon/dnainjector/antirunfast
name = "DNA-Injector (Anti-Increase Run)"
name = "\improper DNA injector (Anti-Increase Run)"
desc = "Walking Man."
datatype = DNA2_BUF_SE
value = 0x001
@@ -354,7 +354,7 @@
..()
/obj/item/weapon/dnainjector/morph
name = "DNA-Injector (Morph)"
name = "\improper DNA injector (Morph)"
desc = "A total makeover."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -364,7 +364,7 @@
..()
/obj/item/weapon/dnainjector/antimorph
name = "DNA-Injector (Anti-Morph)"
name = "\improper DNA injector (Anti-Morph)"
desc = "Cures identity crisis."
datatype = DNA2_BUF_SE
value = 0x001
@@ -375,7 +375,7 @@
/* No COLDBLOCK on bay
/obj/item/weapon/dnainjector/cold
name = "DNA-Injector (Cold)"
name = "\improper DNA injector (Cold)"
desc = "Feels a bit chilly."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -385,7 +385,7 @@
..()
/obj/item/weapon/dnainjector/anticold
name = "DNA-Injector (Anti-Cold)"
name = "\improper DNA injector (Anti-Cold)"
desc = "Feels room-temperature."
datatype = DNA2_BUF_SE
value = 0x001
@@ -396,7 +396,7 @@
*/
/obj/item/weapon/dnainjector/noprints
name = "DNA-Injector (No Prints)"
name = "\improper DNA injector (No Prints)"
desc = "Better than a pair of budget insulated gloves."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -406,7 +406,7 @@
..()
/obj/item/weapon/dnainjector/antinoprints
name = "DNA-Injector (Anti-No Prints)"
name = "\improper DNA injector (Anti-No Prints)"
desc = "Not quite as good as a pair of budget insulated gloves."
datatype = DNA2_BUF_SE
value = 0x001
@@ -416,7 +416,7 @@
..()
/obj/item/weapon/dnainjector/insulation
name = "DNA-Injector (Shock Immunity)"
name = "\improper DNA injector (Shock Immunity)"
desc = "Better than a pair of real insulated gloves."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -426,7 +426,7 @@
..()
/obj/item/weapon/dnainjector/antiinsulation
name = "DNA-Injector (Anti-Shock Immunity)"
name = "\improper DNA injector (Anti-Shock Immunity)"
desc = "Not quite as good as a pair of real insulated gloves."
datatype = DNA2_BUF_SE
value = 0x001
@@ -436,7 +436,7 @@
..()
/obj/item/weapon/dnainjector/midgit
name = "DNA-Injector (Small Size)"
name = "\improper DNA injector (Small Size)"
desc = "Makes you shrink."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -446,7 +446,7 @@
..()
/obj/item/weapon/dnainjector/antimidgit
name = "DNA-Injector (Anti-Small Size)"
name = "\improper DNA injector (Anti-Small Size)"
desc = "Makes you grow. But not too much."
datatype = DNA2_BUF_SE
value = 0x001
@@ -457,7 +457,7 @@
/////////////////////////////////////
/obj/item/weapon/dnainjector/antiglasses
name = "DNA-Injector (Anti-Glasses)"
name = "\improper DNA injector (Anti-Glasses)"
desc = "Toss away those glasses!"
datatype = DNA2_BUF_SE
value = 0x001
@@ -467,7 +467,7 @@
..()
/obj/item/weapon/dnainjector/glassesmut
name = "DNA-Injector (Glasses)"
name = "\improper DNA injector (Glasses)"
desc = "Will make you need dorkish glasses."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -477,7 +477,7 @@
..()
/obj/item/weapon/dnainjector/epimut
name = "DNA-Injector (Epi.)"
name = "\improper DNA injector (Epi.)"
desc = "Shake shake shake the room!"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -487,7 +487,7 @@
..()
/obj/item/weapon/dnainjector/antiepi
name = "DNA-Injector (Anti-Epi.)"
name = "\improper DNA injector (Anti-Epi.)"
desc = "Will fix you up from shaking the room."
datatype = DNA2_BUF_SE
value = 0x001
@@ -497,7 +497,7 @@
..()
/obj/item/weapon/dnainjector/anticough
name = "DNA-Injector (Anti-Cough)"
name = "\improper DNA injector (Anti-Cough)"
desc = "Will stop that awful noise."
datatype = DNA2_BUF_SE
value = 0x001
@@ -507,7 +507,7 @@
..()
/obj/item/weapon/dnainjector/coughmut
name = "DNA-Injector (Cough)"
name = "\improper DNA injector (Cough)"
desc = "Will bring forth a sound of horror from your throat."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -517,7 +517,7 @@
..()
/obj/item/weapon/dnainjector/clumsymut
name = "DNA-Injector (Clumsy)"
name = "\improper DNA injector (Clumsy)"
desc = "Makes clumsy minions."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -527,7 +527,7 @@
..()
/obj/item/weapon/dnainjector/anticlumsy
name = "DNA-Injector (Anti-Clumy)"
name = "\improper DNA injector (Anti-Clumy)"
desc = "Cleans up confusion."
datatype = DNA2_BUF_SE
value = 0x001
@@ -537,7 +537,7 @@
..()
/obj/item/weapon/dnainjector/antitour
name = "DNA-Injector (Anti-Tour.)"
name = "\improper DNA injector (Anti-Tour.)"
desc = "Will cure tourrets."
datatype = DNA2_BUF_SE
value = 0x001
@@ -547,7 +547,7 @@
..()
/obj/item/weapon/dnainjector/tourmut
name = "DNA-Injector (Tour.)"
name = "\improper DNA injector (Tour.)"
desc = "Gives you a nasty case off tourrets."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -557,7 +557,7 @@
..()
/obj/item/weapon/dnainjector/stuttmut
name = "DNA-Injector (Stutt.)"
name = "\improper DNA injector (Stutt.)"
desc = "Makes you s-s-stuttterrr"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -567,7 +567,7 @@
..()
/obj/item/weapon/dnainjector/antistutt
name = "DNA-Injector (Anti-Stutt.)"
name = "\improper DNA injector (Anti-Stutt.)"
desc = "Fixes that speaking impairment."
datatype = DNA2_BUF_SE
value = 0x001
@@ -577,7 +577,7 @@
..()
/obj/item/weapon/dnainjector/blindmut
name = "DNA-Injector (Blind)"
name = "\improper DNA injector (Blind)"
desc = "Makes you not see anything."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -587,7 +587,7 @@
..()
/obj/item/weapon/dnainjector/antiblind
name = "DNA-Injector (Anti-Blind)"
name = "\improper DNA injector (Anti-Blind)"
desc = "ITS A MIRACLE!!!"
datatype = DNA2_BUF_SE
value = 0x001
@@ -597,7 +597,7 @@
..()
/obj/item/weapon/dnainjector/deafmut
name = "DNA-Injector (Deaf)"
name = "\improper DNA injector (Deaf)"
desc = "Sorry, what did you say?"
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -607,7 +607,7 @@
..()
/obj/item/weapon/dnainjector/antideaf
name = "DNA-Injector (Anti-Deaf)"
name = "\improper DNA injector (Anti-Deaf)"
desc = "Will make you hear once more."
datatype = DNA2_BUF_SE
value = 0x001
@@ -617,7 +617,7 @@
..()
/obj/item/weapon/dnainjector/hallucination
name = "DNA-Injector (Halluctination)"
name = "\improper DNA injector (Halluctination)"
desc = "What you see isn't always what you get."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -627,7 +627,7 @@
..()
/obj/item/weapon/dnainjector/antihallucination
name = "DNA-Injector (Anti-Hallucination)"
name = "\improper DNA injector (Anti-Hallucination)"
desc = "What you see is what you get."
datatype = DNA2_BUF_SE
value = 0x001
@@ -637,7 +637,7 @@
..()
/obj/item/weapon/dnainjector/h2m
name = "DNA-Injector (Human > Monkey)"
name = "\improper DNA injector (Human > Monkey)"
desc = "Will make you a flea bag."
datatype = DNA2_BUF_SE
value = 0xFFF
@@ -647,7 +647,7 @@
..()
/obj/item/weapon/dnainjector/m2h
name = "DNA-Injector (Monkey > Human)"
name = "\improper DNA injector (Monkey > Human)"
desc = "Will make you...less hairy."
datatype = DNA2_BUF_SE
value = 0x001

View File

@@ -38,7 +38,7 @@
/obj/item/weapon/plastique/afterattack(atom/movable/target, mob/user, flag)
if (!flag)
return
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/))
if (ismob(target) || istype(target, /turf/unsimulated) || istype(target, /turf/simulated/shuttle) || istype(target, /obj/item/weapon/storage/) || istype(target, /obj/item/clothing/tie/storage/) || istype(target, /obj/item/clothing/under))
return
user << "Planting explosives..."

View File

@@ -1,5 +1,5 @@
/obj/item/weapon/grenade/chem_grenade
name = "Grenade Casing"
name = "grenade casing"
icon_state = "chemg"
item_state = "flashbang"
desc = "A hand made chemical grenade."
@@ -171,7 +171,7 @@
/obj/item/weapon/grenade/chem_grenade/large
name = "Large Chem Grenade"
name = "large chem grenade"
desc = "An oversized grenade that affects a larger area."
icon_state = "large_grenade"
allowed_containers = list(/obj/item/weapon/reagent_containers/glass)
@@ -179,7 +179,7 @@
affected_area = 4
/obj/item/weapon/grenade/chem_grenade/metalfoam
name = "Metal-Foam Grenade"
name = "metal-foam grenade"
desc = "Used for emergency sealing of air breaches."
path = 1
stage = 2
@@ -200,7 +200,7 @@
icon_state = initial(icon_state) +"_locked"
/obj/item/weapon/grenade/chem_grenade/incendiary
name = "Incendiary Grenade"
name = "incendiary grenade"
desc = "Used for clearing rooms of living things."
path = 1
stage = 2

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