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\radio.dm"
#include "code\datums\wires\robot.dm" #include "code\datums\wires\robot.dm"
#include "code\datums\wires\smartfridge.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\suit_storage_unit.dm"
#include "code\datums\wires\vending.dm" #include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm" #include "code\datums\wires\wires.dm"
@@ -387,12 +388,14 @@
#include "code\game\machinery\computer\pod.dm" #include "code\game\machinery\computer\pod.dm"
#include "code\game\machinery\computer\prisoner.dm" #include "code\game\machinery\computer\prisoner.dm"
#include "code\game\machinery\computer\prisonshuttle.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\robot.dm"
#include "code\game\machinery\computer\security.dm" #include "code\game\machinery\computer\security.dm"
#include "code\game\machinery\computer\shuttle.dm" #include "code\game\machinery\computer\shuttle.dm"
#include "code\game\machinery\computer\skills.dm" #include "code\game\machinery\computer\skills.dm"
#include "code\game\machinery\computer\specops_shuttle.dm" #include "code\game\machinery\computer\specops_shuttle.dm"
#include "code\game\machinery\computer\station_alert.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\computer\syndicate_specops_shuttle.dm"
#include "code\game\machinery\doors\airlock.dm" #include "code\game\machinery\doors\airlock.dm"
#include "code\game\machinery\doors\airlock_control.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\twohanded.dm"
#include "code\game\objects\items\weapons\weaponry.dm" #include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\wires.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\chem_grenade.dm"
#include "code\game\objects\items\weapons\grenades\emgrenade.dm" #include "code\game\objects\items\weapons\grenades\emgrenade.dm"
#include "code\game\objects\items\weapons\grenades\flashbang.dm" #include "code\game\objects\items\weapons\grenades\flashbang.dm"
@@ -1370,7 +1390,6 @@
#include "code\modules\scripting\Scanner\Tokens.dm" #include "code\modules\scripting\Scanner\Tokens.dm"
#include "code\modules\security levels\keycard authentication.dm" #include "code\modules\security levels\keycard authentication.dm"
#include "code\modules\security levels\security levels.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\emergency_shield.dm"
#include "code\modules\shieldgen\energy_field.dm" #include "code\modules\shieldgen\energy_field.dm"
#include "code\modules\shieldgen\sheldwallgen.dm" #include "code\modules\shieldgen\sheldwallgen.dm"

View File

@@ -316,4 +316,8 @@
"\blue You have unfastened \the [src].", \ "\blue You have unfastened \the [src].", \
"You hear ratchet.") "You hear ratchet.")
new /obj/item/pipe(loc, make_from=src) new /obj/item/pipe(loc, make_from=src)
del(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 //Engine control and monitoring console
/obj/machinery/computer/engines /obj/machinery/computer/engines
name = "engines control console" name = "engine control console"
icon_state = "id" icon_state = "id"
var/state = "status" var/state = "status"
var/list/engines = list() var/list/engines = list()

View File

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

View File

@@ -38,8 +38,18 @@ proc/random_facial_hair_style(gender, species = "Human")
return f_style return f_style
proc/random_name(gender, species = "Human") 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() proc/random_skin_tone()
switch(pick(60;"caucasian", 15;"afroamerican", 10;"african", 10;"latino", 5;"albino")) 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. //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 //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 //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 processing = 0
spawn(-1) spawn(-1)
set background = 1 set background = 1

View File

@@ -84,7 +84,7 @@ datum/controller/game_controller/proc/setup()
if(ticker) if(ticker)
ticker.pregame() ticker.pregame()
lighting_controller.Initialize() lighting_controller.initializeLighting()
datum/controller/game_controller/proc/setup_objects() 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) 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 0
return 1 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)) if(!setTeleatom(ateleatom))
return 0 return 0
if(!setDestination(adestination)) 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 = 'icons/obj/wizard.dmi'
icon_state = "ectoplasm" icon_state = "ectoplasm"
/obj/item/weapon/research//Makes testing much less of a pain -Sieve /obj/item/weapon/research
name = "research" name = "research debugging device"
desc = "Instant research tool. For testing purposes only."
icon = 'icons/obj/stock_parts.dmi' icon = 'icons/obj/stock_parts.dmi'
icon_state = "capacitor" icon_state = "smes_coil"
desc = "A debug item for research." origin_tech = "materials=19;programming=19;magnets=19;powerstorage=19;bluespace=19;combat=19;biotech=19;syndicate=19;phorontech=19;engineering=19"
origin_tech = "materials=8;programming=8;magnets=8;powerstorage=8;bluespace=8;combat=8;biotech=8;syndicate=8;phorontech=8;engineering=8"

View File

@@ -38,148 +38,144 @@ length to avoid portals or something i guess?? Not that they're counted right no
PriorityQueue PriorityQueue
var/L[] var/list/queue
var/cmp var/proc/comparison_function
New(compare) New(compare)
L = new() queue = list()
cmp = compare comparison_function = 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
Dequeue() proc/IsEmpty()
if(!L.len) return 0 return !queue.len
. = L[1]
Remove(1)
Remove(i) proc/Enqueue(var/data)
if(i > L.len) return 0 queue.Add(data)
L.Swap(i,L.len) var/index = queue.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)
child++
if(call(cmp)(item,L[child]) > 0)
L[i] = L[child]
i = 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)
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
datum //From what I can tell, this automagically sorts the added data into the correct location.
var/bestF while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0)
proc queue.Swap(index, index / 2)
PathWeightCompare(PathNode/a, PathNode/b) index /= 2
return a.f - b.f
AStar(start,end,adjacent,dist,maxnodes,maxnodedepth = 30,mintargetdist,minnodedist,id=null, var/turf/exclude=null) proc/Dequeue()
if(!queue.len)
return 0
return Remove(1)
// world << "A*: [start] [end] [adjacent] [dist] [maxnodes] [maxnodedepth] [mintargetdist], [minnodedist] [id]" proc/Remove(var/index)
var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) if(index > queue.len)
var/closed[] = new() return 0
var/path[]
start = get_turf(start)
if(!start) return 0
open.Enqueue(new /PathNode(start,null,0,call(start,dist)(end))) var/thing = queue[index]
queue.Swap(index, queue.len)
queue.Cut(queue.len)
if(index < queue.len)
FixQueue(index)
return thing
while(!open.IsEmpty() && !path) proc/FixQueue(var/index)
{ var/child = 2 * index
var/PathNode/cur = open.Dequeue() var/item = queue[index]
closed.Add(cur.source)
var/closeenough while(child <= queue.len)
if(mintargetdist) if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0)
closeenough = call(cur.source,dist)(end) <= mintargetdist child++
if(call(comparison_function)(item, queue[child]) > 0)
if(cur.source == end || closeenough) queue[index] = queue[child]
path = new() index = child
path.Add(cur.source) else
while(cur.prevNode)
cur = cur.prevNode
path.Add(cur.source)
break break
child = 2 * index
queue[index] = item
var/L[] = call(cur.source,adjacent)(id) proc/List()
if(minnodedist && maxnodedepth) return queue.Copy()
if(call(cur.source,minnodedist)(end) + cur.nt >= maxnodedepth)
continue
else if(maxnodedepth)
if(cur.nt >= maxnodedepth)
continue
for(var/datum/d in L) proc/Length()
if(d == exclude) return queue.len
continue
var/ng = cur.g + call(cur.source,dist)(d) proc/RemoveItem(data)
if(d.bestF) var/index = queue.Find(data)
if(ng + call(d,dist)(end) < d.bestF) if(index)
for(var/i = 1; i <= open.L.len; i++) return Remove(index)
var/PathNode/n = open.L[i]
if(n.source == d) PathNode
open.Remove(i) var/datum/position
break var/PathNode/previous_node
var/best_estimated_cost
var/estimated_cost
var/known_cost
var/cost
var/nodes_traversed
New(_position, _previous_node, _known_cost, _cost, _nodes_traversed)
position = _position
previous_node = _previous_node
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/list/closed = list()
var/list/path
var/list/path_node_by_position = list()
start = get_turf(start)
if(!start)
return 0
open.Enqueue(new /PathNode(start, null, 0, call(start, dist)(end), 0))
while(!open.IsEmpty() && !path)
var/PathNode/current = open.Dequeue()
closed.Add(current.position)
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
while(current.previous_node)
current = current.previous_node
path[index--] = current.position
break
if(min_node_dist && max_node_depth)
if(call(current.position, min_node_dist)(end) + current.nodes_traversed >= max_node_depth)
continue
if(max_node_depth)
if(current.nodes_traversed >= max_node_depth)
continue
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 else
continue continue
open.Enqueue(new /PathNode(d,cur,ng,call(d,dist)(end),cur.nt+1)) var/PathNode/next_node = new (datum, current, best_estimated_cost, call(datum, dist)(end), current.nodes_traversed + 1)
if(maxnodes && open.L.len > maxnodes) path_node_by_position[datum] = next_node
open.L.Cut(open.L.len) open.Enqueue(next_node)
}
var/PathNode/temp if(max_nodes && open.Length() > max_nodes)
while(!open.IsEmpty()) open.Remove(open.Length())
temp = open.Dequeue()
temp.source.bestF = 0
while(closed.len)
temp = closed[closed.len]
temp.bestF = 0
closed.Cut(closed.len)
if(path) return path
for(var/i = 1; i <= path.len/2; i++)
path.Swap(i,path.len-i+1)
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. /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" 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. /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" 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, ... /area/maintenance/substation/civilian_east // Bar, kitchen, dorms, ...
name = "Civilian East Substation" name = "Civilian East Substation"
@@ -1040,6 +1047,7 @@ var/list/ghostteleportlocs = list()
/area/holodeck/source_space /area/holodeck/source_space
name = "\improper Holodeck - Space" name = "\improper Holodeck - Space"
has_gravity = 0

