Finalizes work, adds designs to research.

This commit is contained in:
Neerti
2016-09-13 15:39:38 -04:00
parent bc0fdd2051
commit 0debdd3bf2
16 changed files with 702 additions and 483 deletions
+49 -86
View File
@@ -115,13 +115,16 @@
return null
/obj/item/integrated_circuit/interact(mob/user)
if(get_dist(src, user) > 1)
if(get_dist(get_turf(src), user) > 1)
user.unset_machine(src)
return
var/HTML = "<html><head><title>[src.name]</title></head><body>"
HTML += "<div align='center'>"
HTML += "<table border='1' style='undefined;table-layout: fixed; width: 424px'>"
HTML += "<br><a href='?src=\ref[src];user=\ref[user]'>\[Refresh\]</a> | "
HTML += "<a href='?src=\ref[src];user=\ref[user];rename=1'>\[Rename\]</a><br>"
HTML += "<colgroup>"
HTML += "<col style='width: 121px'>"
HTML += "<col style='width: 181px'>"
@@ -143,15 +146,15 @@
io = get_pin_ref("input",i)
if(io)
if(io.linked.len)
words = "<a href=?src=\ref[src];action=wire;user=\ref[user]><b>[io.name] [io.display_data()]</b></a><br>"
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><b>[io.name] [io.display_data()]</b></a><br>"
for(var/datum/integrated_io/linked in io.linked)
words += "<a href=?src=\ref[src];action=unwire;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];action=examine;user=\ref[user]>[linked.holder]</a><br>"
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
else // "Click <a href=?src=\ref[src];action=start>here</a>!"
words = "<a href=?src=\ref[src];action=wire;user=\ref[user]>[io.name] [io.display_data()]</a><br>"
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>[io.name] [io.display_data()]</a><br>"
for(var/datum/integrated_io/linked in io.linked)
words += "<a href=?src=\ref[src];action=unwire;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];action=examine;user=\ref[user]>[linked.holder]</a><br>"
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
if(outputs.len > inputs.len)
height = Floor(outputs.len / inputs.len)
//world << "I wrote [words] at ([i],[j])."
@@ -166,15 +169,15 @@
io = get_pin_ref("output",i)
if(io)
if(io.linked.len)
words = "<a href=?src=\ref[src];action=wire;user=\ref[user]><b>[io.name] [io.display_data()]</b></a><br>"
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><b>[io.name] [io.display_data()]</b></a><br>"
for(var/datum/integrated_io/linked in io.linked)
words += "<a href=?src=\ref[src];action=unwire;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];action=examine;user=\ref[user]>[linked.holder]</a><br>"
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
else
words = "<a href=?src=\ref[src];action=wire;user=\ref[user]>[io.name] [io.display_data()]</a><br>"
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>[io.name] [io.display_data()]</a><br>"
for(var/datum/integrated_io/linked in io.linked)
words += "<a href=?src=\ref[src];action=unwire;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];action=examine;user=\ref[user]>[linked.holder]</a><br>"
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
if(inputs.len > outputs.len)
height = Floor(inputs.len / outputs.len)
//world << "I wrote [words] at ([i],[j])."
@@ -190,15 +193,15 @@
io = get_pin_ref("activator",i)
if(io)
if(io.linked.len)
words = "<a href=?src=\ref[src];action=wire;user=\ref[user]><font color='FF0000'><b>[io.name]</b></font></a><br>"
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><font color='FF0000'><b>[io.name]</b></font></a><br>"
for(var/datum/integrated_io/linked in io.linked)
words += "<a href=?src=\ref[src];action=unwire;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];action=examine;user=\ref[user]>[linked.holder]</a><br>"
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];examine=1;user=\ref[user]>[linked.holder]</a><br>"
else // "Click <a href=?src=\ref[src];action=start>here</a>!"
words = "<a href=?src=\ref[src];action=wire;user=\ref[user]><font color='FF0000'>[io.name]</font></a><br>"
words = "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]><font color='FF0000'>[io.name]</font></a><br>"
for(var/datum/integrated_io/linked in io.linked)
words += "<a href=?src=\ref[src];action=unwire;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src[src];action=examine;user=\ref[user]>[linked.holder]</a><br>"
words += "<a href=?src=\ref[src];wire=1;user=\ref[user];pin=\ref[io]>\[[linked.name]\]</a> \
@ <a href=?src=\ref[linked.holder];examine=1;user=\ref[user]>[linked.holder]</a><br>"
HTML += "<tr>"
HTML += "<td colspan='3' align='center'>[words]</td>"
HTML += "</tr>"
@@ -206,50 +209,47 @@
HTML += "</table>"
HTML += "</div>"
HTML += "<br><br><a href='?src=\ref[src]'>Refresh</a>"
HTML += "<br><font color='0000FF'>[extended_desc]</font>"
HTML += "</body></html>"
user << browse(HTML, "window=circuit-\ref[src];size=400x440;border=1;can_resize=1;can_close=1;can_minimize=1")
user << browse(HTML, "window=circuit-\ref[src];size=600x350;border=1;can_resize=1;can_close=1;can_minimize=1")
user.set_machine(src)
onclose(user, "circuit-\ref[src]")
//user << sanitize(HTML, "window=debug;size=400x400;border=1;can_resize=1;can_close=1;can_minimize=1")
//world << sanitize(HTML)
/obj/item/integrated_circuit/Topic(href, href_list[])
if(..())
var/mob/living/user = locate(href_list["user"]) in mob_list
var/pin = locate(href_list["pin"]) in inputs + outputs + activators
if(!user || !user.Adjacent(get_turf(src)) )
return 1
var/user = locate(href_list["user"]) in mob_list
var/pin = locate(href_list["pin"]) in contents
switch(href_list["action"])
if("examine")
examine(user)
if("wire")
if(ishuman(user) && Adjacent(user))
var/mob/living/carbon/human/H = user
var/obj/item/device/integrated_electronics/wirer/wirer = null
if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
wirer = H.r_hand
else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
wirer = H.l_hand
if(href_list["wire"])
if(ishuman(user) && Adjacent(user))
var/mob/living/carbon/human/H = user
var/obj/item/device/integrated_electronics/wirer/wirer = null
if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
wirer = H.r_hand
else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
wirer = H.l_hand
if(wirer && pin)
wirer.wire(pin, user)
else
user << "<span class='warning'>You can't do a whole lot without tools.</span>"
if(wirer && pin)
wirer.wire(pin, user)
else
user << "<span class='warning'>You can't do a whole lot without tools.</span>"
//updateDialog()
world << "[src] received Topic([href], [href_list]) call from [user]."
world << "href_list contained [english_list(href_list)]."
interact(user)
if(href_list["examine"])
examine(user)
if(href_list["rename"])
rename_component(user)
interact(user) // To refresh the UI.
/datum/integrated_io
var/name = "input/output"
var/obj/item/integrated_circuit/holder = null
var/data = null
// var/datum/integrated_io/linked = null
var/list/linked = list()
var/io_type = DATA_CHANNEL
@@ -264,45 +264,6 @@
holder = null
..()
/datum/integrated_io/Topic(href, href_list[])
if(..())
return 1
var/user = locate(href_list["user"]) in mob_list
switch(href_list["action"])
// if("view")
// var/HTML = "<html><head><title>[src.name]</title></head><body>"
// HTML += "Parent: [holder]"
// HTML += "Pin Type: [io_type]"
// HTML += "Linked Pins:<br>"
// for(var/datum/integrated_io/io in src.linked)
// HTML += "<a href=?src=\ref[io];action=view;user=\ref[user]>[io.name] [io.display_data()] @ [io.holder]</a><br>"
// HTML += "<a href=?src=\ref[src];action=interact;user=\ref[user]>\[Wire This\]</a>"
//
// HTML += "</body></html>"
// user << browse(HTML, "window=pin-\ref[src];size=400x400;border=1;can_resize=1;can_close=1;can_minimize=1")
if("examine_holder")
holder.examine(user)
if("wire")
if(ishuman(user))
var/mob/living/carbon/human/H = user
var/obj/item/device/integrated_electronics/wirer/wirer = null
if(istype(H.r_hand, /obj/item/device/integrated_electronics/wirer))
wirer = H.r_hand
else if(istype(H.l_hand, /obj/item/device/integrated_electronics/wirer))
wirer = H.l_hand
if(wirer)
wirer.wire(src, user)
else
user << "<span class='warning'>You can't do a whole lot without tools.</span>"
//updateDialog()
//world << "[src] inside [src.holder] was clicked by [user]."
/datum/integrated_io/proc/display_data()
if(!data)
return "(null)" // Empty data means nothing to show.
@@ -381,8 +342,10 @@
I.push_data()
/obj/item/integrated_circuit/proc/work()
if(last_used + 2 SECONDS > world.time) // All intergrated circuits have an internal cooldown of two seconds to protect from spam.
return 0
last_used = world.time
return
return 1
/obj/item/integrated_circuit/proc/disconnect_all()
for(var/datum/integrated_io/input/I in inputs)
@@ -1,6 +0,0 @@
#define MAX_NUMBER_MEMORY 10000
#define MIN_NUMBER_MEMORY -10000
#define MAX_STRING_MEMORY_LENGTH 20
#define MAX_STRING_CONCATINATOR_LENGTH 250
#define MIN_PULSER_TICK 5 SECONDS
#define DEFAULT_PART_COOLDOWN 3 SECONDS
@@ -29,16 +29,16 @@
icon_state = "addition"
/obj/item/integrated_circuit/arithmetic/addition/work()
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result + I.data
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result + I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// -Subtracting- //
@@ -48,16 +48,16 @@
icon_state = "subtraction"
/obj/item/integrated_circuit/arithmetic/subtraction/work()
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result - I.data
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result - I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// *Multiply* //
@@ -67,16 +67,16 @@
icon_state = "multiplication"
/obj/item/integrated_circuit/arithmetic/subtraction/work()
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result * I.data
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
result = result * I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// /Division/ //
@@ -86,16 +86,16 @@
icon_state = "division"
/obj/item/integrated_circuit/arithmetic/division/work()
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data) && I.data != 0) //No runtimes here.
result = result / I.data
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data) && I.data != 0) //No runtimes here.
result = result / I.data
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// Absolute //
@@ -107,16 +107,16 @@
number_of_outputs = 1
/obj/item/integrated_circuit/arithmetic/absolute/work()
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data) && I.data != 0)
result = abs(result)
if(..())
var/result = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data) && I.data != 0)
result = abs(result)
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// Averaging //
@@ -126,21 +126,21 @@
icon_state = "average"
/obj/item/integrated_circuit/arithmetic/average/work()
var/result = 0
var/inputs_used = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
inputs_used++
result = result + I.data
if(..())
var/result = 0
var/inputs_used = 0
for(var/datum/integrated_io/input/I in inputs)
I.pull_data()
if(isnum(I.data))
inputs_used++
result = result + I.data
if(inputs_used)
result = result / inputs_used
if(inputs_used)
result = result / inputs_used
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.data = result
O.push_data()
// Pi, because why the hell not? //
/obj/item/integrated_circuit/arithmetic/pi
@@ -151,7 +151,7 @@
number_of_outputs = 1
/obj/item/integrated_circuit/arithmetic/pi/work()
var/datum/integrated_io/output/O = outputs[1]
O.data = 3.14159
O.push_data()
..()
if(..())
var/datum/integrated_io/output/O = outputs[1]
O.data = 3.14159
O.push_data()
@@ -9,13 +9,13 @@
var/opened = 0
/obj/item/device/electronic_assembly/medium
name = "electronic setup"
name = "electronic mechanism"
w_class = 3
max_components = 20
max_complexity = 50
/obj/item/device/electronic_assembly/large
name = "electronic device"
name = "electronic machine"
w_class = 4
max_components = 30
max_complexity = 60
@@ -40,7 +40,7 @@
if(!opened)
for(var/obj/item/integrated_circuit/output/screen/S in contents)
if(S.stuff_to_display)
user << "There's a little screen which displays '[S.stuff_to_display]'."
user << "There's a little screen labeled '[S.name]', which displays '[S.stuff_to_display]'."
else
var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents
if(IC)
@@ -86,6 +86,14 @@
playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
opened = !opened
user << "<span class='notice'>You [opened ? "opened" : "closed"] \the [src].</span>"
if(istype(I, /obj/item/device/integrated_electronics/wirer))
if(opened)
var/obj/item/integrated_circuit/IC = input(user, "Which circuit do you want to examine?", "Examination") as null|anything in contents
if(IC)
IC.examine(user)
else
user << "<span class='warning'>\The [src] isn't opened, so you can't fiddle with the internal components. \
Try using a crowbar.</span>"
/obj/item/device/electronic_assembly/attack_self(mob/user)
var/list/available_inputs = list()
@@ -20,33 +20,31 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/num2text/work()
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && isnum(incoming.data))
result = num2text(incoming.data)
if(..())
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && isnum(incoming.data))
result = num2text(incoming.data)
outgoing.data = result
outgoing.push_data()
..()
outgoing.data = result
outgoing.push_data()
/obj/item/integrated_circuit/converter/text2num
name = "number to string"
name = "string to number"
desc = "This circuit can convert a string variable into a number."
icon_state = "addition"
/obj/item/integrated_circuit/converter/text2num/work()
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istext(incoming.data))
result = text2num(incoming.data)
if(..())
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istext(incoming.data))
result = text2num(incoming.data)
outgoing.data = result
outgoing.push_data()
..()
outgoing.data = result
outgoing.push_data()
/obj/item/integrated_circuit/converter/ref2text
name = "reference to string"
@@ -54,17 +52,16 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/ref2text/work()
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istype(incoming.data, /atom/))
var/atom/A = incoming.data
result = A.name
if(..())
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istype(incoming.data, /atom/))
var/atom/A = incoming.data
result = A.name
outgoing.data = result
outgoing.push_data()
..()
outgoing.data = result
outgoing.push_data()
/obj/item/integrated_circuit/converter/lowercase
name = "lowercase string converter"
@@ -72,16 +69,15 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/lowercase/work()
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istext(incoming.data))
result = lowertext(incoming.data)
if(..())
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istext(incoming.data))
result = lowertext(incoming.data)
outgoing.data = result
outgoing.push_data()
..()
outgoing.data = result
outgoing.push_data()
/obj/item/integrated_circuit/converter/uppercase
name = "uppercase string converter"
@@ -89,13 +85,12 @@
icon_state = "addition"
/obj/item/integrated_circuit/converter/uppercase/work()
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istext(incoming.data))
result = uppertext(incoming.data)
if(..())
var/result = null
var/datum/integrated_io/incoming = inputs[1]
var/datum/integrated_io/outgoing = outputs[1]
if(incoming.data && istext(incoming.data))
result = uppertext(incoming.data)
outgoing.data = result
outgoing.push_data()
..()
outgoing.data = result
outgoing.push_data()
@@ -17,21 +17,21 @@
)
/obj/item/integrated_circuit/gps/work()
var/turf/T = get_turf(src)
var/datum/integrated_io/result_x = outputs[1]
var/datum/integrated_io/result_y = outputs[2]
if(..())
var/turf/T = get_turf(src)
var/datum/integrated_io/result_x = outputs[1]
var/datum/integrated_io/result_y = outputs[2]
result_x.data = null
result_y.data = null
if(!T)
return
result_x.data = null
result_y.data = null
if(!T)
return
result_x.data = T.x
result_y.data = T.y
result_x.data = T.x
result_y.data = T.y
for(var/datum/integrated_io/output/O in outputs)
O.push_data()
..()
for(var/datum/integrated_io/output/O in outputs)
O.push_data()
/obj/item/integrated_circuit/abs_to_rel_coords
name = "abs to rel coordinate converter"
@@ -34,9 +34,10 @@
number_of_outputs = 8
/obj/item/integrated_circuit/transfer/splitter/work()
var/datum/integrated_io/I = inputs[1]
for(var/datum/integrated_io/output/O in outputs)
O.data = I.data
if(..())
var/datum/integrated_io/I = inputs[1]
for(var/datum/integrated_io/output/O in outputs)
O.data = I.data
/obj/item/integrated_circuit/transfer/activator_splitter
name = "activator splitter"
@@ -57,12 +58,13 @@
)
/obj/item/integrated_circuit/transfer/activator_splitter/work()
for(var/datum/integrated_io/activate/A in outputs)
if(A == activators[1])
continue
if(A.linked.len)
for(var/datum/integrated_io/activate/target in A.linked)
target.holder.work()
if(..())
for(var/datum/integrated_io/activate/A in outputs)
if(A == activators[1])
continue
if(A.linked.len)
for(var/datum/integrated_io/activate/target in A.linked)
target.holder.work()
/obj/item/integrated_circuit/transfer/activator_splitter/medium
name = "four activator splitter"
@@ -45,6 +45,31 @@
if(A.linked)
A.holder.work()
/obj/item/integrated_circuit/input/textpad
name = "text pad"
desc = "This small text pad allows someone to input a string into the system."
icon_state = "numberpad"
number_of_inputs = 0
number_of_outputs = 1
number_of_activators = 1
complexity = 2
output_names = list(
"string entered"
)
activator_names = list(
"on entered"
)
/obj/item/integrated_circuit/input/textpad/ask_for_input(mob/user)
var/new_input = input(user, "Enter some words, please.","Number pad") as text
if(new_input && istext(new_input))
var/datum/integrated_io/O = outputs[1]
O.data = new_input
O.push_data()
var/datum/integrated_io/A = activators[1]
if(A.linked)
A.holder.work()
/obj/item/integrated_circuit/output/screen
name = "screen"
desc = "This small screen can display a single piece of data, when the machine is examined closely."
+91 -91
View File
@@ -23,17 +23,17 @@
icon_state = "equal"
/obj/item/integrated_circuit/logic/equals/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data == B.data)
O.data = 1
O.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data == B.data)
O.data = 1
O.push_data()
P.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/not
name = "not gate"
@@ -48,14 +48,14 @@
/obj/item/integrated_circuit/logic/not/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/O = outputs[1]
if(A.data)
O.data = !A.data
O.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/O = outputs[1]
if(A.data)
O.data = !A.data
O.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/and
name = "and gate"
@@ -63,18 +63,18 @@
icon_state = "and"
/obj/item/integrated_circuit/logic/and/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data && B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data && B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/or
name = "or gate"
@@ -82,18 +82,18 @@
icon_state = "or"
/obj/item/integrated_circuit/logic/or/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data || B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data || B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/less_than
name = "less than gate"
@@ -101,18 +101,18 @@
icon_state = "less_than"
/obj/item/integrated_circuit/logic/less_than/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data < B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data < B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/less_than_or_equal
name = "less than or equal gate"
@@ -120,18 +120,18 @@
icon_state = "less_than_or_equal"
/obj/item/integrated_circuit/logic/less_than_or_equal/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data <= B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data <= B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/greater_than
name = "greater than gate"
@@ -139,18 +139,18 @@
icon_state = "greater_than"
/obj/item/integrated_circuit/logic/greater_than/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data > B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data > B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
/obj/item/integrated_circuit/logic/greater_than_or_equal
name = "greater_than or equal gate"
@@ -158,15 +158,15 @@
icon_state = "greater_than_or_equal"
/obj/item/integrated_circuit/logic/greater_than_or_equal/work()
..()
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data >= B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
if(..())
var/datum/integrated_io/A = inputs[1]
var/datum/integrated_io/B = inputs[2]
var/datum/integrated_io/O = outputs[1]
var/datum/integrated_io/P = activators[2]
if(A.data >= B.data)
O.data = 1
O.push_data()
A.push_data()
P.push_data()
else
O.data = 0
@@ -1,4 +1,4 @@
/obj/item/integrated_circuit/weapon_firing
/obj/item/integrated_circuit/manipulation/weapon_firing
name = "weapon firing mechanism"
desc = "This somewhat complicated system allows one to slot in a gun, direct it towards a position, and remotely fire it."
extended_desc = "The firing mechanism can slot in most ranged weapons, ballistic and energy. \
@@ -18,11 +18,11 @@
)
var/obj/item/weapon/gun/installed_gun = null
/obj/item/integrated_circuit/weapon_firing/Destroy()
/obj/item/integrated_circuit/manipulation/weapon_firing/Destroy()
qdel(installed_gun)
..()
/obj/item/integrated_circuit/weapon_firing/attackby(var/obj/O, var/mob/user)
/obj/item/integrated_circuit/manipulation/weapon_firing/attackby(var/obj/O, var/mob/user)
if(istype(O, /obj/item/weapon/gun))
var/obj/item/weapon/gun/gun = O
if(installed_gun)
@@ -36,7 +36,7 @@
else
..()
/obj/item/integrated_circuit/weapon_firing/attack_self(var/mob/user)
/obj/item/integrated_circuit/manipulation/weapon_firing/attack_self(var/mob/user)
if(installed_gun)
installed_gun.forceMove(get_turf(src))
user << "<span class='notice'>You slide \the [installed_gun] out of the firing mechanism.</span>"
@@ -45,7 +45,7 @@
else
user << "<span class='notice'>There's no weapon to remove from the mechanism.</span>"
/obj/item/integrated_circuit/weapon_firing/work()
/obj/item/integrated_circuit/manipulation/weapon_firing/work()
if(!installed_gun)
return
@@ -84,4 +84,33 @@
if(!T)
return
installed_gun.Fire_userless(T)
installed_gun.Fire_userless(T)
/obj/item/integrated_circuit/manipulation/smoke
name = "smoke generator"
desc = "Unlike most electronics, creating smoke is completely intentional."
extended_desc = "This smoke generator creates clouds of smoke on command. It can also hold liquids inside, which will go \
into the smoke clouds when activated."
flags = OPENCONTAINER
complexity = 20
number_of_inputs = 0
number_of_outputs = 0
number_of_activators = 1
input_names = list()
activator_names = list(
"create smoke"
)
/obj/item/integrated_circuit/manipulation/smoke/New()
..()
create_reagents(100)
/obj/item/integrated_circuit/manipulation/smoke/work()
if(..())
playsound(src.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
var/datum/effect/effect/system/smoke_spread/chem/smoke_system = new()
smoke_system.set_up(reagents, 10, 0, get_turf(src))
spawn(0)
for(var/i = 1 to 8)
smoke_system.start()
reagents.clear_reagents()
@@ -18,11 +18,12 @@
user << "\The [src] has [O.data ? "'O.data'" : "nothing"] saved to address [i]."
/obj/item/integrated_circuit/memory/work()
var/i
for(i = 1, i <= inputs.len, i++)
var/datum/integrated_io/I = inputs[i]
var/datum/integrated_io/O = outputs[i]
O.data = I.data
if(..())
var/i
for(i = 1, i <= inputs.len, i++)
var/datum/integrated_io/I = inputs[i]
var/datum/integrated_io/O = outputs[i]
O.data = I.data
/obj/item/integrated_circuit/memory/medium
name = "memory circuit"
@@ -61,8 +62,9 @@
)
/obj/item/integrated_circuit/memory/constant/work()
var/datum/integrated_io/O = outputs[1]
O.push_data()
if(..())
var/datum/integrated_io/O = outputs[1]
O.push_data()
/obj/item/integrated_circuit/memory/constant/attack_hand(mob/user)
var/datum/integrated_io/O = outputs[1]
@@ -1,16 +0,0 @@
/obj/item/integrated_circuit/power
var/charge = 0
var/max_charge = 0
var/power_generated = 0
/obj/item/integrated_circuit/power/battery
name = "micro powercell"
desc = "An extremely small powercell, often used to power basic electronics, as a powersource or to use as a buffer."
charge = 30
max_charge = 30
/obj/item/integrated_circuit/power/solar
name = "micro photovoltaic cell"
desc = "A tiny solar cell, often used for small electornics, such as calculators."
power_generated = 5
//photovoltaic
+4 -4
View File
@@ -17,10 +17,10 @@
)
/obj/item/integrated_circuit/time/delay/work()
..()
var/datum/integrated_io/out_pulse = activators[2]
sleep(delay)
out_pulse.push_data()
if(..())
var/datum/integrated_io/out_pulse = activators[2]
sleep(delay)
out_pulse.push_data()
/obj/item/integrated_circuit/time/delay/five_sec
name = "five-sec delay circuit"
+4 -132
View File
@@ -1,61 +1,3 @@
/obj/item/device/integrated_electronics/debugger
name = "debugger"
desc = "This can be used to learn about, test, or find issues with your circuit designs."
icon_state = "multitool"
flags = CONDUCT
w_class = 2
var/datum/integrated_io/probe
var/mode = "string"
var/options = list("string", "number", "reference", "type", "null")
/obj/item/device/integrated_electronics/debugger/New()
..()
probe = new(src)
/obj/item/device/integrated_electronics/debugger/attack_self(mob/user)
var/temporary_data = null
var/choice = input(user, "Please select a data type to use as input.", "data type", "string") as null|anything in options
if(choice)
switch(choice)
if("string")
temporary_data = sanitize(input(user, "Please write something in text.", "string input") as null|text)
if(istext(temporary_data))
probe.data = temporary_data
if("number")
temporary_data = sanitize(input(user, "Please give a number.", "number input") as null|num)
if(isnum(temporary_data))
probe.data = temporary_data
if("reference")
return
if("type")
return
if("null")
probe.data = null
/obj/item/device/integrated_electronics/proc/select_io(mob/user, var/obj/target)
var/obj/item/integrated_circuit/selected_circuit = null
if(!istype(/obj/item/integrated_circuit, target))
var/list/possible_circuits = list()
for(var/obj/item/integrated_circuit/IC in target)
possible_circuits.Add(IC)
if(possible_circuits.len)
selected_circuit = input(user, "Choose the circuit you want to work on.", "Circuit Selection") as null|anything in possible_circuits
else if(istype(/obj/item/integrated_circuit, target))
selected_circuit = target
if(selected_circuit)
var/list/possible_io = list()
for(var/datum/integrated_io/I in selected_circuit.inputs)
possible_io.Add(I)
for(var/datum/integrated_io/O in selected_circuit.outputs)
possible_io.Add(O)
for(var/datum/integrated_io/A in selected_circuit.activators)
possible_io.Add(A)
if(possible_io.len)
var/choice = input(user, "Choose the data channel you wish to select.", "Data Selection Selection") as null|anything in possible_io
if(choice)
return choice
#define WIRE "wire"
#define WIRING "wiring"
#define UNWIRE "unwire"
@@ -67,7 +9,8 @@
desc = "It's a small wiring tool, with a wire roll, electric soldering iron, wire cutter, and more in one package. \
The wires used are generally useful for small electronics, such as circuitboards and breadboards, as opposed to larger wires \
used for power or data transmission."
icon_state = "multitool"
icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g"
flags = CONDUCT
w_class = 2
var/datum/integrated_io/selected_io = null
@@ -96,6 +39,7 @@
mode = WIRE
//io.updateDialog()
//selected_io.updateDialog()
selected_io.holder.interact(user) // This is to update the UI.
selected_io = null
else if(mode == UNWIRE)
@@ -120,6 +64,7 @@
\the [io.holder]'s [io.name].</span>"
//io.updateDialog()
//selected_io.updateDialog()
selected_io.holder.interact(user) // This is to update the UI.
selected_io = null
mode = UNWIRE
else
@@ -128,79 +73,6 @@
return
return
/obj/item/device/integrated_electronics/wirer/afterattack(atom/target, mob/user)
if(isobj(target))
if(mode == WIRE)
selected_io = select_io(user, target)
if(!selected_io)
return
user << "<span class='notice'>You attach a data wire to \the [target]'s [selected_io.name] data channel.</span>"
mode = WIRING
return
else if(mode == WIRING)
var/datum/integrated_io/second_io = select_io(user, target)
if(selected_io == second_io)
user << "<span class='warning'>Wiring \the [target]'s [selected_io.name] into itself is rather pointless.<span>"
return
else if(second_io)
if(second_io.io_type != selected_io.io_type)
user << "<span class='warning'>Those two types of channels are incompatable. The first is a [selected_io.io_type], \
while the second is a [second_io.io_type].<span>"
return
selected_io.linked |= second_io
second_io.linked |= selected_io
// selected_io.linked = second_io
// second_io.linked = selected_io
user << "<span class='notice'>You connect \the [selected_io.holder]'s [selected_io.name] to \the [target]'s [second_io.name].</span>"
mode = WIRE
selected_io = null
else if(mode == UNWIRE)
selected_io = select_io(user, target)
if(!selected_io)
return
if(!selected_io.linked.len)
user << "<span class='warning'>There is nothing connected to \the [selected_io] data channel.</span>"
return
user << "<span class='notice'>You prepare to detach a data wire from \the [target]'s [selected_io.name] data channel.</span>"
mode = UNWIRING
return
else if(mode == UNWIRING)
var/datum/integrated_io/second_io = select_io(user, target)
if(selected_io == second_io)
user << "<span class='warning'>You can't wire a pin into each other, so unwiring \the [selected_io.holder] from \
the same pin is rather moot.<span>"
return
else if(second_io)
if(selected_io in second_io.linked)
second_io.linked.Remove(selected_io)
selected_io.linked.Remove(second_io)
user << "<span class='notice'>You disconnect \the [selected_io.holder]'s [selected_io.name] from \
\the [second_io.holder]'s [second_io.name].</span>"
else
user << "<span class='warning'>\The [selected_io.holder]'s [selected_io.name] and \the [second_io.holder]'s \
[second_io.name] are not connected.<span>"
return
/*
var/datum/integrated_io/third_io = select_io(user, second_io.linked)
if(third_io && selected_io in third_io.linked)
third_io.linked.Remove(selected_io)
selected_io.linked.Remove(second_io)
*/
mode = UNWIRE
return
/*
var/datum/integrated_io/target_io = select_io(user, target)
if(target_io && target_io.linked)
user << "<span class='notice'>You disconnect \the [target_io.holder]'s [target_io.name] \
from \the [target_io.linked.holder]'s [target_io.linked.linked].<span>"
if(target_io.linked.linked && target_io.linked.linked == target_io)
target_io.linked.linked = null
target_io.linked = null
*/
/obj/item/device/integrated_electronics/wirer/attack_self(mob/user)
switch(mode)
if(WIRE)