initial commit - cross reference with 5th port - obviously has compile errors

This commit is contained in:
LetterJay
2016-07-03 02:17:19 -05:00
commit 35a1723e98
4355 changed files with 2221257 additions and 0 deletions
@@ -0,0 +1,310 @@
#define CLOSING 1
#define OPENING 2
#define CYCLE 3
#define CYCLE_EXTERIOR 4
#define CYCLE_INTERIOR 5
/obj/machinery/doorButtons
power_channel = ENVIRON
anchored = 1
use_power = 1
idle_power_usage = 2
active_power_usage = 4
var/idSelf
/obj/machinery/doorButtons/attackby(obj/O, mob/user)
attack_hand(user)
/obj/machinery/doorButtons/proc/findObjsByTag()
return
/obj/machinery/doorButtons/initialize()
findObjsByTag()
/obj/machinery/doorButtons/emag_act(mob/user)
if(!emagged)
emagged = 1
req_access = list()
req_one_access = list()
playsound(src.loc, "sparks", 100, 1)
user << "<span class='warning'>You short out the access controller.</span>"
/obj/machinery/doorButtons/proc/removeMe()
/obj/machinery/doorButtons/access_button
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "access_button_standby"
name = "access button"
var/idDoor
var/obj/machinery/door/airlock/door
var/obj/machinery/doorButtons/airlock_controller/controller
var/busy
/obj/machinery/doorButtons/access_button/findObjsByTag()
for(var/obj/machinery/doorButtons/airlock_controller/A in machines)
if(A.idSelf == idSelf)
controller = A
break
for(var/obj/machinery/door/airlock/I in machines)
if(I.id_tag == idDoor)
door = I
break
/obj/machinery/doorButtons/access_button/attack_hand(mob/user)
if(..())
return
if(busy)
return
if(!allowed(user))
user << "<span class='warning'>Access denied.</span>"
return
if(controller && !controller.busy && door)
if(controller.stat & NOPOWER)
return
busy = 1
update_icon()
if(door.density)
if(!controller.exteriorAirlock || !controller.interiorAirlock)
controller.onlyOpen(door)
else
if(controller.exteriorAirlock.density && controller.interiorAirlock.density)
controller.onlyOpen(door)
else
controller.cycleClose(door)
else
controller.onlyClose(door)
sleep(20)
busy = 0
update_icon()
/obj/machinery/doorButtons/access_button/update_icon()
if(stat & NOPOWER)
icon_state = "access_button_off"
else
if(busy)
icon_state = "access_button_cycle"
else
icon_state = "access_button_standby"
/obj/machinery/doorButtons/access_button/power_change()
..()
update_icon()
/obj/machinery/doorButtons/access_button/removeMe(obj/O)
if(O == door)
door = null
/obj/machinery/doorButtons/airlock_controller
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "access_control_standby"
name = "access console"
var/obj/machinery/door/airlock/interiorAirlock
var/obj/machinery/door/airlock/exteriorAirlock
var/idInterior
var/idExterior
var/busy
var/lostPower
/obj/machinery/doorButtons/airlock_controller/removeMe(obj/O)
if(O == interiorAirlock)
interiorAirlock = null
else if(O == exteriorAirlock)
exteriorAirlock = null
/obj/machinery/doorButtons/airlock_controller/Destroy()
for(var/obj/machinery/doorButtons/access_button/A in machines)
if(A.controller == src)
A.controller = null
return ..()
/obj/machinery/doorButtons/airlock_controller/Topic(href, href_list)
if(..())
return
if(busy)
return
if(!allowed(usr))
usr << "<span class='warning'>Access denied.</span>"
return
switch(href_list["command"])
if("close_exterior")
onlyClose(exteriorAirlock)
if("close_interior")
onlyClose(interiorAirlock)
if("cycle_exterior")
cycleClose(exteriorAirlock)
if("cycle_interior")
cycleClose(interiorAirlock)
if("open_exterior")
onlyOpen(exteriorAirlock)
if("open_interior")
onlyOpen(interiorAirlock)
/obj/machinery/doorButtons/airlock_controller/proc/onlyOpen(obj/machinery/door/airlock/A)
if(A)
busy = CLOSING
update_icon()
openDoor(A)
/obj/machinery/doorButtons/airlock_controller/proc/onlyClose(obj/machinery/door/airlock/A)
if(A)
busy = CLOSING
closeDoor(A)
/obj/machinery/doorButtons/airlock_controller/proc/closeDoor(obj/machinery/door/airlock/A)
if(A.density)
goIdle()
return 0
update_icon()
A.unbolt()
spawn()
if(A && A.close())
if(stat & NOPOWER || lostPower || !A || qdeleted(A))
goIdle(1)
return
A.bolt()
if(busy == CLOSING)
goIdle(1)
else
goIdle(1)
return 1
/obj/machinery/doorButtons/airlock_controller/proc/cycleClose(obj/machinery/door/airlock/A)
if(!A || !exteriorAirlock || !interiorAirlock)
return
if(exteriorAirlock.density == interiorAirlock.density || !A.density)
return
busy = CYCLE
update_icon()
if(A == interiorAirlock)
if(closeDoor(exteriorAirlock))
busy = CYCLE_INTERIOR
else
if(closeDoor(interiorAirlock))
busy = CYCLE_EXTERIOR
/obj/machinery/doorButtons/airlock_controller/proc/cycleOpen(obj/machinery/door/airlock/A)
if(!A)
goIdle(1)
if(A == exteriorAirlock)
if(interiorAirlock)
if(!interiorAirlock.density || !interiorAirlock.locked)
return
else
if(exteriorAirlock)
if(!exteriorAirlock.density || !exteriorAirlock.locked)
return
if(busy != OPENING)
busy = OPENING
openDoor(A)
/obj/machinery/doorButtons/airlock_controller/proc/openDoor(obj/machinery/door/airlock/A)
if(exteriorAirlock && interiorAirlock && (!exteriorAirlock.density || !interiorAirlock.density))
goIdle(1)
return
A.unbolt()
spawn()
if(A && A.open())
if(stat | (NOPOWER) && !lostPower && A && !qdeleted(A))
A.bolt()
goIdle(1)
/obj/machinery/doorButtons/airlock_controller/proc/goIdle(update)
lostPower = 0
busy = 0
if(update)
update_icon()
updateUsrDialog()
/obj/machinery/doorButtons/airlock_controller/process()
if(stat & NOPOWER)
return
if(busy == CYCLE_EXTERIOR)
cycleOpen(exteriorAirlock)
else if(busy == CYCLE_INTERIOR)
cycleOpen(interiorAirlock)
/obj/machinery/doorButtons/airlock_controller/power_change()
..()
if(stat & NOPOWER)
lostPower = 1
else
if(!busy)
lostPower = 0
update_icon()
/obj/machinery/doorButtons/airlock_controller/findObjsByTag()
for(var/obj/machinery/door/airlock/A in machines)
if(A.id_tag == idInterior)
interiorAirlock = A
else if(A.id_tag == idExterior)
exteriorAirlock = A
/obj/machinery/doorButtons/airlock_controller/update_icon()
if(stat & NOPOWER)
icon_state = "access_control_off"
return
if(busy || lostPower)
icon_state = "access_control_process"
else
icon_state = "access_control_standby"
/obj/machinery/doorButtons/airlock_controller/attack_hand(mob/user)
if(..())
return
var/datum/browser/popup = new(user, "computer", name)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.set_content(returnText())
popup.open()
/obj/machinery/doorButtons/airlock_controller/proc/returnText()
var/output
if(!exteriorAirlock && !interiorAirlock)
return "ERROR ERROR ERROR ERROR"
if(lostPower)
output = "Initializing..."
else
if(!exteriorAirlock || !interiorAirlock)
if(!exteriorAirlock)
if(interiorAirlock.density)
output = "<A href='?src=\ref[src];command=open_interior'>Open Interior Airlock</A><BR>"
else
output = "<A href='?src=\ref[src];command=close_interior'>Close Interior Airlock</A><BR>"
else
if(exteriorAirlock.density)
output = "<A href='?src=\ref[src];command=open_exterior'>Open Exterior Airlock</A><BR>"
else
output = "<A href='?src=\ref[src];command=close_exterior'>Close Exterior Airlock</A><BR>"
else
if(exteriorAirlock.density)
if(interiorAirlock.density)
output = {"<A href='?src=\ref[src];command=open_exterior'>Open Exterior Airlock</A><BR>
<A href='?src=\ref[src];command=open_interior'>Open Interior Airlock</A><BR>"}
else
output = {"<A href='?src=\ref[src];command=cycle_exterior'>Cycle to Exterior Airlock</A><BR>
<A href='?src=\ref[src];command=close_interior'>Close Interior Airlock</A><BR>"}
else
if(interiorAirlock.density)
output = {"<A href='?src=\ref[src];command=close_exterior'>Close Exterior Airlock</A><BR>
<A href='?src=\ref[src];command=cycle_interior'>Cycle to Interior Airlock</A><BR>"}
else
output = {"<A href='?src=\ref[src];command=close_exterior'>Close Exterior Airlock</A><BR>
<A href='?src=\ref[src];command=close_interior'>Close Interior Airlock</A><BR>"}
output = {"<B>Access Control Console</B><HR>
[output]<HR>"}
if(exteriorAirlock)
output += "<B>Exterior Door: </B> [exteriorAirlock.density ? "closed" : "open"]<BR>"
if(interiorAirlock)
output += "<B>Interior Door: </B> [interiorAirlock.density ? "closed" : "open"]<BR>"
return output
#undef CLOSING
#undef OPENING
#undef CYCLE
#undef CYCLE_EXTERIOR
#undef CYCLE_INTERIOR
@@ -0,0 +1,293 @@
//States for airlock_control
#define AIRLOCK_STATE_INOPEN -2
#define AIRLOCK_STATE_PRESSURIZE -1
#define AIRLOCK_STATE_CLOSED 0
#define AIRLOCK_STATE_DEPRESSURIZE 1
#define AIRLOCK_STATE_OUTOPEN 2
/datum/computer/file/embedded_program/airlock_controller
var/id_tag
var/exterior_door_tag
var/interior_door_tag
var/airpump_tag
var/sensor_tag
var/sanitize_external
state = AIRLOCK_STATE_CLOSED
var/target_state = AIRLOCK_STATE_CLOSED
var/sensor_pressure = null
/datum/computer/file/embedded_program/airlock_controller/receive_signal(datum/signal/signal, receive_method, receive_param)
var/receive_tag = signal.data["tag"]
if(!receive_tag) return
if(receive_tag==sensor_tag)
if(signal.data["pressure"])
sensor_pressure = text2num(signal.data["pressure"])
else if(receive_tag==exterior_door_tag)
memory["exterior_status"] = signal.data["door_status"]
else if(receive_tag==interior_door_tag)
memory["interior_status"] = signal.data["door_status"]
else if(receive_tag==airpump_tag)
if(signal.data["power"])
memory["pump_status"] = signal.data["direction"]
else
memory["pump_status"] = "off"
else if(receive_tag==id_tag)
switch(signal.data["command"])
if("cycle")
if(state < AIRLOCK_STATE_CLOSED)
target_state = AIRLOCK_STATE_OUTOPEN
else
target_state = AIRLOCK_STATE_INOPEN
/datum/computer/file/embedded_program/airlock_controller/receive_user_command(command)
switch(command)
if("cycle_closed")
target_state = AIRLOCK_STATE_CLOSED
if("cycle_exterior")
target_state = AIRLOCK_STATE_OUTOPEN
if("cycle_interior")
target_state = AIRLOCK_STATE_INOPEN
if("abort")
target_state = AIRLOCK_STATE_CLOSED
/datum/computer/file/embedded_program/airlock_controller/process()
var/process_again = 1
while(process_again)
process_again = 0
switch(state)
if(AIRLOCK_STATE_INOPEN) // state -2
if(target_state > state)
if(memory["interior_status"] == "closed")
state = AIRLOCK_STATE_CLOSED
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
signal.data["command"] = "secure_close"
post_signal(signal)
else
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"power" = 0,
"sigtype"="command"
)
post_signal(signal)
if(AIRLOCK_STATE_PRESSURIZE)
if(target_state < state)
if(sensor_pressure >= ONE_ATMOSPHERE*0.95)
if(memory["interior_status"] == "open")
state = AIRLOCK_STATE_INOPEN
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
signal.data["command"] = "secure_open"
post_signal(signal)
else
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"sigtype"="command"
)
if(memory["pump_status"] == "siphon")
signal.data["stabalize"] = 1
else if(memory["pump_status"] != "release")
signal.data["power"] = 1
post_signal(signal)
else if(target_state > state)
state = AIRLOCK_STATE_CLOSED
process_again = 1
if(AIRLOCK_STATE_CLOSED)
if(target_state > state)
if(memory["interior_status"] == "closed")
state = AIRLOCK_STATE_DEPRESSURIZE
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = interior_door_tag
signal.data["command"] = "secure_close"
post_signal(signal)
else if(target_state < state)
if(memory["exterior_status"] == "closed")
state = AIRLOCK_STATE_PRESSURIZE
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_close"
post_signal(signal)
else
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"power" = 0,
"sigtype"="command"
)
post_signal(signal)
if(AIRLOCK_STATE_DEPRESSURIZE)
var/target_pressure = ONE_ATMOSPHERE*0.05
if(sanitize_external)
target_pressure = ONE_ATMOSPHERE*0.01
if(sensor_pressure <= target_pressure)
if(target_state > state)
if(memory["exterior_status"] == "open")
state = AIRLOCK_STATE_OUTOPEN
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_open"
post_signal(signal)
else if(target_state < state)
state = AIRLOCK_STATE_CLOSED
process_again = 1
else if((target_state < state) && !sanitize_external)
state = AIRLOCK_STATE_CLOSED
process_again = 1
else
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.data = list(
"tag" = airpump_tag,
"sigtype"="command"
)
if(memory["pump_status"] == "release")
signal.data["purge"] = 1
else if(memory["pump_status"] != "siphon")
signal.data["power"] = 1
post_signal(signal)
if(AIRLOCK_STATE_OUTOPEN) //state 2
if(target_state < state)
if(memory["exterior_status"] == "closed")
if(sanitize_external)
state = AIRLOCK_STATE_DEPRESSURIZE
process_again = 1
else
state = AIRLOCK_STATE_CLOSED
process_again = 1
else
var/datum/signal/signal = new
signal.data["tag"] = exterior_door_tag
signal.data["command"] = "secure_close"
post_signal(signal)
else
if(memory["pump_status"] != "off")
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"power" = 0,
"sigtype"="command"
)
post_signal(signal)
memory["sensor_pressure"] = sensor_pressure
memory["processing"] = state != target_state
//sensor_pressure = null //not sure if we can comment this out. Uncomment in case of problems -rastaf0
return 1
/obj/machinery/embedded_controller/radio/airlock_controller
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_control_standby"
name = "airlock console"
density = 0
frequency = 1449
power_channel = ENVIRON
// Setup parameters only
var/id_tag
var/exterior_door_tag
var/interior_door_tag
var/airpump_tag
var/sensor_tag
var/sanitize_external
/obj/machinery/embedded_controller/radio/airlock_controller/initialize()
..()
var/datum/computer/file/embedded_program/airlock_controller/new_prog = new
new_prog.id_tag = id_tag
new_prog.exterior_door_tag = exterior_door_tag
new_prog.interior_door_tag = interior_door_tag
new_prog.airpump_tag = airpump_tag
new_prog.sensor_tag = sensor_tag
new_prog.sanitize_external = sanitize_external
new_prog.master = src
program = new_prog
/obj/machinery/embedded_controller/radio/airlock_controller/update_icon()
if(on && program)
if(program.memory["processing"])
icon_state = "airlock_control_process"
else
icon_state = "airlock_control_standby"
else
icon_state = "airlock_control_off"
/obj/machinery/embedded_controller/radio/airlock_controller/return_text()
var/state_options = null
var/state = 0
var/sensor_pressure = "----"
var/exterior_status = "----"
var/interior_status = "----"
var/pump_status = "----"
var/current_status = "Inactive<BR>&nbsp;"
if(program)
state = program.state
sensor_pressure = program.memory["sensor_pressure"] ? program.memory["sensor_pressure"] : "----"
exterior_status = program.memory["exterior_status"] ? program.memory["exterior_status"] : "----"
interior_status = program.memory["interior_status"] ? program.memory["interior_status"] : "----"
pump_status = program.memory["pump_status"] ? program.memory["pump_status"] : "----"
switch(state)
if(AIRLOCK_STATE_INOPEN)
state_options = {"<A href='?src=\ref[src];command=cycle_closed'>Close Interior Airlock</A><BR>
<A href='?src=\ref[src];command=cycle_exterior'>Cycle to Exterior Airlock</A><BR>"}
current_status = "Interior Airlock Open<BR><span class='good'>Chamber Pressurized</span>"
if(AIRLOCK_STATE_PRESSURIZE)
state_options = "<A href='?src=\ref[src];command=abort'>Abort Cycling</A><BR>"
current_status = "Cycling to Interior Airlock<BR><span class='average'>Chamber Pressurizing</span>"
if(AIRLOCK_STATE_CLOSED)
state_options = {"<A href='?src=\ref[src];command=cycle_interior'>Open Interior Airlock</A><BR>
<A href='?src=\ref[src];command=cycle_exterior'>Open Exterior Airlock</A><BR>"}
if(AIRLOCK_STATE_DEPRESSURIZE)
state_options = "<A href='?src=\ref[src];command=abort'>Abort Cycling</A><BR>"
current_status = "Cycling to Exterior Airlock<BR><span class='average'>Chamber Depressurizing</span>"
if(AIRLOCK_STATE_OUTOPEN)
state_options = {"<A href='?src=\ref[src];command=cycle_interior'>Cycle to Interior Airlock</A><BR>
<A href='?src=\ref[src];command=cycle_closed'>Close Exterior Airlock</A><BR>"}
current_status = "Exterior Airlock Open<BR><span class='bad'>Chamber Depressurized</span>"
var/output = {"<h3>Airlock Status</h3>
<div class='statusDisplay'>
<div class='line'><div class='statusLabel'>Current Status:</div><div class='statusValue'>[current_status]</div></div>
<div class='line'>&nbsp;</div>
<div class='line'><div class='statusLabel'>\> Chamber Pressure:</div><div class='statusValue'>[sensor_pressure] kPa</div></div>
<div class='line'><div class='statusLabel'>\> Control Pump:</div><div class='statusValue'>[pump_status]</div></div>
<div class='line'><div class='statusLabel'>\> Interior Door:</div><div class='statusValue'>[interior_status]</div></div>
<div class='line'><div class='statusLabel'>\> Exterior Door:</div><div class='statusValue'>[exterior_status]</div></div>
</div>
[state_options]"}
return output
@@ -0,0 +1,95 @@
/datum/computer/file/embedded_program
var/list/memory = list()
var/state
var/obj/machinery/embedded_controller/master
/datum/computer/file/embedded_program/proc/post_signal(datum/signal/signal, comm_line)
if(master)
master.post_signal(signal, comm_line)
else
qdel(signal)
/datum/computer/file/embedded_program/proc/receive_user_command(command)
/datum/computer/file/embedded_program/proc/receive_signal(datum/signal/signal, receive_method, receive_param)
return null
/datum/computer/file/embedded_program/process()
return 0
/obj/machinery/embedded_controller
var/datum/computer/file/embedded_program/program
name = "embedded controller"
density = 0
anchored = 1
var/on = 1
/obj/machinery/embedded_controller/interact(mob/user)
//user << browse(return_text(), "window=computer")
//onclose(user, "computer")
user.set_machine(src)
var/datum/browser/popup = new(user, "computer", name) // Set up the popup browser window
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.set_content(return_text())
popup.open()
/obj/machinery/embedded_controller/attack_hand(mob/user)
interact(user)
/obj/machinery/embedded_controller/update_icon()
/obj/machinery/embedded_controller/proc/return_text()
/obj/machinery/embedded_controller/proc/post_signal(datum/signal/signal, comm_line)
return 0
/obj/machinery/embedded_controller/receive_signal(datum/signal/signal, receive_method, receive_param)
if(!signal || signal.encryption) return
if(program)
program.receive_signal(signal, receive_method, receive_param)
//spawn(5) program.process() //no, program.process sends some signals and machines respond and we here again and we lag -rastaf0
/obj/machinery/embedded_controller/Topic(href, href_list)
if(..())
return 0
if(program)
program.receive_user_command(href_list["command"])
addtimer(program, "process", 5)
usr.set_machine(src)
addtimer(src, "updateDialog", 5)
/obj/machinery/embedded_controller/process()
if(program)
program.process()
update_icon()
src.updateDialog()
/obj/machinery/embedded_controller/radio
var/frequency
var/datum/radio_frequency/radio_connection
/obj/machinery/embedded_controller/radio/Destroy()
if(SSradio)
SSradio.remove_object(src,frequency)
return ..()
/obj/machinery/embedded_controller/radio/initialize()
set_frequency(frequency)
/obj/machinery/embedded_controller/radio/post_signal(datum/signal/signal)
signal.transmission_method = TRANSMISSION_RADIO
if(radio_connection)
return radio_connection.post_signal(src, signal)
else
signal = null
/obj/machinery/embedded_controller/radio/proc/set_frequency(new_frequency)
SSradio.remove_object(src, frequency)
frequency = new_frequency
radio_connection = SSradio.add_object(src, frequency)
@@ -0,0 +1,78 @@
/datum/computer/file/embedded_program/simple_vent_controller
var/airpump_tag
/datum/computer/file/embedded_program/simple_vent_controller/receive_user_command(command)
switch(command)
if("vent_inactive")
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"sigtype"="command"
)
signal.data["power"] = 0
post_signal(signal)
if("vent_pump")
var/datum/signal/signal = new
signal.data = list(
"tag" = airpump_tag,
"sigtype"="command"
)
signal.data["stabalize"] = 1
signal.data["power"] = 1
post_signal(signal)
if("vent_clear")
var/datum/signal/signal = new
signal.transmission_method = 1 //radio signal
signal.data = list(
"tag" = airpump_tag,
"sigtype"="command"
)
signal.data["purge"] = 1
signal.data["power"] = 1
post_signal(signal)
/datum/computer/file/embedded_program/simple_vent_controller/process()
return 0
/obj/machinery/embedded_controller/radio/simple_vent_controller
icon = 'icons/obj/airlock_machines.dmi'
icon_state = "airlock_control_standby"
name = "vent controller"
density = 0
frequency = 1229
power_channel = ENVIRON
// Setup parameters only
var/airpump_tag
/obj/machinery/embedded_controller/radio/simple_vent_controller/initialize()
..()
var/datum/computer/file/embedded_program/simple_vent_controller/new_prog = new
new_prog.airpump_tag = airpump_tag
new_prog.master = src
program = new_prog
/obj/machinery/embedded_controller/radio/simple_vent_controller/update_icon()
if(on && program)
icon_state = "airlock_control_standby"
else
icon_state = "airlock_control_off"
/obj/machinery/embedded_controller/radio/simple_vent_controller/return_text()
var/state_options = null
state_options = {"<A href='?src=\ref[src];command=vent_inactive'>Deactivate Vent</A><BR>
<A href='?src=\ref[src];command=vent_pump'>Activate Vent / Pump</A><BR>
<A href='?src=\ref[src];command=vent_clear'>Activate Vent / Clear</A><BR>"}
var/output = {"<B>Vent Control Console</B><HR>
[state_options]<HR>"}
return output