View File

@@ -56,7 +56,7 @@
"Devices and Tools" = list( "Devices and Tools" = list(
new/datum/uplink_item(/obj/item/weapon/card/emag, 3, "Cryptographic Sequencer", "EC"), 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/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/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/clothing/glasses/thermal/syndi, 3, "Thermal Imaging Glasses", "TM"),
new/datum/uplink_item(/obj/item/device/encryptionkey/binary, 3, "Binary Translator Key", "BT"), 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/datum/dna2/record/buf=null
var/read_only = 0 //Well,it's still a floppy disk 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 = new
buf.dna=new buf.dna=new
@@ -42,7 +42,7 @@
read_only = 1 read_only = 1
New() New()
Initialize() initializeDisk()
buf.types=DNA2_BUF_UE|DNA2_BUF_UI buf.types=DNA2_BUF_UE|DNA2_BUF_UI
//data = "066000033000000000AF00330660FF4DB002690" //data = "066000033000000000AF00330660FF4DB002690"
//data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff //data = "0C80C80C80C80C80C8000000000000161FBDDEF" - Farmer Jeff
@@ -57,7 +57,7 @@
read_only = 1 read_only = 1
New() New()
Initialize() initializeDisk()
buf.types=DNA2_BUF_SE buf.types=DNA2_BUF_SE
var/list/new_SE=list(0x098,0x3E8,0x403,0x44C,0x39F,0x4B0,0x59D,0x514,0x5FC,0x578,0x5DC,0x640,0x6A4) 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++) 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 /obj/machinery/computer/HolodeckControl
name = "Holodeck Control Computer" name = "holodeck control console"
desc = "A computer used to control a nearby holodeck." desc = "A computer used to control a nearby holodeck."
icon_state = "holocontrol" 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/linkedholodeck = null
var/area/target = null var/area/target = null
var/active = 0 var/active = 0
var/list/holographic_items = list() var/list/holographic_items = list()
var/list/holographic_mobs = list()
var/damaged = 0 var/damaged = 0
var/safety_disabled = 0
var/mob/last_to_emag = null
var/last_change = 0 var/last_change = 0
var/list/supported_programs = list( \ var/list/supported_programs = list( \
"Empty Court" = "emptycourt", \ "Empty Court" = "emptycourt", \
@@ -38,84 +46,111 @@ var/global/list/holodeck_programs = list(
"Theatre" = "theatre", \ "Theatre" = "theatre", \
"Meeting Hall" = "meetinghall" \ "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) return src.attack_hand(user)
attack_hand(var/mob/user as mob) /obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob)
if(..()) if(..())
return return
user.set_machine(src) user.set_machine(src)
var/dat var/dat
dat += "<B>Holodeck Control System</B><BR>" dat += "<B>Holodeck Control System</B><BR>"
dat += "<HR>Current Loaded Programs:<BR>" dat += "<HR>Current Loaded Programs:<BR>"
for(var/prog in supported_programs) for(var/prog in supported_programs)
dat += "<A href='?src=\ref[src];program=[supported_programs[prog]]'>(([prog]))</A><BR>" dat += "<A href='?src=\ref[src];program=[supported_programs[prog]]'>(([prog]))</A><BR>"
dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>" dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.<BR>"
if(issilicon(user)) if(issilicon(user))
if(emagged) if(safety_disabled)
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>" if (emagged)
dat += "<font color=red><b>ERROR</b>: Cannot re-enable Safety Protocols.</font><BR>"
else else
dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>" dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=green>Re-Enable Safety Protocols?</font>)</A><BR>"
if(emagged)
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>"
dat += "<BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else else
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>" dat += "<A href='?src=\ref[src];AIoverride=1'>(<font color=red>Override Safety Protocols?</font>)</A><BR>"
user << browse(dat, "window=computer;size=400x500") if(safety_disabled)
onclose(user, "computer") 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>"
dat += "<BR>"
dat += "Safety Protocols are <font color=red> DISABLED </font><BR>"
else
dat += "Safety Protocols are <font color=green> ENABLED </font><BR>"
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/HolodeckControl/Topic(href, href_list)
if(..())
return return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
if(href_list["program"])
var/prog = href_list["program"]
if(prog in holodeck_programs)
target = locate(holodeck_programs[prog])
if(target)
loadProgram(target)
Topic(href, href_list) else if(href_list["AIoverride"])
if(..()) if(!issilicon(usr))
return return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src) 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
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
log_game("[key_name(usr)] restored the holodeck's safeties")
if(href_list["program"]) src.add_fingerprint(usr)
var/prog = href_list["program"]
if(prog in holodeck_programs)
target = locate(holodeck_programs[prog])
if(target)
loadProgram(target)
else if(href_list["AIoverride"])
if(!issilicon(usr)) return
emagged = !emagged
if(emagged)
message_admins("[key_name_admin(usr)] overrode the holodeck's safeties")
log_game("[key_name(usr)] overrided the holodeck's safeties")
else
message_admins("[key_name_admin(usr)] restored the holodeck's safeties")
log_game("[key_name(usr)] restored the holodeck's safeties")
src.add_fingerprint(usr)
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)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
user << "\blue You vastly increase projector power and override the safety and security protocols."
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() src.updateUsrDialog()
return 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))
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
last_to_emag = user //emag again to change the owner
if (!emagged)
emagged = 1
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() /obj/machinery/computer/HolodeckControl/New()
..() ..()
linkedholodeck = locate(/area/holodeck/alphadeck) linkedholodeck = locate(/area/holodeck/alphadeck)
@@ -148,14 +183,27 @@ var/global/list/holodeck_programs = list(
emergencyShutdown() emergencyShutdown()
..() ..()
/obj/machinery/computer/HolodeckControl/power_change()
var/oldstat
..()
if (stat != oldstat && active && (stat & NOPOWER))
emergencyShutdown()
/obj/machinery/computer/HolodeckControl/process() /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. 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)) if(!(get_turf(item) in linkedholodeck))
derez(item, 0) 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(!..()) if(!..())
return return
if(active) if(active)
use_power(item_power_usage * (holographic_items.len + holographic_mobs.len))
if(!checkInteg(linkedholodeck)) if(!checkInteg(linkedholodeck))
damaged = 1 damaged = 1
@@ -163,6 +211,7 @@ var/global/list/holodeck_programs = list(
if(target) if(target)
loadProgram(target) loadProgram(target)
active = 0 active = 0
use_power = 1
for(var/mob/M in range(10,src)) for(var/mob/M in range(10,src))
M.show_message("The holodeck overloads!") M.show_message("The holodeck overloads!")
@@ -199,6 +248,7 @@ var/global/list/holodeck_programs = list(
return 1 return 1
//Why is it called toggle if it doesn't toggle?
/obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0) /obj/machinery/computer/HolodeckControl/proc/togglePower(var/toggleOn = 0)
if(toggleOn) if(toggleOn)
@@ -218,12 +268,14 @@ var/global/list/holodeck_programs = list(
T.hotspot_expose(50000,50000,1) T.hotspot_expose(50000,50000,1)
active = 1 active = 1
use_power = 2
else else
for(var/item in holographic_items) for(var/item in holographic_items)
derez(item) derez(item)
var/area/targetsource = locate(/area/holodeck/source_plating) var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1) targetsource.copy_contents_to(linkedholodeck , 1)
active = 0 active = 0
use_power = 1
/obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A) /obj/machinery/computer/HolodeckControl/proc/loadProgram(var/area/A)
@@ -238,22 +290,20 @@ var/global/list/holodeck_programs = list(
last_change = world.time last_change = world.time
active = 1 active = 1
use_power = 2
for(var/item in holographic_items) for(var/item in holographic_items)
derez(item) 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) for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck)
del(B) del(B)
for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck)
del(C)
holographic_items = A.copy_contents_to(linkedholodeck , 1) 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) spawn(30)
for(var/obj/effect/landmark/L in linkedholodeck) for(var/obj/effect/landmark/L in linkedholodeck)
if(L.name=="Atmospheric Test Start") if(L.name=="Atmospheric Test Start")
@@ -266,13 +316,22 @@ var/global/list/holodeck_programs = list(
T.temperature = 5000 T.temperature = 5000
T.hotspot_expose(50000,50000,1) T.hotspot_expose(50000,50000,1)
if(L.name=="Holocarp Spawn") 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() /obj/machinery/computer/HolodeckControl/proc/emergencyShutdown()
//Get rid of any items //Get rid of any items
for(var/item in holographic_items) for(var/item in holographic_items)
derez(item) 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 //Turn it back to the regular non-holographic room
target = locate(/area/holodeck/source_plating) target = locate(/area/holodeck/source_plating)
if(target) if(target)
@@ -281,6 +340,7 @@ var/global/list/holodeck_programs = list(
var/area/targetsource = locate(/area/holodeck/source_plating) var/area/targetsource = locate(/area/holodeck/source_plating)
targetsource.copy_contents_to(linkedholodeck , 1) targetsource.copy_contents_to(linkedholodeck , 1)
active = 0 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) /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)) if (istype(W, /obj/item/weapon/wrench))
user << "It's a holotable! There are no bolts!" user << "It's a holotable! There are no bolts!"
return return
@@ -424,13 +473,13 @@ var/global/list/holodeck_programs = list(
icon_state = "sword[item_color]" icon_state = "sword[item_color]"
w_class = 4 w_class = 4
playsound(user, 'sound/weapons/saberon.ogg', 50, 1) playsound(user, 'sound/weapons/saberon.ogg', 50, 1)
user << "\blue [src] is now active." user << "<span class='notice'>[src] is now active.</span>"
else else
force = 3 force = 3
icon_state = "sword0" icon_state = "sword0"
w_class = 2 w_class = 2
playsound(user, 'sound/weapons/saberoff.ogg', 50, 1) 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)) if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user 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) if (istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
var/obj/item/weapon/grab/G = W var/obj/item/weapon/grab/G = W
if(G.state<2) 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 return
G.affecting.loc = src.loc G.affecting.loc = src.loc
G.affecting.Weaken(5) 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) del(W)
return return
else if (istype(W, /obj/item) && get_dist(src,user)<2) else if (istype(W, /obj/item) && get_dist(src,user)<2)
user.drop_item(src) 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 return
/obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) /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 return
if(prob(50)) if(prob(50))
I.loc = src.loc 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 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 return 0
else else
return ..(mover, target, height, air_group) return ..(mover, target, height, air_group)
@@ -578,3 +627,39 @@ var/global/list/holodeck_programs = list(
if (istype(W, /obj/item/weapon/wrench)) if (istype(W, /obj/item/weapon/wrench))
user << "It's a holorack! You can't unwrench it!" user << "It's a holorack! You can't unwrench it!"
return 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/operating /obj/machinery/computer/operating
name = "Operating Computer" name = "patient monitoring console"
density = 1 density = 1
anchored = 1.0 anchored = 1.0
icon_state = "operating" 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 /obj/structure/AIcore
density = 1 density = 1
anchored = 0 anchored = 0
name = "AI core" name = "\improper AI core"
icon = 'icons/mob/AI.dmi' icon = 'icons/mob/AI.dmi'
icon_state = "0" icon_state = "0"
var/state = 0 var/state = 0
@@ -175,7 +175,7 @@
del(src) del(src)
/obj/structure/AIcore/deactivated /obj/structure/AIcore/deactivated
name = "Inactive AI" name = "inactive AI"
icon = 'icons/mob/AI.dmi' icon = 'icons/mob/AI.dmi'
icon_state = "ai-empty" icon_state = "ai-empty"
anchored = 1 anchored = 1

View File

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

View File

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

View File

@@ -3,363 +3,13 @@
/obj/structure/computerframe /obj/structure/computerframe
density = 1 density = 1
anchored = 0 anchored = 0
name = "Computer-frame" name = "computer frame"
icon = 'icons/obj/stock_parts.dmi' icon = 'icons/obj/stock_parts.dmi'
icon_state = "0" icon_state = "0"
var/state = 0 var/state = 0
var/obj/item/weapon/circuitboard/circuit = null var/obj/item/weapon/circuitboard/circuit = null
// weight = 1.0E8 // 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) /obj/structure/computerframe/attackby(obj/item/P as obj, mob/user as mob)
switch(state) switch(state)
if(0) if(0)

View File

@@ -2,7 +2,7 @@
/obj/machinery/computer/security /obj/machinery/computer/security
name = "Security Cameras" name = "security camera monitor"
desc = "Used to access the various cameras on the station." desc = "Used to access the various cameras on the station."
icon_state = "cameras" icon_state = "cameras"
var/obj/machinery/camera/current = null var/obj/machinery/camera/current = null
@@ -23,6 +23,69 @@
user.reset_view(current) user.reset_view(current)
return 1 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) attack_hand(var/mob/user as mob)
if (src.z > 6) if (src.z > 6)
@@ -32,35 +95,7 @@
if(!isAI(user)) if(!isAI(user))
user.set_machine(src) user.set_machine(src)
ui_interact(user)
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
proc/can_access_camera(var/obj/machinery/camera/C) proc/can_access_camera(var/obj/machinery/camera/C)
var/list/shared_networks = src.network & C.network 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))) 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 return 0
src.current = C src.current = C
check_eye(user)
use_power(50) use_power(50)
return 1 return 1
@@ -151,28 +187,28 @@
circuit = null circuit = null
/obj/machinery/computer/security/wooden_tv /obj/machinery/computer/security/wooden_tv
name = "Security Cameras" name = "security camera monitor"
desc = "An old TV hooked into the stations camera network." desc = "An old TV hooked into the stations camera network."
icon_state = "security_det" icon_state = "security_det"
circuit = null circuit = null
/obj/machinery/computer/security/mining /obj/machinery/computer/security/mining
name = "Outpost Cameras" name = "outpost camera monitor"
desc = "Used to access the various cameras on the outpost." desc = "Used to access the various cameras on the outpost."
icon_state = "miningcameras" icon_state = "miningcameras"
network = list("MINE") network = list("MINE")
circuit = /obj/item/weapon/circuitboard/security/mining circuit = /obj/item/weapon/circuitboard/security/mining
/obj/machinery/computer/security/engineering /obj/machinery/computer/security/engineering
name = "Engineering Cameras" name = "engineering camera monitor"
desc = "Used to monitor fires and breaches." desc = "Used to monitor fires and breaches."
icon_state = "engineeringcameras" icon_state = "engineeringcameras"
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms") network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
circuit = /obj/item/weapon/circuitboard/security/engineering circuit = /obj/item/weapon/circuitboard/security/engineering
/obj/machinery/computer/security/nuclear /obj/machinery/computer/security/nuclear
name = "Mission Monitor" name = "head mounted camera monitor"
desc = "Used to access the built-in cameras in helmets." desc = "Used to access the built-in cameras in helmets."
icon_state = "syndicam" icon_state = "syndicam"
network = list("NUKE") network = list("NUKE")

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/obj/machinery/computer/crew /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." desc = "Used to monitor active health sensors built into most of the crew's uniforms."
icon_state = "crew" icon_state = "crew"
use_power = 1 use_power = 1

