/*CONTENTS
General Computer
Security Computer
Comm Computer
ID Computer
Pod/Blast Doors computer
*/
/obj/machinery/computer/New()
..()
spawn(2)
power_change()
/obj/machinery/computer/meteorhit(var/obj/O as obj)
for(var/x in verbs)
verbs -= x
set_broken()
var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread()
smoke.set_up(5, 0, src)
smoke.start()
return
/obj/machinery/computer/emp_act(severity)
if(prob(20/severity)) set_broken()
..()
/obj/machinery/computer/ex_act(severity)
switch(severity)
if(1.0)
del(src)
return
if(2.0)
if (prob(25))
del(src)
return
if (prob(50))
for(var/x in verbs)
verbs -= x
set_broken()
if(3.0)
if (prob(25))
for(var/x in verbs)
verbs -= x
set_broken()
else
return
/obj/machinery/computer/blob_act()
if (prob(75))
for(var/x in verbs)
verbs -= x
set_broken()
density = 0
/obj/machinery/computer/power_change()
if(!istype(src,/obj/machinery/computer/security/telescreen))
if(stat & BROKEN)
icon_state = initial(icon_state)
icon_state += "b"
if (istype(src,/obj/machinery/computer/aifixer))
overlays = null
else if(powered())
icon_state = initial(icon_state)
stat &= ~NOPOWER
if (istype(src,/obj/machinery/computer/aifixer))
var/obj/machinery/computer/aifixer/O = src
if (O.occupant)
switch (O.occupant.stat)
if (0)
overlays += image('computer.dmi', "ai-fixer-full")
if (2)
overlays += image('computer.dmi', "ai-fixer-404")
else
overlays += image('computer.dmi', "ai-fixer-empty")
else
spawn(rand(0, 15))
//icon_state = "c_unpowered"
icon_state = initial(icon_state)
icon_state += "0"
stat |= NOPOWER
if (istype(src,/obj/machinery/computer/aifixer))
overlays = null
/obj/machinery/computer/process()
if(stat & (NOPOWER|BROKEN))
return
use_power(250)
/obj/machinery/computer/proc/set_broken()
icon_state = initial(icon_state)
icon_state += "b"
stat |= BROKEN
/obj/machinery/computer/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver) && circuit)
playsound(src.loc, 'Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
var/obj/computerframe/A = new /obj/computerframe( src.loc )
var/obj/item/weapon/circuitboard/M = new circuit( A )
A.circuit = M
A.anchored = 1
for (var/obj/C in src)
C.loc = src.loc
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
new /obj/item/weapon/shard( src.loc )
A.state = 3
A.icon_state = "3"
else
user << "\blue You disconnect the monitor."
A.state = 4
A.icon_state = "4"
del(src)
else
src.attack_hand(user)
return
/obj/machinery/computer/security/New()
..()
verbs -= /obj/machinery/computer/security/verb/station_map
/obj/machinery/computer/security/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/security/attack_paw(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/security/check_eye(var/mob/user as mob)
if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon)))
return null
user.reset_view(current)
return 1
/obj/machinery/computer/card/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_paw(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/card/attack_hand(var/mob/user as mob)
if(..())
return
user.machine = src
var/dat
if (!( ticker ))
return
if (mode) // accessing crew manifest
var/crew = ""
for(var/datum/data/record/t in data_core.general)
crew += "[t.fields["name"]] - [t.fields["rank"]]
"
dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print
Access ID modification console.
"
else
var/header = "Identification Card Modifier
Please insert the cards into the slots
"
var/target_name
var/target_owner
var/target_rank
if(modify)
target_name = modify.name
else
target_name = "--------"
if(modify && modify.registered)
target_owner = modify.registered
else
target_owner = "--------"
if(modify && modify.assignment)
target_rank = modify.assignment
else
target_rank = "Unassigned"
header += "Target: [target_name]
"
var/scan_name
if(scan)
scan_name = scan.name
else
scan_name = "--------"
header += "Confirm Identity: [scan_name]
"
header += "
"
var/body
if (authenticated && modify)
var/carddesc = "Registered: [target_owner]
Assignment: [target_rank]"
var/jobs = ""
var/list/alljobs = (istype(src,/obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
for(var/job in alljobs)
jobs += "[dd_replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job
var/accesses = ""
if(istype(src,/obj/machinery/computer/card/centcom))
accesses += "Central Command:
"
for(var/A in get_all_centcom_access())
if(A in modify.access)
accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] "
else
accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] "
else
for(var/i = 1; i <= 7; i++)
accesses += "[get_region_accesses_name(i)]: "
for(var/A in get_region_accesses(i))
if(A in modify.access)
accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] "
else
accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] "
accesses += "
"
body = "[carddesc]
[jobs]
[accesses]"
else
body = "{Log in}"
dat = "[header][body]
Access Crew Manifest
"
user << browse(dat, "window=id_com;size=700x520")
onclose(user, "id_com")
return
/obj/machinery/computer/card/Topic(href, href_list)
if(..())
return
usr.machine = src
switch(href_list["choice"])
if ("modify")
if (modify)
modify.name = text("[]'s ID Card ([])", modify.registered, modify.assignment)
modify.loc = loc
modify = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
modify = I
authenticated = 0
if ("scan")
if (scan)
scan.loc = loc
scan = null
else
var/obj/item/I = usr.equipped()
if (istype(I, /obj/item/weapon/card/id))
usr.drop_item()
I.loc = src
scan = I
authenticated = 0
if ("auth")
if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode)))
if (check_access(scan))
authenticated = 1
else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify))
usr << "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in."
if("access")
if(href_list["allowed"])
if(authenticated)
var/access_type = text2num(href_list["access_target"])
var/access_allowed = text2num(href_list["allowed"])
if(access_type in (istype(src,/obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
modify.access -= access_type
if(access_allowed == 1)
modify.access += access_type
if ("assign")
if (authenticated)
var/t1 = href_list["assign_target"]
if(t1 == "Custom")
t1 = input("Enter a custom job assignment.","Assignment")
else
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) )
if (modify)
modify.assignment = t1
if ("reg")
if (authenticated)
var/t2 = modify
var/t1 = input(usr, "What name?", "ID computer", null) as text
if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf)))
modify.registered = t1
if ("mode")
mode = text2num(href_list["mode_target"])
if ("print")
if (!( printing ))
printing = 1
sleep(50)
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc )
var/t1 = "Crew Manifest:
"
for(var/datum/data/record/t in data_core.general)
t1 += "[t.fields["name"]] - [t.fields["rank"]]
"
P.info = t1
P.name = "paper- 'Crew Manifest'"
printing = null
if (modify)
modify.name = text("[]'s ID Card ([])", modify.registered, modify.assignment)
updateUsrDialog()
return
/obj/datacore/proc/manifest()
for(var/mob/living/carbon/human/H in world)
if (!isnull(H.mind) && (H.mind.assigned_role != "MODE"))
var/datum/data/record/G = new()
var/datum/data/record/M = new()
var/datum/data/record/S = new()
var/datum/data/record/L = new()
var/obj/item/weapon/card/id/C = H.wear_id
if (C)
G.fields["rank"] = C.assignment
else
G.fields["rank"] = "Unassigned"
G.fields["name"] = H.real_name
G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6))
M.fields["name"] = G.fields["name"]
M.fields["id"] = G.fields["id"]
S.fields["name"] = G.fields["name"]
S.fields["id"] = G.fields["id"]
if (H.gender == FEMALE)
G.fields["sex"] = "Female"
else
G.fields["sex"] = "Male"
G.fields["age"] = text("[]", H.age)
G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity))
G.fields["p_stat"] = "Active"
G.fields["m_stat"] = "Stable"
M.fields["b_type"] = text("[]", H.b_type)
M.fields["b_dna"] = H.dna.unique_enzymes
M.fields["mi_dis"] = "None"
M.fields["mi_dis_d"] = "No minor disabilities have been declared."
M.fields["ma_dis"] = "None"
M.fields["ma_dis_d"] = "No major disabilities have been diagnosed."
M.fields["alg"] = "None"
M.fields["alg_d"] = "No allergies have been detected in this patient."
M.fields["cdi"] = "None"
M.fields["cdi_d"] = "No diseases have been diagnosed at the moment."
M.fields["notes"] = "No notes."
S.fields["criminal"] = "None"
S.fields["mi_crim"] = "None"
S.fields["mi_crim_d"] = "No minor crime convictions."
S.fields["ma_crim"] = "None"
S.fields["ma_crim_d"] = "No major crime convictions."
S.fields["notes"] = "No notes."
//Begin locked reporting
L.fields["name"] = H.real_name
L.fields["sex"] = H.gender
L.fields["age"] = H.age
L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]")
L.fields["rank"] = H.mind.assigned_role
L.fields["b_type"] = H.b_type
L.fields["b_dna"] = H.dna.unique_enzymes
L.fields["enzymes"] = H.dna.struc_enzymes
L.fields["identity"] = H.dna.uni_identity
L.fields["image"] = getFlatIcon(H,0)
//End locked reporting
general += G
medical += M
security += S
locked += L
return
/obj/machinery/computer/pod/proc/alarm()
if(stat & (NOPOWER|BROKEN))
return
if (!( connected ))
viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!"
return
for(var/obj/machinery/door/poddoor/M in machines)
if (M.id == id)
spawn( 0 )
M.open()
return
sleep(20)
//connected.drive() *****RM from 40.93.3S
for(var/obj/machinery/mass_driver/M in machines)
if(M.id == id)
M.power = connected.power
M.drive()
sleep(50)
for(var/obj/machinery/door/poddoor/M in machines)
if (M.id == id)
spawn( 0 )
M.close()
return
return
/obj/machinery/computer/pod/New()
..()
spawn( 5 )
for(var/obj/machinery/mass_driver/M in machines)
if (M.id == id)
connected = M
else
return
return
/obj/machinery/computer/pod/attackby(I as obj, user as mob)
if(istype(I, /obj/item/weapon/screwdriver))
playsound(loc, 'Screwdriver.ogg', 50, 1)
if(do_after(user, 20))
if (stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/computerframe/A = new /obj/computerframe( loc )
new /obj/item/weapon/shard( loc )
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
if(istype(src, /obj/machinery/computer/pod/old))
M = new /obj/item/weapon/circuitboard/olddoor( A )
if(istype(src, /obj/machinery/computer/pod/old/syndicate))
M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
if(istype(src, /obj/machinery/computer/pod/old/swf))
M = new /obj/item/weapon/circuitboard/swfdoor( A )
else //it's not an old computer. Generate standard pod circuitboard.
M = new /obj/item/weapon/circuitboard/pod( A )
for (var/obj/C in src)
C.loc = loc
M.id = id
A.circuit = M
A.state = 3
A.icon_state = "3"
A.anchored = 1
del(src)
else
user << "\blue You disconnect the monitor."
var/obj/computerframe/A = new /obj/computerframe( loc )
//generate appropriate circuitboard. Accounts for /pod/old computer types
var/obj/item/weapon/circuitboard/pod/M = null
if(istype(src, /obj/machinery/computer/pod/old))
M = new /obj/item/weapon/circuitboard/olddoor( A )
if(istype(src, /obj/machinery/computer/pod/old/syndicate))
M = new /obj/item/weapon/circuitboard/syndicatedoor( A )
if(istype(src, /obj/machinery/computer/pod/old/swf))
M = new /obj/item/weapon/circuitboard/swfdoor( A )
else //it's not an old computer. Generate standard pod circuitboard.
M = new /obj/item/weapon/circuitboard/pod( A )
for (var/obj/C in src)
C.loc = loc
M.id = id
A.circuit = M
A.state = 4
A.icon_state = "4"
A.anchored = 1
del(src)
else
attack_hand(user)
return
/obj/machinery/computer/pod/attack_ai(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/pod/attack_paw(var/mob/user as mob)
return attack_hand(user)
/obj/machinery/computer/pod/attack_hand(var/mob/user as mob)
if(..())
return
var/dat = "Mass Driver Controls"
user.machine = src
var/d2
if (timing)
d2 = text("Stop Time Launch", src)
else
d2 = text("Initiate Time Launch", src)
var/second = time % 60
var/minute = (time - second) / 60
dat += text("
\nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src)
if (connected)
var/temp = ""
var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 )
for(var/t in L)
if (t == connected.power)
temp += text("[] ", t)
else
temp += text("[] ", src, t, t)
//Foreach goto(172)
dat += text("
\nPower Level: []
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
", temp, src, src, src)
//*****RM from 40.93.3S
else
dat += text("
\nToggle Outer Door
", src)
//*****
dat += text("
Close", user)
user << browse(dat, "window=computer;size=400x500")
onclose(user, "computer")
return
/obj/machinery/computer/pod/process()
..()
if (timing)
if (time > 0)
time = round(time) - 1
else
alarm()
time = 0
timing = 0
updateDialog()
return
/obj/machinery/computer/pod/Topic(href, href_list)
if(..())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
if (href_list["power"])
var/t = text2num(href_list["power"])
t = min(max(0.25, t), 16)
if (connected)
connected.power = t
else
if (href_list["alarm"])
alarm()
else
if (href_list["time"])
timing = text2num(href_list["time"])
else
if (href_list["tp"])
var/tp = text2num(href_list["tp"])
time += tp
time = min(max(round(time), 0), 120)
else
if (href_list["door"])
if(istype(src, /obj/machinery/computer/pod/old/syndicate))//Added here so Nuke ops don't go running naked into space before moving the shuttle.
if(syndicate_station_at_station == 0)
usr << "\red You need to launch the Syndicate Shuttle via the computer terminal at the head of the ship before departing."
return
for(var/obj/machinery/door/poddoor/M in machines)
if (M.id == id)
if (M.density)
spawn( 0 )
M.open()
return
else
spawn( 0 )
M.close()
return
//Foreach goto(298)
add_fingerprint(usr)
updateUsrDialog()
return
/obj/machinery/mass_driver/proc/drive(amount)
if(stat & (BROKEN|NOPOWER))
return
use_power(500)
var/O_limit
var/atom/target = get_edge_target_turf(src, dir)
for(var/atom/movable/O in loc)
if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms.
O_limit++
if(O_limit >= 20)
for(var/mob/M in hearers(src, null))
M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items."
break
use_power(500)
spawn( 0 )
O.throw_at(target, drive_range * power, power)
flick("mass_driver1", src)
return