View File

@@ -1,7 +1,7 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/hologram_comp /obj/machinery/computer/hologram_comp
name = "Hologram Computer" name = "hologram computer"
desc = "Rumoured to control holograms." desc = "Rumoured to control holograms."
icon = 'icons/obj/stationobjs.dmi' icon = 'icons/obj/stationobjs.dmi'
icon_state = "holo_console0" 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/aiupload /obj/machinery/computer/aiupload
name = "AI Upload" name = "\improper AI upload console"
desc = "Used to upload laws to the AI." desc = "Used to upload laws to the AI."
icon_state = "command" icon_state = "command"
circuit = "/obj/item/weapon/circuitboard/aiupload" circuit = "/obj/item/weapon/circuitboard/aiupload"
@@ -54,7 +54,7 @@
/obj/machinery/computer/borgupload /obj/machinery/computer/borgupload
name = "Cyborg Upload" name = "cyborg upload console"
desc = "Used to upload laws to Cyborgs." desc = "Used to upload laws to Cyborgs."
icon_state = "command" icon_state = "command"
circuit = "/obj/item/weapon/circuitboard/borgupload" circuit = "/obj/item/weapon/circuitboard/borgupload"

View File

@@ -3,7 +3,7 @@
/obj/machinery/computer/lockdown /obj/machinery/computer/lockdown
//for reference //for reference
/*name = "Lockdown Control" /*name = "lockdown control"
desc = "Used to control blast doors." desc = "Used to control blast doors."
icon_state = "lockdown" icon_state = "lockdown"
circuit = "/obj/item/weapon/circuitboard/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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/med_data//TODO:SANITY /obj/machinery/computer/med_data//TODO:SANITY
name = "Medical Records" name = "medical records console"
desc = "This can be used to check medical records." desc = "Used to view, edit and maintain medical records."
icon_state = "medcomp" icon_state = "medcomp"
req_one_access = list(access_medical, access_forensics_lockers) req_one_access = list(access_medical, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/med_data" circuit = "/obj/item/weapon/circuitboard/med_data"
@@ -551,4 +551,4 @@
/obj/machinery/computer/med_data/laptop /obj/machinery/computer/med_data/laptop
name = "Medical Laptop" name = "Medical Laptop"
desc = "Cheap Nanotrasen Laptop." desc = "Cheap Nanotrasen Laptop."
icon_state = "medlaptop" icon_state = "medlaptop"

View File

@@ -1,12 +1,8 @@
// Allows you to monitor messages that passes the server. // Allows you to monitor messages that passes the server.
/obj/machinery/computer/message_monitor /obj/machinery/computer/message_monitor
name = "Message Monitor Console" name = "messaging monitor console"
desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." desc = "Used to access and maintain data on messaging servers. Allows you to view PDA and request console messages."
icon_state = "comm_logs" icon_state = "comm_logs"
var/hack_icon = "comm_logsc" var/hack_icon = "comm_logsc"
var/normal_icon = "comm_logs" 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/pod /obj/machinery/computer/pod
name = "Pod Launch Control" name = "pod launch control console"
desc = "A controll for launching pods. Some people prefer firing Mechas." desc = "A control console for launching pods. Some people prefer firing Mechas."
icon_state = "computer_generic" icon_state = "computer_generic"
circuit = /obj/item/weapon/circuitboard/pod circuit = /obj/item/weapon/circuitboard/pod
var/id = 1.0 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/prisoner /obj/machinery/computer/prisoner
name = "Prisoner Management" name = "prisoner management console"
icon = 'icons/obj/computer.dmi' icon = 'icons/obj/computer.dmi'
icon_state = "explosive" icon_state = "explosive"
req_access = list(access_armory) req_access = list(access_armory)
@@ -100,5 +100,3 @@
src.add_fingerprint(usr) src.add_fingerprint(usr)
src.updateUsrDialog() src.updateUsrDialog()
return return

View File

@@ -11,7 +11,7 @@ var/prison_shuttle_time = 0
var/prison_shuttle_timeleft = 0 var/prison_shuttle_timeleft = 0
/obj/machinery/computer/prison_shuttle /obj/machinery/computer/prison_shuttle
name = "Prison Shuttle Console" name = "prison shuttle control console"
icon = 'icons/obj/computer.dmi' icon = 'icons/obj/computer.dmi'
icon_state = "shuttle" icon_state = "shuttle"
req_access = list(access_security) 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/robotics /obj/machinery/computer/robotics
name = "Robotics Control" name = "robotics control console"
desc = "Used to remotely lockdown or detonate linked Cyborgs." desc = "Used to remotely lockdown or detonate linked cyborgs."
icon = 'icons/obj/computer.dmi' icon = 'icons/obj/computer.dmi'
icon_state = "robot" icon_state = "robot"
req_access = list(access_robotics) 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/secure_data//TODO:SANITY /obj/machinery/computer/secure_data//TODO:SANITY
name = "Security Records" name = "security records console"
desc = "Used to view and edit personnel's security records" desc = "Used to view, edit and maintain security records"
icon_state = "security" icon_state = "security"
req_one_access = list(access_security, access_forensics_lockers) req_one_access = list(access_security, access_forensics_lockers)
circuit = "/obj/item/weapon/circuitboard/secure_data" 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 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/computer/skills//TODO:SANITY /obj/machinery/computer/skills//TODO:SANITY
name = "Employment Records" name = "employment records console"
desc = "Used to view personnel's employment records" desc = "Used to view, edit and maintain employment records."
icon_state = "medlaptop" icon_state = "medlaptop"
req_one_access = list(access_heads) req_one_access = list(access_heads)
circuit = "/obj/item/weapon/circuitboard/skills" circuit = "/obj/item/weapon/circuitboard/skills"

View File

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

View File

@@ -1,6 +1,6 @@
/obj/machinery/computer/station_alert /obj/machinery/computer/station_alert
name = "Station Alert Computer" name = "Station Alert Console"
desc = "Used to access the station's automated alert system." desc = "Used to access the station's automated alert system."
icon_state = "alert:0" icon_state = "alert:0"
circuit = "/obj/item/weapon/circuitboard/stationalert" 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 var/syndicate_elite_shuttle_timeleft = 0
/obj/machinery/computer/syndicate_elite_shuttle /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 = 'icons/obj/computer.dmi'
icon_state = "syndishuttle" icon_state = "syndishuttle"
req_access = list(access_cent_specops) 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 //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. /obj/machinery/constructable_frame //Made into a seperate type to make future revisions easier.
name = "machine frame" name = "machine frame"
icon = 'icons/obj/stock_parts.dmi' icon = 'icons/obj/stock_parts.dmi'
@@ -113,7 +115,7 @@
break break
if(component_check) if(component_check)
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) 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() new_machine.component_parts.Cut()
src.circuit.construct(new_machine) src.circuit.construct(new_machine)
for(var/obj/O in src) for(var/obj/O in src)
@@ -154,260 +156,3 @@
user << desc user << desc
if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil)) if(P && P.loc != src && !istype(P, /obj/item/stack/cable_coil))
user << "\red You cannot add that component to the machine!" 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. // Delete the mob.
del(occupant) del(occupant)
occupant = null occupant = null
name = initial(name)
return return
@@ -442,7 +442,6 @@
src.add_fingerprint(M) src.add_fingerprint(M)
/obj/machinery/cryopod/verb/eject() /obj/machinery/cryopod/verb/eject()
set name = "Eject Pod" set name = "Eject Pod"
set category = "Object" set category = "Object"
set src in oview(1) set src in oview(1)
@@ -464,6 +463,8 @@
src.go_out() src.go_out()
add_fingerprint(usr) add_fingerprint(usr)
name = initial(name)
return return
/obj/machinery/cryopod/verb/move_inside() /obj/machinery/cryopod/verb/move_inside()
@@ -511,6 +512,7 @@
time_entered = world.time time_entered = world.time
src.add_fingerprint(usr) src.add_fingerprint(usr)
name = "[name] ([usr.name])"
return return

View File

@@ -913,9 +913,9 @@ About the new airlock wires panel:
if(operating == -1) if(operating == -1)
new /obj/item/weapon/circuitboard/broken(src.loc) new /obj/item/weapon/circuitboard/broken(src.loc)
operating = 0 operating = 0
else else
if (!electronics) create_electronics() if (!electronics) create_electronics()
electronics.loc = src.loc electronics.loc = src.loc
electronics = null electronics = null
@@ -1059,13 +1059,17 @@ About the new airlock wires panel:
/obj/machinery/door/airlock/New(var/newloc, var/obj/structure/door_assembly/assembly=null) /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 is given, create the new door from the assembly
if (assembly) if (assembly)
assembly_type = assembly.type assembly_type = assembly.type
electronics = assembly.electronics electronics = assembly.electronics
electronics.loc = src electronics.loc = src
//update the door's access to match the electronics' //update the door's access to match the electronics'
secured_wires = electronics.secure secured_wires = electronics.secure
if(electronics.one_access) if(electronics.one_access)
@@ -1073,7 +1077,7 @@ About the new airlock wires panel:
req_one_access = src.electronics.conf_access req_one_access = src.electronics.conf_access
else else
req_access = src.electronics.conf_access req_access = src.electronics.conf_access
//get the name from the assembly //get the name from the assembly
if(assembly.created_name) if(assembly.created_name)
name = assembly.created_name name = assembly.created_name
@@ -1093,8 +1097,8 @@ About the new airlock wires panel:
src.closeOther = A src.closeOther = A
break break
// Most doors will never be deconstructed over the course of a round, // Most doors will never be deconstructed over the course of a round,
// so as an optimization defer the creation of electronics until // so as an optimization defer the creation of electronics until
// the airlock is deconstructed // the airlock is deconstructed
/obj/machinery/door/airlock/proc/create_electronics() /obj/machinery/door/airlock/proc/create_electronics()
//create new electronics //create new electronics
@@ -1102,7 +1106,7 @@ About the new airlock wires panel:
src.electronics = new/obj/item/weapon/airlock_electronics/secure( src.loc ) src.electronics = new/obj/item/weapon/airlock_electronics/secure( src.loc )
else else
src.electronics = new/obj/item/weapon/airlock_electronics( src.loc ) src.electronics = new/obj/item/weapon/airlock_electronics( src.loc )
//update the electronics to match the door's access //update the electronics to match the door's access
if(!src.req_access) if(!src.req_access)
src.check_access() src.check_access()

View File

@@ -25,6 +25,8 @@
var/air_properties_vary_with_direction = 0 var/air_properties_vary_with_direction = 0
var/maxhealth = 300 var/maxhealth = 300
var/health 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/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 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)) if(!(Proj.damage_type == BRUTE || Proj.damage_type == BURN))
return 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) if(Proj.damage)
take_damage(Proj.damage) take_damage(Proj.damage)
/obj/machinery/door/hitby(AM as mob|obj) /obj/machinery/door/hitby(AM as mob|obj)
..() ..()

View File

@@ -6,6 +6,7 @@
var/id = 1.0 var/id = 1.0
dir = 1 dir = 1
explosion_resistance = 25 explosion_resistance = 25
emitter_resistance = 50 // Lots of emitter blasts, it's blast door after all.
/obj/machinery/door/poddoor/New() /obj/machinery/door/poddoor/New()
. = ..() . = ..()
@@ -28,6 +29,7 @@
icon_state = "pdoor0" icon_state = "pdoor0"
return return
/obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob) /obj/machinery/door/poddoor/attackby(obj/item/weapon/C as obj, mob/user as mob)
src.add_fingerprint(user) src.add_fingerprint(user)
if (!( istype(C, /obj/item/weapon/crowbar) || (istype(C, /obj/item/weapon/twohanded/fireaxe) && C:wielded == 1) )) 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. /*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.*/ 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(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.
text = stars(text) if(speaking)
text = speaking.scramble(text)
else
text = stars(text)
var/name_used = M.GetVoice() var/name_used = M.GetVoice()
//This communication is imperfect because the holopad "filters" voices and is only designed to connect to the master only. //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) master.show_message(rendered, 2)
return return

View File

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

View File

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

View File

@@ -1,6 +1,6 @@
/obj/item/mecha_parts/mecha_equipment/tool/sleeper /obj/item/mecha_parts/mecha_equipment/tool/sleeper
name = "Mounted Sleeper" name = "mounted sleeper"
desc = "Mounted Sleeper. (Can be attached to: Medical Exosuits)" desc = "A sleeper. Mountable to an exosuit. (Can be attached to: Medical Exosuits)"
icon = 'icons/obj/Cryogenic2.dmi' icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "sleeper_0" icon_state = "sleeper_0"
origin_tech = "programming=2;biotech=3" origin_tech = "programming=2;biotech=3"
@@ -373,7 +373,7 @@
return 1 return 1
/obj/item/mecha_parts/mecha_equipment/tool/syringe_gun /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)" 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 = 'icons/obj/gun.dmi'
icon_state = "syringegun" icon_state = "syringegun"

View File

@@ -1,5 +1,5 @@
/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp /obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp
name = "Hydraulic Clamp" name = "hydraulic clamp"
icon_state = "mecha_clamp" icon_state = "mecha_clamp"
equip_cooldown = 15 equip_cooldown = 15
energy_drain = 10 energy_drain = 10
@@ -64,7 +64,7 @@
return 1 return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill /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)" desc = "This is the drill that'll pierce the heavens! (Can be attached to: Combat and Engineering Exosuits)"
icon_state = "mecha_drill" icon_state = "mecha_drill"
equip_cooldown = 30 equip_cooldown = 30
@@ -115,7 +115,7 @@
return 1 return 1
/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill /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)" 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" icon_state = "mecha_diamond_drill"
origin_tech = "materials=4;engineering=3" origin_tech = "materials=4;engineering=3"
@@ -166,7 +166,7 @@
return 1 return 1
/obj/item/mecha_parts/mecha_equipment/tool/extinguisher /obj/item/mecha_parts/mecha_equipment/tool/extinguisher
name = "Extinguisher" name = "extinguisher"
desc = "Exosuit-mounted extinguisher (Can be attached to: Engineering exosuits)" desc = "Exosuit-mounted extinguisher (Can be attached to: Engineering exosuits)"
icon_state = "mecha_exting" icon_state = "mecha_exting"
equip_cooldown = 5 equip_cooldown = 5
@@ -240,7 +240,7 @@
/obj/item/mecha_parts/mecha_equipment/tool/rcd /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)" desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)"
icon_state = "mecha_rcd" icon_state = "mecha_rcd"
origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4" origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4"
@@ -345,7 +345,7 @@
/obj/item/mecha_parts/mecha_equipment/teleporter /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." desc = "An exosuit module that allows exosuits to teleport to any position in view."
icon_state = "mecha_teleport" icon_state = "mecha_teleport"
origin_tech = "bluespace=10" origin_tech = "bluespace=10"
@@ -365,7 +365,7 @@
/obj/item/mecha_parts/mecha_equipment/wormhole_generator /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." desc = "An exosuit module that allows generating of small quasi-stable wormholes."
icon_state = "mecha_wholegen" icon_state = "mecha_wholegen"
origin_tech = "bluespace=3" origin_tech = "bluespace=3"
@@ -415,7 +415,7 @@
return return
/obj/item/mecha_parts/mecha_equipment/gravcatapult /obj/item/mecha_parts/mecha_equipment/gravcatapult
name = "Gravitational Catapult" name = "gravitational catapult"
desc = "An exosuit mounted Gravitational Catapult." desc = "An exosuit mounted Gravitational Catapult."
icon_state = "mecha_teleport" icon_state = "mecha_teleport"
origin_tech = "bluespace=2;magnets=3" 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. /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)" name = "\improper CCW armor booster"
desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate." desc = "Close-combat armor booster. Boosts exosuit armor against armed melee attacks. Requires energy to operate."
icon_state = "mecha_abooster_ccw" icon_state = "mecha_abooster_ccw"
origin_tech = "materials=3" origin_tech = "materials=3"
equip_cooldown = 10 equip_cooldown = 10
@@ -541,8 +541,8 @@
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
name = "Armor Booster Module (Ranged Weaponry)" name = "\improper RW armor booster"
desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate." 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" icon_state = "mecha_abooster_proj"
origin_tech = "materials=4" origin_tech = "materials=4"
equip_cooldown = 10 equip_cooldown = 10
@@ -612,8 +612,8 @@
/obj/item/mecha_parts/mecha_equipment/repair_droid /obj/item/mecha_parts/mecha_equipment/repair_droid
name = "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." 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" icon_state = "repair_droid"
origin_tech = "magnets=3;programming=3" origin_tech = "magnets=3;programming=3"
equip_cooldown = 20 equip_cooldown = 20
@@ -702,7 +702,7 @@
/obj/item/mecha_parts/mecha_equipment/tesla_energy_relay /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." desc = "Wirelessly drains energy from any available power channel in area. The performance index is quite low."
icon_state = "tesla" icon_state = "tesla"
origin_tech = "magnets=4;syndicate=2" origin_tech = "magnets=4;syndicate=2"
@@ -814,7 +814,7 @@
/obj/item/mecha_parts/mecha_equipment/generator /obj/item/mecha_parts/mecha_equipment/generator
name = "Phoron Generator" name = "phoron generator"
desc = "Generates power using solid phoron as fuel. Pollutes the environment." desc = "Generates power using solid phoron as fuel. Pollutes the environment."
icon_state = "tesla" icon_state = "tesla"
origin_tech = "phorontech=2;powerstorage=2;engineering=1" origin_tech = "phorontech=2;powerstorage=2;engineering=1"
@@ -952,7 +952,7 @@
/obj/item/mecha_parts/mecha_equipment/generator/nuclear /obj/item/mecha_parts/mecha_equipment/generator/nuclear
name = "ExoNuclear Reactor" name = "\improper ExoNuclear reactor"
desc = "Generates power using uranium. Pollutes the environment." desc = "Generates power using uranium. Pollutes the environment."
icon_state = "tesla" icon_state = "tesla"
origin_tech = "powerstorage=3;engineering=3" origin_tech = "powerstorage=3;engineering=3"
@@ -989,7 +989,7 @@
//This is pretty much just for the death-ripley so that it is harmless //This is pretty much just for the death-ripley so that it is harmless
/obj/item/mecha_parts/mecha_equipment/tool/safety_clamp /obj/item/mecha_parts/mecha_equipment/tool/safety_clamp
name = "KILL CLAMP" name = "\improper KILL CLAMP"
icon_state = "mecha_clamp" icon_state = "mecha_clamp"
equip_cooldown = 15 equip_cooldown = 15
energy_drain = 0 energy_drain = 0
@@ -1208,4 +1208,4 @@
if (OCCUPIED|LOCKED) if (OCCUPIED|LOCKED)
usr << "\red All of the passenger compartments are already occupied or locked!" usr << "\red All of the passenger compartments are already occupied or locked!"
if (0) if (0)
usr << "\red \The [src] doesn't have a passenger compartment." usr << "\red \The [src] doesn't have a passenger compartment."

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.) //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 /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." desc = "Using directed ion bursts and cunning solar wind reflection technique, this device enables controlled space flight."
icon_state = "mecha_equip" icon_state = "mecha_equip"
equip_cooldown = 5 equip_cooldown = 5
@@ -108,7 +108,7 @@
/obj/item/mecha_parts/mecha_equipment/defence_shocker /obj/item/mecha_parts/mecha_equipment/defence_shocker
name = "Exosuit Defence Shocker" name = "exosuit defence shocker"
desc = "" desc = ""
icon_state = "mecha_teleport" icon_state = "mecha_teleport"
equip_cooldown = 10 equip_cooldown = 10

View File

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

View File

@@ -46,8 +46,8 @@
return return
// temporary fix for broken icon until somebody gets around to make these player-buildable // temporary fix for broken icon until somebody gets around to make these player-buildable
/turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob) /turf/simulated/floor/mech_bay_recharge_floor/attackby(obj/item/C as obj, mob/user as mob)
..() ..()
if(floor_type) if(floor_type)
icon_state = "recharge_floor" icon_state = "recharge_floor"
else else
@@ -190,45 +190,28 @@
var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src) var/turf/simulated/floor/mech_bay_recharge_floor/F = locate() in range(1,src)
if(F) if(F)
F.init_devices() F.init_devices()
ui_interact(user)
var/output = "<html><head><title>[src.name]</title></head><body>"
if(!recharge_floor) /obj/machinery/computer/mech_bay_power_console/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
output += "<font color='red'>Mech Bay Recharge Station not initialized.</font><br>" 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 else
output += {"<b>Mech Bay Recharge Station Data:</b><div style='margin-left: 15px;'> data["has_mech"] = 0
<b>Mecha: </b>[recharge_floor.recharging_mecha||"None"]<br>"} ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if(recharge_floor.recharging_mecha) if (!ui)
var/cell_charge = recharge_floor.recharging_mecha.get_charge() // the ui does not exist, so we'll create a new() one
output += "<b>Cell charge: </b>[isnull(cell_charge)?"No powercell found":"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]"]<br>" // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
output += "</div>" ui = new(user, src, ui_key, "mech_bay_console.tmpl", "Mech Bay Control Console", 500, 325)
if(!recharge_port) // when the ui is first opened this is the data it will use
output += "<font color='red'>Mech Bay Power Port not initialized.</font><br>" ui.set_initial_data(data)
else // open the new ui window
output += "<b>Mech Bay Power Port Status: </b>[recharge_port.active()?"Now charging":"On hold"]<br>" ui.open()
// auto update every Master Controller tick
/* ui.set_auto_update(1)
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
*/

View File

@@ -203,6 +203,12 @@
radio.talk_into(M, text) radio.talk_into(M, text)
return 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 //// ///// Action processing ////
//////////////////////////// ////////////////////////////

View File

@@ -2,6 +2,8 @@
////// Mecha Parts ////// ////// Mecha Parts //////
///////////////////////// /////////////////////////
// Mecha circuitboards can be found in /code/game/objects/items/weapons/circuitboards/mecha.dm
/obj/item/mecha_parts /obj/item/mecha_parts
name = "mecha part" name = "mecha part"
icon = 'icons/mecha/mech_construct.dmi' icon = 'icons/mecha/mech_construct.dmi'
@@ -347,90 +349,3 @@
origin_tech = "materials=3;engineering=3" origin_tech = "materials=3;engineering=3"
construction_time = 200 construction_time = 200
construction_cost = list("metal"=15000)*/ 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" name = "remains"
desc = "They look like human remains. They have a strange aura about them."
gender = PLURAL gender = PLURAL
icon = 'icons/effects/blood.dmi' icon = 'icons/effects/blood.dmi'
icon_state = "remains" 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 /obj/effect/decal/remains/xeno
name = "remains"
desc = "They look like the remains of something... alien. They have a strange aura about them." 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" icon_state = "remainsxeno"
anchored = 1
/obj/effect/decal/remains/robot /obj/effect/decal/remains/robot
name = "remains"
desc = "They look like the remains of something mechanical. They have a strange aura about them." desc = "They look like the remains of something mechanical. They have a strange aura about them."
gender = PLURAL
icon = 'icons/mob/robots.dmi' icon = 'icons/mob/robots.dmi'
icon_state = "remainsrobot" 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 // APC HULL
/obj/item/apc_frame /obj/item/apc_frame
name = "APC frame" name = "\improper APC frame"
desc = "Used for repairing or building APCs" desc = "Used for repairing or building APCs"
icon = 'icons/obj/apc_repair.dmi' icon = 'icons/obj/apc_repair.dmi'
icon_state = "apc_frame" icon_state = "apc_frame"

View File

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

View File

@@ -4,7 +4,7 @@
var/global/list/obj/item/device/pda/PDAs = list() var/global/list/obj/item/device/pda/PDAs = list()
/obj/item/device/pda /obj/item/device/pda
name = "PDA" name = "\improper PDA"
desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge." desc = "A portable microcomputer by Thinktronic Systems, LTD. Functionality determined by a preprogrammed ROM cartridge."
icon = 'icons/obj/pda.dmi' icon = 'icons/obj/pda.dmi'
icon_state = "pda" icon_state = "pda"
@@ -1391,7 +1391,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
//Some spare PDAs in a box //Some spare PDAs in a box
/obj/item/weapon/storage/box/PDAs /obj/item/weapon/storage/box/PDAs
name = "spare PDAs" name = "box of spare PDAs"
desc = "A box of spare PDA microcomputers." desc = "A box of spare PDA microcomputers."
icon = 'icons/obj/pda.dmi' icon = 'icons/obj/pda.dmi'
icon_state = "pdabox" icon_state = "pdabox"
@@ -1414,4 +1414,4 @@ var/global/list/obj/item/device/pda/PDAs = list()
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP // Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
/obj/item/device/pda/emp_act(severity) /obj/item/device/pda/emp_act(severity)
for(var/atom/A in src) for(var/atom/A in src)
A.emp_act(severity) A.emp_act(severity)

View File

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

View File

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

View File

@@ -9,6 +9,8 @@
var/flush = null var/flush = null
origin_tech = "programming=4;materials=4" 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) /obj/item/device/aicard/attack(mob/living/silicon/decoy/M as mob, mob/user as mob)
if (!istype (M, /mob/living/silicon/decoy)) if (!istype (M, /mob/living/silicon/decoy))
return ..() return ..()
@@ -151,6 +153,8 @@
ai.control_disabled = 1 ai.control_disabled = 1
ai.aiRestorePowerRoutine = 0 ai.aiRestorePowerRoutine = 0
ai.aiRadio.disabledAi = 1 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>") 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>") user.attack_log += text("\[[time_stamp()]\] <font color='red'>Used the [src.name] to card [ai.name] ([ai.ckey])</font>")
@@ -166,11 +170,18 @@
/obj/item/device/aicard/proc/clear() /obj/item/device/aicard/proc/clear()
name = "inteliCard" name = "inteliCard"
carded_ai = null
update_icon() 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) /obj/item/device/aicard/relaymove(var/mob/user, var/direction)
if(src.loc && istype(src.loc.loc, /obj/item/rig_module)) if(src.loc && istype(src.loc.loc, /obj/item/rig_module))
var/obj/item/rig_module/module = src.loc.loc var/obj/item/rig_module/module = src.loc.loc
if(!module.holder || !direction) if(!module.holder || !direction)
return return
module.holder.forced_move(direction)*/ module.holder.forced_move(direction)*/

View File

@@ -15,4 +15,4 @@
/obj/item/device/binoculars/attack_self(mob/user) /obj/item/device/binoculars/attack_self(mob/user)
zoom() zoom()

View File

@@ -1,5 +1,5 @@
/obj/item/device/chameleon /obj/item/device/chameleon
name = "chameleon-projector" name = "chameleon projector"
icon_state = "shield0" icon_state = "shield0"
flags = FPRINT | TABLEPASS| CONDUCT flags = FPRINT | TABLEPASS| CONDUCT
slot_flags = SLOT_BELT slot_flags = SLOT_BELT
@@ -142,4 +142,4 @@
/obj/effect/dummy/chameleon/Del() /obj/effect/dummy/chameleon/Del()
master.disrupt(0) master.disrupt(0)
..() ..()

View File

@@ -5,9 +5,9 @@
*/ */
/obj/item/device/debugger /obj/item/device/debugger
icon = 'icons/obj/hacktool.dmi'
name = "debugger" name = "debugger"
desc = "Used to debug electronic equipment." desc = "Used to debug electronic equipment."
icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g" icon_state = "hacktool-g"
flags = FPRINT | TABLEPASS| CONDUCT flags = FPRINT | TABLEPASS| CONDUCT
force = 5.0 force = 5.0
@@ -43,4 +43,4 @@
user << "\red There is a software error with the device." user << "\red There is a software error with the device."
else else
user << "\blue The device's software appears to be fine." user << "\blue The device's software appears to be fine."
return 1 return 1

View File

@@ -223,4 +223,4 @@
icon_state = initial(icon_state) icon_state = initial(icon_state)
/obj/item/device/flashlight/slime/attack_self(mob/user) /obj/item/device/flashlight/slime/attack_self(mob/user)
return //Bio-luminescence does not toggle. return //Bio-luminescence does not toggle.

View File

@@ -191,4 +191,4 @@
#undef LIGHT_OK #undef LIGHT_OK
#undef LIGHT_EMPTY #undef LIGHT_EMPTY
#undef LIGHT_BROKEN #undef LIGHT_BROKEN
#undef LIGHT_BURNED #undef LIGHT_BURNED

View File

@@ -52,4 +52,4 @@
emagged = 1 emagged = 1
insults = rand(1, 3)//to prevent dickflooding insults = rand(1, 3)//to prevent dickflooding
return return
return return

View File

@@ -69,4 +69,4 @@
/obj/item/device/modkit/tajaran /obj/item/device/modkit/tajaran
name = "tajaran hardsuit modification kit" name = "tajaran hardsuit modification kit"
desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran." desc = "A kit containing all the needed tools and parts to modify a hardsuit for another user. This one looks like it's meant for Tajaran."
target_species = "Tajara" target_species = "Tajara"

View File

@@ -19,4 +19,4 @@
matter = list("metal" = 50,"glass" = 20) matter = list("metal" = 50,"glass" = 20)
origin_tech = "magnets=1;engineering=1" origin_tech = "magnets=1;engineering=1"
var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage var/obj/machinery/telecomms/buffer // simple machine buffer for device linkage

View File

@@ -304,10 +304,15 @@
/obj/item/device/paicard/emp_act(severity) /obj/item/device/paicard/emp_act(severity)
for(var/mob/M in src) for(var/mob/M in src)
M.emp_act(severity) M.emp_act(severity)
..()
/obj/item/device/paicard/ex_act(severity) /obj/item/device/paicard/ex_act(severity)
if(pai) if(pai)
pai.ex_act(severity) pai.ex_act(severity)
else else
del(src) 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 // Powersink - used to drain station power
/obj/item/device/powersink /obj/item/device/powersink
desc = "A nulling power sink which drains energy from electrical systems."
name = "power sink" name = "power sink"
desc = "A nulling power sink which drains energy from electrical systems."
icon_state = "powersink0" icon_state = "powersink0"
item_state = "electronic" item_state = "electronic"
w_class = 4.0 w_class = 4.0

View File

@@ -1,5 +1,5 @@
/obj/item/device/radio/beacon /obj/item/device/radio/beacon
name = "Tracking Beacon" name = "tracking beacon"
desc = "A beacon used by a teleporter." desc = "A beacon used by a teleporter."
icon_state = "beacon" icon_state = "beacon"
item_state = "signaler" item_state = "signaler"
@@ -46,4 +46,4 @@
new /obj/machinery/power/singularity_beacon/syndicate( user.loc ) new /obj/machinery/power/singularity_beacon/syndicate( user.loc )
playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) playsound(src, 'sound/effects/pop.ogg', 100, 1, 1)
del(src) del(src)
return return

View File

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

View File

@@ -31,7 +31,7 @@
return return
user << "The following channels are built-in:" user << "The following channels are built-in:"
user << radio_desc user << radio_desc
/obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel) /obj/item/device/radio/headset/handle_message_mode(mob/living/M as mob, message, channel)
if (channel == "special") if (channel == "special")
@@ -61,7 +61,7 @@
/obj/item/device/radio/headset/binary /obj/item/device/radio/headset/binary
origin_tech = "syndicate=3" origin_tech = "syndicate=3"
ks1type = /obj/item/device/encryptionkey/binary ks1type = /obj/item/device/encryptionkey/binary
/obj/item/device/radio/headset/headset_sec /obj/item/device/radio/headset/headset_sec
name = "security radio headset" name = "security radio headset"
@@ -120,7 +120,7 @@
ks2type = /obj/item/device/encryptionkey/heads/captain 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. /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." desc = "Integrated AI radio transceiver."
icon = 'icons/obj/robot_component.dmi' icon = 'icons/obj/robot_component.dmi'
icon_state = "radio" icon_state = "radio"
@@ -135,7 +135,7 @@
return ..(freq, level, 1) return ..(freq, level, 1)
/obj/item/device/radio/headset/heads/rd /obj/item/device/radio/headset/heads/rd
name = "Research Director's headset" name = "research director's headset"
desc = "Headset of the researching God." desc = "Headset of the researching God."
icon_state = "com_headset" icon_state = "com_headset"
item_state = "headset" item_state = "headset"
@@ -198,7 +198,7 @@
ks2type = /obj/item/device/encryptionkey/headset_service ks2type = /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/ert /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." desc = "The headset of the boss's boss."
icon_state = "com_headset" icon_state = "com_headset"
item_state = "headset" item_state = "headset"

View File

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

View File

@@ -182,4 +182,4 @@
if (cell) if (cell)
user << "The charge meter reads [round(cell.percent())]%." user << "The charge meter reads [round(cell.percent())]%."
else else
user << "It doesn't have a power cell installed." user << "It doesn't have a power cell installed."

View File

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

View File

@@ -1,8 +1,8 @@
/obj/item/device/transfer_valve /obj/item/device/transfer_valve
icon = 'icons/obj/assemblies.dmi'
name = "tank transfer valve" name = "tank transfer valve"
icon_state = "valve_1"
desc = "Regulates the transfer of air between two tanks" 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_one
var/obj/item/weapon/tank/tank_two var/obj/item/weapon/tank/tank_two
var/obj/item/device/attached_device var/obj/item/device/attached_device
@@ -210,4 +210,4 @@
// this doesn't do anything but the timer etc. expects it to be here // this doesn't do anything but the timer etc. expects it to be here
// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs // eventually maybe have it update icon to show state (timer, prox etc.) like old bombs
/obj/item/device/transfer_valve/proc/c_state() /obj/item/device/transfer_valve/proc/c_state()
return return

View File

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

View File

@@ -390,4 +390,4 @@
for(var/mob/M in viewers(1, loc)) for(var/mob/M in viewers(1, loc))
if((M.client && M.machine == src)) if((M.client && M.machine == src))
attack_self(M) attack_self(M)
return return

View File

@@ -35,4 +35,4 @@
emagged = 1 emagged = 1
insults = rand(1, 3)//to prevent dickflooding insults = rand(1, 3)//to prevent dickflooding
return return
return return

View File

@@ -1,6 +1,6 @@
/obj/item/latexballon /obj/item/latexballon
name = "Latex glove" name = "latex glove"
desc = "" //todo desc = "A latex glove, usually used as a balloon."
icon_state = "latexballon" icon_state = "latexballon"
item_state = "lgloves" item_state = "lgloves"
force = 0 force = 0
@@ -45,4 +45,4 @@
/obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob) /obj/item/latexballon/attackby(obj/item/W as obj, mob/user as mob)
if (can_puncture(W)) if (can_puncture(W))
burst() burst()

View File

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

View File

@@ -178,4 +178,4 @@
b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4) b2y1 = pixel_y + pick(1,1,1,1,2,2,3,3,4)
b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4) b2y2 = pixel_y - pick(1,1,1,1,2,2,3,3,4)
Target.bulletholes.Add(src) Target.bulletholes.Add(src)

View File

@@ -259,4 +259,4 @@
return return
affecting.status |= ORGAN_SPLINTED affecting.status |= ORGAN_SPLINTED
use(1) use(1)
return return

View File

@@ -42,4 +42,4 @@
if (do_surgery(H,user,src)) if (do_surgery(H,user,src))
return return
else else
user << "<span class='notice'>Nothing to fix in here.</span>" user << "<span class='notice'>Nothing to fix in here.</span>"

View File

@@ -133,4 +133,4 @@
var/obj/item/stack/sheet/leather/HS = new(src.loc) var/obj/item/stack/sheet/leather/HS = new(src.loc)
HS.amount = 1 HS.amount = 1
wetness = initial(wetness) wetness = initial(wetness)
src.use(1) src.use(1)

View File

@@ -200,4 +200,4 @@ obj/item/stack/sheet/mineral/iron/New()
sheettype = "osmium" sheettype = "osmium"
origin_tech = "materials=5" origin_tech = "materials=5"
color = "#9999FF" color = "#9999FF"
perunit = 2000 perunit = 2000

View File

@@ -200,4 +200,4 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null) /obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
recipes = cardboard_recipes recipes = cardboard_recipes
return ..() return ..()

View File

@@ -23,4 +23,4 @@
else else
for (var/obj/item/stack/sheet/stack in locate(src.x,src.y,src.z)) for (var/obj/item/stack/sheet/stack in locate(src.x,src.y,src.z))
S.add(stack,user) S.add(stack,user)
..()*/ ..()*/

View File

@@ -265,4 +265,4 @@
New(title, recipes, req_amount = 1) New(title, recipes, req_amount = 1)
src.title = title src.title = title
src.recipes = recipes src.recipes = recipes
src.req_amount = req_amount src.req_amount = req_amount

View File

@@ -33,4 +33,4 @@
new/obj/item/stack/light_w(user.loc) new/obj/item/stack/light_w(user.loc)
if(amount <= 0) if(amount <= 0)
user.drop_from_inventory(src) user.drop_from_inventory(src)
del(src) del(src)

View File

@@ -113,7 +113,7 @@
* Fake singularity * Fake singularity
*/ */
/obj/item/toy/spinningtoy /obj/item/toy/spinningtoy
name = "Gravitational Singularity" name = "gravitational singularity"
desc = "\"Singulo\" brand spinning toy." desc = "\"Singulo\" brand spinning toy."
icon = 'icons/obj/singularity.dmi' icon = 'icons/obj/singularity.dmi'
icon_state = "singularity_s1" icon_state = "singularity_s1"
@@ -420,7 +420,7 @@
* Water flower * Water flower
*/ */
/obj/item/toy/waterflower /obj/item/toy/waterflower
name = "Water Flower" name = "water flower"
desc = "A seemingly innocent sunflower...with a twist." desc = "A seemingly innocent sunflower...with a twist."
icon = 'icons/obj/harvest.dmi' icon = 'icons/obj/harvest.dmi'
icon_state = "sunflower" icon_state = "sunflower"
@@ -645,4 +645,4 @@
item_state = "inflatable" item_state = "inflatable"
flags = FPRINT | TABLEPASS flags = FPRINT | TABLEPASS
icon = 'icons/obj/clothing/belts.dmi' icon = 'icons/obj/clothing/belts.dmi'
slot_flags = SLOT_BELT slot_flags = SLOT_BELT

View File

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

View File

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

View File

@@ -112,4 +112,4 @@ RSF
R.cell.use(used_energy) R.cell.use(used_energy)
else else
stored_matter-- stored_matter--
user << "The RSF now holds [stored_matter]/30 fabrication-units." user << "The RSF now holds [stored_matter]/30 fabrication-units."

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"

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