diff --git a/code/modules/computer3/NTOS.dm b/code/modules/computer3/NTOS.dm deleted file mode 100644 index eed2163e0ac..00000000000 --- a/code/modules/computer3/NTOS.dm +++ /dev/null @@ -1,239 +0,0 @@ -/* - The Big Bad NT Operating System -*/ - -/datum/file/program/ntos - name = "Nanotrasen Operating System" - extension = "prog" - active_state = "ntos" - var/obj/item/part/computer/storage/current // the drive being viewed, null for desktop/computer - var/fileop = "runfile" - -/* - Generate a basic list of files in the selected scope -*/ - -/datum/file/program/ntos/proc/list_files() - if(!computer || !current) return null - return current.files - - -/datum/file/program/ntos/proc/filegrid(var/list/filelist) - var/dat = "" - var/i = 0 - for(var/datum/file/F in filelist) - if(!F.hidden_file) - i++ - if(i==1) - dat += "" - if(i>= 6) - i = 0 - dat += "" - continue - dat += {" - "} - - dat += "
-
-
- [F.name] -
-
" - return dat - -// -// I am separating this from filegrid so that I don't have to -// make metadata peripheral files -// -/datum/file/program/ntos/proc/desktop(var/peripheralop = "viewperipheral") - var/dat = "" - var/i = 0 - var/list/peripherals = list(computer.hdd,computer.floppy,computer.cardslot) - for(var/obj/item/part/computer/C in peripherals) - if(!istype(C)) continue - i++ - if(i==1) - dat += "" - if(i>= 6) - i = 0 - dat += "" - continue - dat += {" - "} - - dat += "
- - [bicon(C)]
- [C.name] -
-
" - return dat - - -/datum/file/program/ntos/proc/window(var/title,var/buttonbar,var/content) - return {" -
-
[title]
-
[buttonbar]
-
[content]
-
"} - -/datum/file/program/ntos/proc/buttonbar(var/type = 0) - switch(type) - if(0) // FILE OPERATIONS - return {""} - -/datum/file/program/ntos/interact() - if(!interactable()) - return - var/dat = {" - - - Nanotrasen Operating System - - - -
"} - - - dat += generate_status_bar() - var/list/files = list_files() - if(current) - dat +=window(current.name,buttonbar(),filegrid(files)) - else - dat += desktop() - - dat += "
" - - usr << browse(dat, "window=\ref[computer];size=670x510") - onclose(usr, "\ref[computer]") - - // STATUS BAR - // Small 16x16 icons representing status of components, etc. - // Currently only used by battery icon - // TODO: Add more icons! -/datum/file/program/ntos/proc/generate_status_bar() - var/dat = "" - - // Battery level icon - switch(computer.check_battery_status()) - if(-1) - dat += "" - if(0 to 5) - dat += "" - if(6 to 20) - dat += "" - if(21 to 40) - dat += "" - if(41 to 60) - dat += "" - if(61 to 80) - dat += "" - if(81 to 100) - dat += "" - dat += "
" - return dat - -/datum/file/program/ntos/Topic(href, list/href_list) - if(!interactable() || ..(href,href_list)) - return - - if("viewperipheral" in href_list) // open drive, show status of peripheral - var/obj/item/part/computer/C = locate(href_list["viewperipheral"]) - if(!istype(C) || (C.loc != src.computer)) - return - - if(istype(C,/obj/item/part/computer/storage)) - current = C - interact() - return - // else ??? - if(istype(C,/obj/item/part/computer/cardslot)) - if(computer.cardslot.reader != null) - computer.cardslot.remove() - if(istype(C,/obj/item/part/computer/cardslot/dual)) - if(computer.cardslot.writer != null) - computer.cardslot.remove(computer.cardslot.writer) - if(computer.cardslot.reader != null) - computer.cardslot.remove(computer.cardslot.reader) - interact() - return - - // distinct from close, this is the file dialog window - if("winclose" in href_list) - current = null - interact() - return - -#undef MAX_ROWS -#undef MAX_COLUMNS diff --git a/code/modules/computer3/bios.dm b/code/modules/computer3/bios.dm deleted file mode 100644 index 5deda2bd35f..00000000000 --- a/code/modules/computer3/bios.dm +++ /dev/null @@ -1,182 +0,0 @@ -/* - Okay so my last effort to have a central BIOS function was interesting - but completely unmaintainable, I have scrapped it. - - The parts that were actually useful will be put here in functions instead. - If we want a central bios function we can add one that just indexes them. - That should at least allow sensible debugging. -*/ - -/obj/machinery/computer3 - - /* - interactable(user): performs all standard sanity checks - Call in topic() and interact(). - */ - proc/interactable(var/mob/user) - if( !src || !user || stat || user.stat || user.lying || user.blinded ) - return 0 - if(!program) - return 0 - - if(!istype(loc,/turf) || !istype(user.loc,/turf)) // todo handheld maybe - return 0 - - if(istype(user,/mob/living/silicon)) - if(!program.ai_allowed) - to_chat(user, "You are forbidden from accessing this program.") - return 0 - else - if(program.human_controls) - if(!ishuman(user)) - to_chat(user, "Your body can't work the controls!") - return 0 - if(user.restrained()) - to_chat(user, "You need a free hand!") - return 0 - - if(!in_range(src,user)) - // telekinesis check - if(ishuman(user) && istype(user.get_active_hand(),/obj/item/tk_grab)) - if(program.human_controls) - to_chat(user, "It's too complicated to work at a distance!") - return 0 - add_fingerprint(user) - user.set_machine(src) - return 1 - return 0 - - add_fingerprint(user) - user.set_machine(src) - return 1 - - /* - Deduplicates an item list and gives you range and direction. - This is used for networking so you can determine which of several - identically named objects you're referring to. - */ - proc/format_atomlist(var/list/atoms) - var/list/output = list() - for(var/atom/A in atoms) - var/title = "[A] (Range [get_dist(A,src)] meters, [dir2text(get_dir(src,A))])" - output[title] = A - return output - - /* - This is used by the camera monitoring program to see if you're still in range - */ - check_eye(var/mob/user as mob) - if(!interactable(user) || user.machine != src) - if(user.machine == src) - user.unset_machine() - return null - - var/datum/file/program/security/S = program - if( !istype(S) || !S.current || !S.current.status || !camnet ) - if( user.machine == src ) - user.unset_machine() - return null - - user.reset_perspective(S.current) - return 1 - - /* - List all files, including removable disks and data cards - (I don't know why but I don't want to rip data cards out. - It just seems... interesting?) - */ - proc/list_files(var/typekey = null) - var/list/files = list() - if(hdd) - files += hdd.files - if(floppy && floppy.inserted) - files += floppy.inserted.files - if(cardslot && istype(cardslot.reader,/obj/item/weapon/card/data)) - files += cardslot.reader:files - if(!ispath(typekey)) - return files - - var/i = 1 - while(i<=files.len) - if(istype(files[i],typekey)) - i++ - continue - files.Cut(i,i+1) - return files - - /* - Crash the computer with an error. - Todo: redo - */ - proc/Crash(var/errorcode = PROG_CRASH) - if(!src) - return null - - switch(errorcode) - if(PROG_CRASH) - if(usr) - to_chat(usr, "The program crashed!") - usr << browse(null,"\ref[src]") - Reset() - - if(MISSING_PERIPHERAL) - Reset() - if(usr) - usr << browse("

ERROR: Missing or disabled component

A hardware failure has occured. Please insert or replace the missing or damaged component and restart the computer.","window=\ref[src]") - - if(BUSTED_ASS_COMPUTER) - Reset() - os.error = BUSTED_ASS_COMPUTER - if(usr) - usr << browse("

ERROR: Missing or disabled component

A hardware failure has occured. Please insert or replace the missing or damaged component and restart the computer.","window=\ref[src]") - - if(MISSING_PROGRAM) - Reset() - if(usr) - usr << browse("

ERROR: No associated program

This file requires a specific program to open, which cannot be located. Please install the related program and try again.","window=\ref[src]") - - if(FILE_DRM) - Reset() - if(usr) - usr << browse("

ERROR: File operation prohibited

Copy protection exception: missing authorization token.","window=\ref[src]") - - if(NETWORK_FAILURE) - Reset() - if(usr) - usr << browse("

ERROR: Networking exception: Unable to connect to remote host.","window=\ref[src]") - - - else - if(usr) - to_chat(usr, "The program crashed!") - usr << browse(null,"\ref[src]") - testing("computer/Crash() - unknown error code [errorcode]") - Reset() - return null - - #define ANY_DRIVE 0 - #define PREFER_FLOPPY 1 - #define PREFER_CARD 2 - #define PREFER_HDD 4 - - - // required_location: only put on preferred devices - proc/writefile(var/datum/file/F, var/where = ANY_DRIVE, var/required_location = 0) - if(where != ANY_DRIVE) - if((where&PREFER_FLOPPY) && floppy && floppy.addfile(F)) - return 1 - if((where&PREFER_CARD) && cardslot && cardslot.addfile(F)) - return 1 - if((where&PREFER_HDD) && hdd && hdd.addfile(F)) - return 1 - - if(required_location) - return 0 - - if(floppy && floppy.addfile(F)) - return 1 - if(cardslot && cardslot.addfile(F)) - return 1 - if(hdd && hdd.addfile(F)) - return 1 - return 0 diff --git a/code/modules/computer3/buildandrepair.dm b/code/modules/computer3/buildandrepair.dm deleted file mode 100644 index 0521176f48e..00000000000 --- a/code/modules/computer3/buildandrepair.dm +++ /dev/null @@ -1,306 +0,0 @@ -// Computer3 circuitboard specifically -/obj/item/part/computer/circuitboard - density = 0 - anchored = 0 - w_class = 2 - name = "Circuit board" - icon = 'icons/obj/module.dmi' - icon_state = "id_mod" - item_state = "electronic" - origin_tech = "programming=2" - var/id = null - var/frequency = null - var/build_path = null - var/board_type = "computer" - var/list/req_components = null - var/powernet = null - var/list/records = null - var/frame_desc = null - - var/datum/file/program/OS = new/datum/file/program/ntos - toolspeed = 1 - usesound = 'sound/items/Deconstruct.ogg' - -/obj/machinery/computer3/proc/disassemble(mob/user as mob) // todo - return - - -/obj/structure/computer3frame - density = 1 - anchored = 0 - name = "computer frame" - icon = 'icons/obj/stock_parts.dmi' - icon_state = "0" - var/state = 0 - - var/remove_sound = 'sound/items/Crowbar.ogg' - - var/obj/item/part/computer/circuitboard/circuit = null - var/completed = /obj/machinery/computer - - // Computer3 components - a carbon copy of the list from - // computer.dm; however, we will need to check to make sure - // we don't install more components than the computer frame - // can handle. This will be different for certain formfactors. - - var/max_components = 4 - var/list/components = list() - - // Storage - var/obj/item/part/computer/storage/hdd/hdd = null - var/obj/item/part/computer/storage/removable/floppy = null - // Networking - var/obj/item/part/computer/networking/radio/radio = null // not handled the same as other networks - var/obj/item/part/computer/networking/cameras/camnet = null // just plain special - var/obj/item/part/computer/networking/net = null // Proximity, area, or cable network - var/obj/item/part/computer/networking/subspace/centcom = null // only for offstation communications - - // Card reader - note the HoP reader is a subtype - var/obj/item/part/computer/cardslot/cardslot = null - - // Misc & special purpose - var/obj/item/part/computer/ai_holder/cradle = null - var/obj/item/part/computer/toybox/toybox = null - - // Battery must be installed BEFORE wiring the computer. - // if installing it in an existing computer, you will have to - // get back to this state first. - var/obj/item/weapon/stock_parts/cell/battery = null - -/obj/structure/computer3frame/server - name = "server frame" - completed = /obj/machinery/computer3/server - max_components = 6 -/obj/structure/computer3frame/wallcomp - name = "wall-computer frame" - completed = /obj/machinery/computer3/wall_comp - max_components = 3 -/obj/structure/computer3frame/laptop - name = "laptop frame" - completed = /obj/machinery/computer3/laptop - max_components = 3 - -/obj/structure/computer3frame/attackby(obj/item/P as obj, mob/user as mob, params) - switch(state) - if(0) - if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, P.usesound, 50, 1) - if(do_after(user, 20 * P.toolspeed, target = src)) - to_chat(user, "You wrench the frame into place.") - src.anchored = 1 - src.state = 1 - if(istype(P, /obj/item/weapon/weldingtool)) - var/obj/item/weapon/weldingtool/WT = P - if(!WT.remove_fuel(0, user)) - to_chat(user, "The welding tool must be on to complete this task.") - return - playsound(src.loc, WT.usesound, 50, 1) - if(do_after(user, 20 * WT.toolspeed, target = src)) - if(!src || !WT.isOn()) return - to_chat(user, "You deconstruct the frame.") - new /obj/item/stack/sheet/metal( src.loc, 5 ) - qdel(src) - if(1) - if(istype(P, /obj/item/weapon/wrench)) - playsound(src.loc, P.usesound, 50, 1) - if(do_after(user, 20 * P.toolspeed, target = src)) - to_chat(user, "You unfasten the frame.") - src.anchored = 0 - src.state = 0 - if(istype(P, /obj/item/weapon/circuitboard) && !circuit) - var/obj/item/weapon/circuitboard/B = P - if(B.board_type == "computer") - playsound(src.loc, B.usesound, 50, 1) - to_chat(user, "You place the circuit board inside the frame.") - src.icon_state = "1" - src.circuit = P - user.drop_item() - P.loc = src - else - to_chat(user, "This frame does not accept circuit boards of this type!") - if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, "You screw the circuit board into place.") - src.state = 2 - src.icon_state = "2" - if(istype(P, /obj/item/weapon/crowbar) && circuit) - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, "You remove the circuit board.") - src.state = 1 - src.icon_state = "0" - circuit.loc = src.loc - src.circuit = null - if(2) - if(istype(P, /obj/item/weapon/screwdriver) && circuit) - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, "You unfasten the circuit board.") - src.state = 1 - src.icon_state = "1" - - if(istype(P, /obj/item/weapon/crowbar)) - if(battery) - playsound(src.loc, P.usesound, 50, 1) - if(do_after(10 * P.toolspeed, target = src)) - battery.loc = loc - to_chat(user, "You remove [battery].") - battery = null - else - to_chat(user, "There's no battery to remove!") - - if(istype(P, /obj/item/weapon/stock_parts/cell)) - if(!battery) - playsound(src.loc, P.usesound, 50, 1) - if(do_after(5 * P.toolspeed, target = src)) - battery = P - P.loc = src - to_chat(user, "You insert [battery].") - else - to_chat(user, "There's already \an [battery] in [src]!") - - - if(istype(P, /obj/item/stack/cable_coil)) - if(P:amount >= 5) - playsound(src.loc, P.usesound, 50, 1) - if(do_after(user, 20 * P.toolspeed, target = src)) - if(P) - P:amount -= 5 - if(!P:amount) qdel(P) - to_chat(user, "You add cables to the frame.") - src.state = 3 - src.icon_state = "3" - if(3) - if(istype(P, /obj/item/weapon/wirecutters)) - if(components.len) - to_chat(user, "There are parts in the way!") - return - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, "You remove the cables.") - src.state = 2 - src.icon_state = "2" - var/obj/item/stack/cable_coil/A = new /obj/item/stack/cable_coil( src.loc ) - A.amount = 5 - - if(istype(P, /obj/item/weapon/crowbar)) // complicated check - remove_peripheral() - - if(istype(P, /obj/item/stack/sheet/glass)) - if(P:amount >= 2) - playsound(src.loc, P.usesound, 50, 1) - if(do_after(user, 20 * P.toolspeed, target = src)) - if(P) - P:use(2) - to_chat(user, "You put in the glass panel.") - src.state = 4 - src.icon_state = "4" - if(4) - if(istype(P, /obj/item/weapon/crowbar)) - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, "You remove the glass panel.") - src.state = 3 - src.icon_state = "3" - new /obj/item/stack/sheet/glass( src.loc, 2 ) - if(istype(P, /obj/item/weapon/screwdriver)) - playsound(src.loc, P.usesound, 50, 1) - to_chat(user, "You connect the monitor.") - var/obj/machinery/computer3/B = new src.circuit.build_path ( src.loc, built=1 ) - /*if(circuit.powernet) B:powernet = circuit.powernet - if(circuit.id) B:id = circuit.id - //if(circuit.records) B:records = circuit.records - if(circuit.frequency) B:frequency = circuit.frequency - if(istype(circuit,/obj/item/weapon/circuitboard/supplycomp)) - var/obj/machinery/computer/supplycomp/SC = B - var/obj/item/weapon/circuitboard/supplycomp/C = circuit - SC.can_order_contraband = C.contraband_enabled*/ - B.circuit = circuit - circuit.loc = B - if(circuit.OS) - circuit.OS.computer = B - B.RefreshParts() // todo - qdel(src) - -/* - This will remove peripherals if you specify one, but the main function is to - allow the user to remove a part specifically. -*/ -/obj/structure/computer3frame/proc/remove_peripheral(var/obj/item/I = null) - if(!components || !components.len) - to_chat(usr, "There are no components in [src] to take out!") - return 0 - if(!I) - I = input(usr, "Remove which component?","Remove component", null) as null|obj in components - - if(I) - playsound(src.loc, remove_sound, 50, 1) - if(do_after(usr, 25, target = src)) - if(I==hdd) - components -= hdd - hdd.loc = loc - hdd = null - else if(I==floppy) - components -= floppy - floppy.loc = loc - floppy = null - else if(I==radio) - components -= radio - radio.loc = loc - radio = null - else if(I==camnet) - components -= camnet - camnet.loc = loc - camnet = null - else if(I==net) - components -= net - net.loc = loc - net = null - else if(I==cradle) - components -= cradle - cradle.loc = loc - cradle = null - else if(I==toybox) - components -= toybox - toybox.loc = loc - toybox = null - else - warning("Erronous component in computerframe/remove_peripheral: [I]") - I.loc = loc - to_chat(usr, "You remove [I]") - return 1 - return 0 -/obj/structure/computer3frame/proc/insert_peripheral(var/obj/item/I) - if(components.len >= max_components) - to_chat(usr, "There isn't room in [src] for another component!") - return 0 - switch(I.type) - if(/obj/item/part/computer/storage/hdd) - if(hdd) - to_chat(usr, "There is already \an [hdd] in [src]!") - return 0 - hdd = I - components += hdd - hdd.loc = src - if(/obj/item/part/computer/storage/removable) - if(floppy) - to_chat(usr, "There is already \an [floppy] in [src]!") - return 0 - floppy = I - components += floppy - floppy.loc = src - if(/obj/item/part/computer/networking/radio) - if(radio) - to_chat(usr, "There is already \an [radio] in [src]!") - return 0 - radio = I - components += radio - radio.loc = src - if(/obj/item/part/computer/networking/cameras) - if(camnet) - to_chat(usr, "There is already \an [camnet] in [src]!") - return 0 - camnet = I - components += camnet - camnet.loc = src - if(/obj/item/part/computer/networking) - if(net) - to_chat(usr, "There is already \an [net] in [src]!") - - diff --git a/code/modules/computer3/component.dm b/code/modules/computer3/component.dm deleted file mode 100644 index 0070c057fcd..00000000000 --- a/code/modules/computer3/component.dm +++ /dev/null @@ -1,294 +0,0 @@ - -/* - Objects used to construct computers, and objects that can be inserted into them, etc. - - TODO: - * Synthesizer part (toybox, injectors, etc) -*/ - - - -/obj/item/part/computer - name = "computer part" - desc = "Holy jesus you donnit now" - gender = PLURAL - icon = 'icons/obj/stock_parts.dmi' - icon_state = "hdd1" - w_class = 2 - - var/emagged = 0 - crit_fail = 0 - - // the computer that this device is attached to - var/obj/machinery/computer3/computer - - // If the computer is attacked by an item it will reference this to decide which peripheral(s) are affected. - var/list/attackby_types = list() - proc/allow_attackby(var/obj/item/I as obj,var/mob/user as mob, params) - - for(var/typekey in attackby_types) - if(istype(I,typekey)) - return 1 - return 0 - - proc/init(var/obj/machinery/computer/target) - computer = target - // continue to handle all other type-specific procedures - -/* - Below are all the miscellaneous components - For storage drives, see storage.dm - For networking parts, see -*/ - -/obj/item/part/computer/ai_holder - name = "intelliCard computer module" - desc = "Contains a specialized nacelle for dealing with highly sensitive equipment without interference." - - attackby_types = list(/obj/item/device/aicard) - - var/mob/living/silicon/ai/occupant = null - var/busy = 0 - - attackby(obj/I as obj,mob/user as mob, params) - if(computer && !computer.stat) - if(istype(I, /obj/item/device/aicard)) - I:transfer_ai("AIFIXER","AICARD",src,user) - if(computer.program) - computer.program.update_icon() - computer.update_icon() - computer.occupant = occupant - ..() - return - -/* - ID computer cardslot - reading and writing slots -*/ - -/obj/item/part/computer/cardslot - name = "magnetic card slot" - desc = "Contains a slot for reading magnetic swipe cards." - - var/obj/item/weapon/card/reader = null - var/obj/item/weapon/card/writer = null // so that you don't need to typecast dual cardslots, but pretend it's not here - // alternately pretend they did it to save money on manufacturing somehow - var/dualslot = 0 // faster than typechecking - attackby_types = list(/obj/item/weapon/card) - - emag_act(user as mob) - if(!writer) - to_chat(usr, "You insert \the card, and the computer grinds, sparks, and beeps. After a moment, the card ejects itself.") - computer.emagged = 1 - return 1 - else - to_chat(usr, "You are unable to insert \the card, as the reader slot is occupied") - return 0 - - attackby(var/obj/item/I as obj, var/mob/user as mob, params) - if(istype(I,/obj/item/weapon/card)) - insert(I) - return - ..(I,user) - - // cardslot.insert(card, slot) - // card: The card obj you want to insert (usually your ID) - // slot: Which slot to insert into (1: reader, 2: writer, 3: auto), 3 default - proc/insert(var/obj/item/weapon/card/card, var/slot = 3) - if(!computer) - return 0 - // This shouldn't happen, just in case.. - if(slot == 2 && !dualslot) - to_chat(usr, "This device has only one card slot") - return 0 - - var/mob/living/L = usr - switch(slot) - if(1) - if(equip_to_reader(card, L)) - to_chat(usr, "You insert the card into reader slot") - else - to_chat(usr, "There is already something in the reader slot.") - if(2) - if(equip_to_writer(card, L)) - to_chat(usr, "You insert the card into writer slot") - else - to_chat(usr, "There is already something in the reader slot.") - if(3) - if(equip_to_reader(card, L)) - to_chat(usr, "You insert the card into reader slot") - else if(equip_to_writer(card, L) && dualslot) - to_chat(usr, "You insert the card into writer slot") - else if(dualslot) - to_chat(usr, "There is already something in both slots.") - else - to_chat(usr, "There is already something in the reader slot.") - - // Usage of insert() preferred, as it also tells result to the user. - proc/equip_to_reader(var/obj/item/weapon/card/card, var/mob/living/L) - if(!reader) - L.drop_item() - card.loc = src - reader = card - return 1 - return 0 - - proc/equip_to_writer(var/obj/item/weapon/card/card, var/mob/living/L) - if(!writer && dualslot) - L.drop_item() - card.loc = src - writer = card - return 1 - return 0 - - // cardslot.remove(slot) - // slot: Which slot to remove card(s) from (1: reader only, 2: writer only, 3: both [works even with one card], 4: reader and if empty then writer ), 3 default - proc/remove(var/slot = 3) - var/mob/living/L = usr - switch(slot) - if(1) - if(remove_reader(L)) - to_chat(L, "You remove the card from reader slot") - else - to_chat(L, "There is no card in the reader slot") - if(2) - if(remove_writer(L)) - to_chat(L, "You remove the card from writer slot") - else - to_chat(L, "There is no card in the writer slot") - if(3) - if(remove_reader(L)) - if(remove_writer(L)) - to_chat(L, "You remove cards from both slots") - else - to_chat(L, "You remove the card from reader slot") - else - if(remove_writer(L)) - to_chat(L, "You remove the card from writer slot") - else - to_chat(L, "There are no cards in both slots") - if(4) - if(!remove_reader(L)) - if(remove_writer(L)) - to_chat(L, "You remove the card from writer slot") - else if(!dualslot) - to_chat(L, "There is no card in the reader slot") - else - to_chat(L, "There are no cards in both slots") - else - to_chat(L, "You remove the card from reader slot") - - - proc/remove_reader(var/mob/living/L) - if(reader) - reader.loc = loc - if(istype(L) && !L.get_active_hand()) - L.put_in_hands(reader) - else - reader.loc = computer.loc - reader = null - return 1 - return 0 - - proc/remove_writer(var/mob/living/L) - if(writer && dualslot) - writer.loc = loc - if(istype(L) && !L.get_active_hand()) - L.put_in_hands(writer) - else - writer.loc = computer.loc - writer = null - return 1 - return 0 - - - - - // Authorizes the user based on the computer's requirements - proc/authenticate() - return computer.check_access(reader) - - proc/addfile(var/datum/file/F) - if(!dualslot || !istype(writer,/obj/item/weapon/card/data)) - return 0 - var/obj/item/weapon/card/data/D = writer - if(D.files.len > 3) - return 0 - D.files += F - return 1 - -/obj/item/part/computer/cardslot/dual - name = "magnetic card reader" - desc = "Contains slots for inserting magnetic swipe cards for reading and writing." - dualslot = 1 - - - /* - // Atlantis: Reworked card manipulation a bit. - // No need for separated code for dual and single readers. - // Both is handled in single-slot reader code now, thanks to the "dualslot" var. - // Leaving this code here if someone wants to somehow use it, just uncomment. - - insert(var/obj/item/weapon/card/card,var/slot = 0) - if(!computer) - return 0 - - if(istype(card,/obj/item/weapon/card/emag) && !reader) // emag reader slot - usr.visible_message("[computer]'s screen flickers for a moment.","You insert \the [card]. After a moment, the card ejects itself, and [computer] beeps.","[computer] beeps.") - computer.emagged = 1 - return 1 - - if(slot == 1) // 1: writer - if(writer != null) - to_chat(usr, "There's already a card in that slot!") - return 0 - var/mob/living/L = usr - L.drop_item() - card.loc = src - writer = card - return 1 - else if(slot == 2) // 2: reader - if(reader != null) - to_chat(usr, "There's already a card in that slot!") - return 0 - var/mob/living/L = usr - L.drop_item() - card.loc = src - reader = card - return 1 - else // 0: auto - if(reader && writer) - to_chat(usr, "Both slots are full!") - return 0 - var/mob/living/L = usr - L.drop_item() - card.loc = src - if(reader) - writer = card - computer.updateUsrDialog() - return 1 - if(istype(card,/obj/item/weapon/card/id) && !(access_change_ids in card:access) && !writer) // not authorized - writer = card - computer.updateUsrDialog() - return 1 - if(!reader) - reader = card - computer.updateUsrDialog() - return 1 - return 0 - - remove(var/obj/item/weapon/card/card) - if(card != reader && card != writer) - return - - if(card == reader) reader = null - if(card == writer) writer = null - card.loc = loc - - var/mob/living/carbon/human/user = usr - if(ishuman(user) && !user.get_active_hand()) - user.put_in_hands(card) - else - card.loc = computer.loc -*/ - - diff --git a/code/modules/computer3/computer.dm b/code/modules/computer3/computer.dm deleted file mode 100644 index 3adf8542261..00000000000 --- a/code/modules/computer3/computer.dm +++ /dev/null @@ -1,460 +0,0 @@ -/obj/machinery/computer3 - name = "computer" - icon = 'icons/obj/computer3.dmi' - icon_state = "frame" - density = 1 - anchored = 1.0 - - idle_power_usage = 20 - active_power_usage = 50 - - var/allow_disassemble = 1 - var/legacy_icon = 0 // if 1, use old style icons - var/show_keyboard = 1 - - // These is all you should need to change when creating a new computer. - // If there is no default program, the OS will run instead. - // If there is no hard drive, but there is a default program, the OS rom on - // the circuitboard will be overridden. - - // For these, typepaths are used, NOT objects - - var/default_prog = null // the program running when spawned - var/list/spawn_files = list() // files added when spawned - var/list/spawn_parts = list(/obj/item/part/computer/storage/hdd/big) // peripherals to spawn - - // Computer3 components - put an object in them in New() when not built - // I used to have a more pliable /list, but the ambiguities - // there in how many of what you had was killing me, especially - // when you had to search the list to find what you had. - - // Mostly decorative, holds the OS rom - var/obj/item/part/computer/circuitboard/circuit - - // Storage - var/obj/item/part/computer/storage/hdd/hdd = null - var/obj/item/part/computer/storage/removable/floppy = null - // Networking - var/obj/item/part/computer/networking/radio/radio = null // not handled the same as other networks - var/obj/item/part/computer/networking/cameras/camnet = null // just plain special - var/obj/item/part/computer/networking/net = null // Proximity, area, or cable network - - // Card reader - note the HoP reader is a subtype - var/obj/item/part/computer/cardslot/cardslot = null - - // Misc & special purpose - var/obj/item/part/computer/ai_holder/cradle = null - var/obj/item/part/computer/toybox/toybox = null - var/mob/living/silicon/ai/occupant = null - - - // Legacy variables - // camera networking - overview (???) - var/mapping = 0 - var/last_pic = 1.0 - - // Purely graphical effect - var/icon/kb = null - - // These are necessary in order to consolidate all computer types into one - var/datum/wires/wires = null - var/powernet = null - - // Used internally - var/datum/file/program/program = null // the active program (null if defaulting to os) - var/datum/file/program/os = null // the base code of the machine (os or hardcoded program) - - // If you want the computer to have a UPS, add a battery during construction. This is useful for things like - // the comms computer, solar trackers, etc, that should function when all else is off. - // Laptops will require batteries and have no mains power. - - var/obj/item/weapon/stock_parts/cell/battery = null // uninterruptible power supply aka battery - - - verb/ResetComputer() - set name = "Reset Computer" - set category = "Object" - set src in view(1) - - if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living)) - to_chat(usr, "You can't do that.") - return - - if(!Adjacent(usr)) - to_chat(usr, "You can't reach it.") - return - - Reset() - - New(var/L, var/built = 0) - ..() - spawn(2) - power_change() - - if(show_keyboard) - var/kb_state = "kb[rand(1,15)]" - kb = image('icons/obj/computer3.dmi',icon_state=kb_state) - overlays += kb - - if(!built) - if(!circuit || !istype(circuit)) - circuit = new(src) - if(circuit.OS) - os = circuit.OS - circuit.OS.computer = src - else - os = null - - // separated into its own function because blech - spawn_parts() - - if(default_prog) // Add the default software if applicable - var/datum/file/program/P = new default_prog - if(hdd) - hdd.addfile(P,1) - program = P - if(!os) - os = P - else if(floppy) - floppy.inserted = new(floppy) - floppy.files = floppy.inserted.files - floppy.addfile(P) - program = P - else - circuit.OS = P - circuit.OS.computer = src - os = circuit.OS - circuit.name = "Circuitboard ([P])" - - - if(hdd) // Spawn files - for(var/typekey in spawn_files) - hdd.addfile(new typekey,1) - - if(program) - program.execute(os) - update_icon() - - - proc/update_spawn_files() - for(var/typekey in spawn_files) - hdd.addfile(new typekey,1) - - proc/spawn_parts() - for(var/typekey in spawn_parts) - - if(ispath(typekey,/obj/item/part/computer/storage/removable)) - if(floppy) continue - floppy = new typekey(src) - floppy.init(src) - continue - if(ispath(typekey,/obj/item/part/computer/storage/hdd)) - if(hdd) continue - hdd = new typekey(src) - hdd.init(src) - continue - - if(ispath(typekey,/obj/item/part/computer/networking/cameras)) - if(camnet) continue - camnet = new typekey(src) - camnet.init(src) - continue - if(ispath(typekey,/obj/item/part/computer/networking/radio)) - if(radio) continue - radio = new typekey(src) - radio.init(src) - continue - if(ispath(typekey,/obj/item/part/computer/networking)) - if(net) continue - net = new typekey(src) - net.init(src) - continue - - if(ispath(typekey,/obj/item/part/computer/cardslot)) - if(cardslot) continue - cardslot = new typekey(src) - cardslot.init(src) - continue - if(ispath(typekey,/obj/item/part/computer/ai_holder)) - if(cradle) continue - cradle = new typekey(src) - cradle.init(src) - if(ispath(typekey,/obj/item/part/computer/toybox)) - if(toybox) continue - toybox = new typekey(src) - toybox.init(src) - continue - - if(ispath(typekey,/obj/item/weapon/stock_parts/cell)) - if(battery) continue - battery = new typekey(src) - continue - - proc/Reset(var/error = 0) - for(var/mob/living/M in range(1)) - M << browse(null,"window=\ref[src]") - if(program) - program.Reset() - program = null - req_access = os.req_access - update_icon() - - // todo does this do enough - - emp_act(severity) - if(prob(20/severity)) set_broken() - ..() - - - ex_act(severity) - switch(severity) - if(1.0) - qdel(src) - return - if(2.0) - if(prob(25)) - qdel(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 - - - blob_act() - if(prob(75)) - set_broken() - density = 0 - - /* - Computers have the capability to use a battery backup. - Note that auto_use_power's return value is strictly whether - or not it is successfully powered. - - This allows laptops, and also allows you to create computers that - remain active when: - - * the APC is destroy'd, emag'd, malf'd, emp'd, ninja'd etc - * the computer was built in an unpowered zone - * the station power is out, cables are cut, etc - - By default, most computers will NOT spawn with a battery backup, and - SHOULD not. Players can take apart a computer to insert the battery - if they want to ensure, for example, the AI upload remains when the - power is cut off. - - Make sure to use use_power() a bunch in peripherals code - */ - auto_use_power() - if(!powered(power_channel)) - if(battery && battery.charge > 0) - if(use_power == 1) - battery.use(idle_power_usage) - else - battery.use(active_power_usage) - return 1 - return 0 - if(src.use_power == 1) - use_power(idle_power_usage,power_channel) - else if(src.use_power >= 2) - use_power(active_power_usage,power_channel) - return 1 - - use_power(var/amount, var/chan = -1) - if(chan == -1) - chan = power_channel - - var/area/A = get_area(loc) - if(istype(A) && A.powered(chan)) - A.use_power(amount, chan) - else if(battery && battery.charge > 0) - battery.use(amount) - - power_change() - if( !powered(power_channel) && (!battery || battery.charge <= 0) ) - stat |= NOPOWER - else - stat &= ~NOPOWER - - process() - auto_use_power() - power_change() - update_icon() - if(stat & (NOPOWER|BROKEN)) - return - - if(program) - program.process() - return - - if(os) - program = os - os.process() - return - - - proc/set_broken() - icon_state = "computer_b" - stat |= BROKEN - crit_fail = 1 - if(program) - program.error = BUSTED_ASS_COMPUTER - if(os) - os.error = BUSTED_ASS_COMPUTER - - attackby(I as obj, mob/user as mob, params) - if(istype(I, /obj/item/weapon/screwdriver) && allow_disassemble) - disassemble(user) - return - - /* - +++++++++++ - |IMPORTANT| If you add a peripheral, put it in this list - +++++++++++ -------------------------------------------- - */ - var/list/peripherals = list(hdd,floppy,radio,net,cardslot,cradle) //camnet, toybox removed - - var/list/p_list = list() - for(var/obj/item/part/computer/C in peripherals) - if(!isnull(C) && C.allow_attackby(I,user)) - p_list += C - if(p_list.len) - var/obj/item/part/computer/P = null - if(p_list.len == 1) - P = p_list[1] - else - P = input(user,"Which component?") as null|anything in p_list - - if(P) - P.attackby(I,user, params) - return - ..() - - attack_hand(var/mob/user as mob) - if(stat) - Reset() - return - - // I don't want to deal with computers that you can't walk up to and use - // there is still cardauth anyway - //if(!allowed(user)) - // return - - if(program) - if(program.computer != src) // floppy disk may have been removed, etc - Reset() - attack_hand(user) - return - if(program.error) - Crash(program.error) - return - user.set_machine(src) - program.attack_hand(user) // will normally translate to program/interact() - return - - if(os) - program = os - user.set_machine(src) - os.attack_hand(user) - return - - to_chat(user, "\The [src] won't boot!") - - attack_ai(var/mob/user as mob) // copypasta because server racks lose attack_hand() - if(stat) - Reset() - return - - if(program) - if(program.computer != src) // floppy disk may have been removed, etc - Reset() - attack_ai(user) - return - if(program.error) - Crash(program.error) - return - user.set_machine(src) - program.attack_hand(user) // will normally translate to program/interact() - return - - if(os) - program = os - user.set_machine(src) - os.attack_hand(user) - return - - to_chat(user, "\The [src] won't boot!") - - interact() - if(stat) - Reset() - return - if(!allowed(usr) || !usr in view(1)) - usr.unset_machine() - return - - if(program) - program.interact() - return - - if(os) - program = os - os.interact() - return - - update_icon() - if(legacy_icon) - icon_state = initial(icon_state) - // Broken - if(stat & BROKEN) - icon_state += "b" - - // Powered - else if(stat & NOPOWER) - icon_state = initial(icon_state) - icon_state += "0" - return - if(stat) - overlays.Cut() - return - if(program) - overlays = list(program.overlay) - if(show_keyboard) - overlays += kb - name = "[program.name] [initial(name)]" - else if(os) - overlays = list(os.overlay) - if(show_keyboard) - overlays += kb - name = initial(name) - else - var/global/image/generic = image('icons/obj/computer3.dmi',icon_state="osod") // orange screen of death - overlays = list(generic) - if(show_keyboard) - overlays += kb - name = initial(name) + " (orange screen of death)" - - //Returns percentage of battery charge remaining. Returns -1 if no battery is installed. - proc/check_battery_status() - if(battery) - var/obj/item/weapon/stock_parts/cell/B = battery - return round(B.charge / (B.maxcharge / 100)) - else - return -1 - - - -/obj/machinery/computer3/wall_comp - name = "terminal" - icon = 'icons/obj/computer3.dmi' - icon_state = "wallframe" - density = 0 - pixel_y = -3 - show_keyboard = 0 diff --git a/code/modules/computer3/computer3_notes.dm b/code/modules/computer3/computer3_notes.dm deleted file mode 100644 index c27410e6375..00000000000 --- a/code/modules/computer3/computer3_notes.dm +++ /dev/null @@ -1,34 +0,0 @@ -/* - 1. Do NOT confuse Computer.Crash(errorcode) with byond CRASH(message) - 2 Do NOT talk about fight club. - 3 If this if your first night here, you have to crash the computer. - 4 Where am I? - 5 Someone help me, please... - 6. Be sure to use computer.use_power() appropriately. Laptops should run out of battery occasionally. - 7 Everyone fights, no-one quits. If you don't do your job, I'll crash you myself. - 6 Don't allow more than 42 angels to dance on the head of a pin. - 5. Once a computer has spawned, they are just like the rest, except when they aren't. - 4 Get me four glasses of apple juice. - 3. Components are only added or removed when disassembled and rebuilt. However, they may be EMP'd. - 2 Only you can prevent friendly fire. - 1 Do not talk about fight club. - 2. If a component subtype needs to be handled separately (removable drives, radio networks), declare it separately. - 3 Television rules the nation - 4. interactable() does all the sanity checks, adds fingerprints, sets machines, initializes popup, and makes a damn fine pot of coffee. - 5 Love conquers all. - 6 If at all possible, do a barrel roll. - 7. Don't forget to use the network verify function to make sure you still have access to remote machines. - - - - - TODO: - * "Nothing left to call the shuttle" check - * Communications terminal printing - move it to a printer of some sort? Make a printer peripheral--but then which ones print the comms? - * Remove the partially transparent border on program screens, as it clashes with some frames - * Chop the corners on program screens now that screen sizes are standard - * ntos: - * Needs a text editor/viewer - * Needs file copy and file move - I think I know how I'm gonna do it - * Needs a peripheral view (eject disks and cards, network actions, ???) -*/ \ No newline at end of file diff --git a/code/modules/computer3/computers/HolodeckControl.dm b/code/modules/computer3/computers/HolodeckControl.dm deleted file mode 100644 index 748f1a0b2b8..00000000000 --- a/code/modules/computer3/computers/HolodeckControl.dm +++ /dev/null @@ -1,254 +0,0 @@ -/obj/machinery/computer3/HolodeckControl - default_prog = /datum/file/program/holodeck - - -// Todo: I personally would like to add a second holodeck in the theater for making appropriate playgrounds. -// perhaps a holodeck association keyfile? -// One more thing while I'm here -// C3 allows multiple computers to run this program, but it was designed on the assumption that only one would, ever -// I am not going to add or remove anything right now, I'm just porting it - - -/datum/file/program/holodeck - name = "holodeck control console" - desc = "Used to control a nearby holodeck." - active_state = "holocontrol" - var/area/linkedholodeck = null - var/area/target = null - var/active = 0 - var/list/holographic_items = list() - var/damaged = 0 - var/last_change = 0 - var/emagged = 0 - - - interact() - if(!interactable()) - return - var/dat = "

Current Loaded Programs

" - dat += "((Empty Court))
" - dat += "((Boxing Court))
" - dat += "((Basketball Court))
" - dat += "((Thunderdome Court))
" - dat += "((Beach))
" -// dat += "((Shutdown System))
" - - dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
" - - if(emagged) - dat += "(Begin Atmospheric Burn Simulation)
" - dat += "Ensure the holodeck is empty before testing.
" - dat += "
" - dat += "(Begin Wildlife Simulation)
" - dat += "Ensure the holodeck is empty before testing.
" - dat += "
" - if(issilicon(usr)) - dat += "(Re-Enable Safety Protocols?)
" - dat += "Safety Protocols are DISABLED
" - else - if(issilicon(usr)) - dat += "(Override Safety Protocols?)
" - dat += "
" - dat += "Safety Protocols are ENABLED
" - - popup.set_content(dat) - popup.open() - return - - - Topic(var/href, var/list/href_list) - if(!interactable() || ..(href,href_list)) - return - - if("emptycourt" in href_list) - target = locate(/area/holodeck/source_emptycourt) - if(target) - loadProgram(target) - - else if("boxingcourt" in href_list) - target = locate(/area/holodeck/source_boxingcourt) - if(target) - loadProgram(target) - - else if("basketball" in href_list) - target = locate(/area/holodeck/source_basketball) - if(target) - loadProgram(target) - - else if("thunderdomecourt" in href_list) - target = locate(/area/holodeck/source_thunderdomecourt) - if(target) - loadProgram(target) - - else if("beach" in href_list) - target = locate(/area/holodeck/source_beach) - if(target) - loadProgram(target) - - else if("turnoff" in href_list) - target = locate(/area/holodeck/source_plating) - if(target) - loadProgram(target) - - else if("burntest" in href_list) - if(!emagged) return - target = locate(/area/holodeck/source_burntest) - if(target) - loadProgram(target) - - else if("wildlifecarp" in href_list) - if(!emagged) return - target = locate(/area/holodeck/source_wildlife) - if(target) - loadProgram(target) - - else if("AIoverride" in href_list) - 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") - - interact() - return - - Reset() - emergencyShutdown() - - process() - if(active) - if(!checkInteg(linkedholodeck)) - damaged = 1 - target = locate(/area/holodeck/source_plating) - if(target) - loadProgram(target) - active = 0 - for(var/mob/M in range(10,src)) - M.show_message("The holodeck overloads!") - - - for(var/turf/T in linkedholodeck) - if(prob(30)) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(2, 1, T) - s.start() - T.ex_act(3) - T.hotspot_expose(1000,500,1) - - - for(var/item in holographic_items) - if(!(get_turf(item) in linkedholodeck)) - derez(item, 0) - - - - proc/derez(var/obj/obj , var/silent = 1) - holographic_items.Remove(obj) - - if(obj == null) - return - - if(isobj(obj)) - var/mob/M = obj.loc - if(ismob(M)) - M.unEquip(obj) - M.update_icons() //so their overlays update - - if(!silent) - var/obj/oldobj = obj - obj.visible_message("The [oldobj.name] fades away!") - qdel(obj) - - proc/checkInteg(var/area/A) - for(var/turf/T in A) - if(istype(T, /turf/space)) - return 0 - - return 1 - - proc/togglePower(var/toggleOn = 0) - - if(toggleOn) - var/area/targetsource = locate(/area/holodeck/source_emptycourt) - holographic_items = targetsource.copy_contents_to(linkedholodeck) - - spawn(30) - for(var/obj/effect/landmark/L in linkedholodeck) - if(L.name=="Atmospheric Test Start") - spawn(20) - var/turf/T = get_turf(L) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(2, 1, T) - s.start() - if(T) - T.temperature = 5000 - T.hotspot_expose(50000,50000,1) - - active = 1 - else - for(var/item in holographic_items) - derez(item) - var/area/targetsource = locate(/area/holodeck/source_plating) - targetsource.copy_contents_to(linkedholodeck , 1) - active = 0 - - - proc/loadProgram(var/area/A) - - if(world.time < (last_change + 25)) - if(world.time < (last_change + 15))//To prevent super-spam clicking, reduced process size and annoyance -Sieve - return - for(var/mob/M in range(3,src)) - M.show_message("ERROR. Recalibrating projetion apparatus.") - last_change = world.time - return - - last_change = world.time - active = 1 - - for(var/item in holographic_items) - derez(item) - - for(var/obj/effect/decal/cleanable/blood/B in linkedholodeck) - qdel(B) - - for(var/mob/living/simple_animal/hostile/carp/C in linkedholodeck) - qdel(C) - - holographic_items = A.copy_contents_to(linkedholodeck , 1) - - if(emagged) - for(var/obj/item/weapon/holo/esword/H in linkedholodeck) - H.damtype = BRUTE - - spawn(30) - for(var/obj/effect/landmark/L in linkedholodeck) - if(L.name=="Atmospheric Test Start") - spawn(20) - var/turf/T = get_turf(L) - var/datum/effect/system/spark_spread/s = new /datum/effect/system/spark_spread - s.set_up(2, 1, T) - s.start() - if(T) - T.temperature = 5000 - T.hotspot_expose(50000,50000,1) - if(L.name=="Holocarp Spawn") - new /mob/living/simple_animal/hostile/carp(L.loc) - - - proc/emergencyShutdown() - //Get rid of any items - for(var/item in holographic_items) - derez(item) - //Turn it back to the regular non-holographic room - target = locate(/area/holodeck/source_plating) - if(target) - loadProgram(target) - - var/area/targetsource = locate(/area/holodeck/source_plating) - targetsource.copy_contents_to(linkedholodeck , 1) - active = 0 - diff --git a/code/modules/computer3/computers/Operating.dm b/code/modules/computer3/computers/Operating.dm deleted file mode 100644 index 0f989780d71..00000000000 --- a/code/modules/computer3/computers/Operating.dm +++ /dev/null @@ -1,47 +0,0 @@ -/obj/machinery/computer3/operating - default_prog = /datum/file/program/op_monitor - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/prox) - icon_state = "frame-med" - -/datum/file/program/op_monitor - name = "operating table monitor" - desc = "Monitors patient status during surgery." - active_state = "operating" - var/mob/living/carbon/human/patient = null - var/obj/machinery/optable/table = null - - -/datum/file/program/op_monitor/interact() - if(!interactable()) - return - if(!computer.net) - computer.Crash(MISSING_PERIPHERAL) - return - table = computer.net.connect_to(/obj/machinery/optable,table) - - var/dat = "" - if(table) - dat += "Patient information:
" - if(src.table && (src.table.check_victim())) - src.patient = src.table.victim - dat += {"Patient Status: [patient.stat ? "Non-Responsive" : "Stable"]
- Blood Type: [patient.b_type]
-
- Health: [round(patient.health)]
- Brute Damage: [round(patient.getBruteLoss())]
- Toxins Damage: [round(patient.getToxLoss())]
- Fire Damage: [round(patient.getFireLoss())]
- Suffocation Damage: [round(patient.getOxyLoss())]
- "} - else - src.patient = null - dat += "No patient detected" - else - dat += "Operating table not found." - - popup.set_content(dat) - popup.open() -/datum/file/program/op_monitor/Topic() - if(!interactable()) - return - ..() \ No newline at end of file diff --git a/code/modules/computer3/computers/aifixer.dm b/code/modules/computer3/computers/aifixer.dm deleted file mode 100644 index 7e1f3959e9f..00000000000 --- a/code/modules/computer3/computers/aifixer.dm +++ /dev/null @@ -1,117 +0,0 @@ -/obj/machinery/computer3/aifixer - default_prog = /datum/file/program/aifixer - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/ai_holder) - icon_state = "frame-rnd" - - -/datum/file/program/aifixer - name = "AI system integrity restorer" - desc = "Repairs and revives artificial intelligence cores." - image = 'icons/ntos/airestore.png' - active_state = "ai-fixer-empty" - req_access = list(access_captain, access_robotics, access_heads) - - update_icon() - if(!computer || !computer.cradle) - overlay.icon_state = "ai-fixer-404" - return // what - - if(!computer.cradle.occupant) - overlay.icon_state = "ai-fixer-empty" - else - if(computer.cradle.occupant.health >= 0 && computer.cradle.occupant.stat != 2) - overlay.icon_state = "ai-fixer-full" - else - overlay.icon_state = "ai-fixer-404" - computer.update_icon() - - interact() - if(!interactable()) - return - - if(!computer.cradle) - computer.Crash(MISSING_PERIPHERAL) - return - - popup.set_content(aifixer_menu()) - popup.open() - return - - proc/aifixer_menu() - var/dat = "" - if(computer.cradle.occupant) - var/laws - dat += "

Stored AI: [computer.cradle.occupant.name]

" - dat += "System integrity: [(computer.cradle.occupant.health+100)/2]%
" - - if(computer.cradle.occupant.laws.zeroth) - laws += "0: [computer.cradle.occupant.laws.zeroth]
" - - var/number = 1 - for(var/index = 1, index <= computer.cradle.occupant.laws.inherent.len, index++) - var/law = computer.cradle.occupant.laws.inherent[index] - if(length(law) > 0) - laws += "[number]: [law]
" - number++ - - for(var/index = 1, index <= computer.cradle.occupant.laws.supplied.len, index++) - var/law = computer.cradle.occupant.laws.supplied[index] - if(length(law) > 0) - laws += "[number]: [law]
" - number++ - - dat += "Laws:
[laws]
" - - if(computer.cradle.occupant.stat == 2) - dat += "AI non-functional" - else - dat += "AI functional" - if(!computer.cradle.busy) - dat += "

[topic_link(src,"fix","Begin Reconstruction")]" - else - dat += "

Reconstruction in process, please wait.
" - dat += "
[topic_link(src,"close","Close")]" - return dat - - Topic(var/href, var/list/href_list) - if(!interactable() || !computer.cradle || ..(href,href_list)) - return - - if("fix" in href_list) - var/mob/living/silicon/ai/occupant = computer.cradle.occupant - if(!occupant) return - - computer.cradle.busy = 1 - computer.overlays += image('icons/obj/computer.dmi', "ai-fixer-on") - - var/i = 0 - while(occupant.health < 100) - if(!computer || (computer.stat&~MAINT)) // takes some time, keep checking - break - - occupant.adjustOxyLoss(-1) - occupant.adjustFireLoss(-1) - occupant.adjustToxLoss(-1) - occupant.adjustBruteLoss(-1) - occupant.updatehealth() - if(occupant.health >= 0 && computer.cradle.occupant.stat == 2) - occupant.stat = 0 - occupant.lying = 0 - dead_mob_list -= occupant - living_mob_list += occupant - update_icon() - - i++ - if(i == 5) - computer.use_power(50) // repairing an AI is nontrivial. laptop battery may not be enough. - computer.power_change() // if the power runs out, set stat - i = 0 - - computer.updateUsrDialog() - - sleep(10) - computer.cradle.busy = 0 - computer.overlays -= image('icons/obj/computer.dmi', "ai-fixer-on") - - computer.updateUsrDialog() - return diff --git a/code/modules/computer3/computers/arcade.dm b/code/modules/computer3/computers/arcade.dm deleted file mode 100644 index 29ada5126c3..00000000000 --- a/code/modules/computer3/computers/arcade.dm +++ /dev/null @@ -1,180 +0,0 @@ -/obj/machinery/computer3/arcade - default_prog = /datum/file/program/arcade - spawn_parts = list(/obj/item/part/computer/toybox) //NO HDD - the game is loaded on the circuitboard's OS slot - -/obj/item/part/computer/toybox - var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 2, - /obj/item/toy/blink = 2, - /obj/item/clothing/under/syndicate/tacticool = 2, - /obj/item/toy/sword = 2, - /obj/item/weapon/gun/projectile/revolver/capgun = 2, - /obj/item/weapon/gun/projectile/shotgun/toy/crossbow = 2, - /obj/item/clothing/suit/syndicatefake = 2, - /obj/item/weapon/storage/fancy/crayons = 2, - /obj/item/toy/spinningtoy = 2, - /obj/item/toy/prize/ripley = 1, - /obj/item/toy/prize/fireripley = 1, - /obj/item/toy/prize/deathripley = 1, - /obj/item/toy/prize/gygax = 1, - /obj/item/toy/prize/durand = 1, - /obj/item/toy/prize/honk = 1, - /obj/item/toy/prize/marauder = 1, - /obj/item/toy/prize/seraph = 1, - /obj/item/toy/prize/mauler = 1, - /obj/item/toy/prize/odysseus = 1, - /obj/item/toy/prize/phazon = 1 - ) - proc/dispense() - if(computer && !computer.stat) - var/prizeselect = pickweight(prizes) - new prizeselect(computer.loc) - if(istype(prizeselect, /obj/item/weapon/gun/projectile/revolver/capgun)) //Ammo comes with the gun - new /obj/item/ammo_box/caps(computer.loc) - else if(istype(prizeselect, /obj/item/clothing/suit/syndicatefake)) //Helmet is part of the suit - new /obj/item/clothing/head/syndicatefake(computer.loc) - feedback_inc("arcade_win_normal") - computer.use_power(500) - - -/datum/file/program/arcade - desc = "The best arcade game ever produced by Nanotrasen's short-lived entertainment divison." - //headcanon: they also ported E.T. for the atari 2600, superman 64, and basically every other movie tie-in game ever - - active_state = "generic" - - var/turtle = 0 - var/enemy_name = "Space Villian" - var/temp = "Winners Don't Use Spacedrugs" //Temporary message, for attack messages, etc - var/player_hp = 30 //Player health/attack points - var/player_mp = 10 - var/enemy_hp = 45 //Enemy health/attack points - var/enemy_mp = 20 - var/gameover = 0 - var/blocked = 0 //Player cannot attack/heal while set - -/datum/file/program/arcade/New() - ..() - var/name_action - var/name_part1 - var/name_part2 - - name_action = pick("Defeat ", "Annihilate ", "Save ", "Strike ", "Stop ", "Destroy ", "Robust ", "Romance ", "Pwn ", "Own ", "ERP ") - - name_part1 = pick("the Automatic ", "Farmer ", "Lord ", "Professor ", "the Cuban ", "the Evil ", "the Dread King ", "the Space ", "Lord ", "the Great ", "Duke ", "General ") - name_part2 = pick("Melonoid", "Murdertron", "Sorcerer", "Ruin", "Jeff", "Ectoplasm", "Crushulon", "Uhangoid", "Vhakoid", "Peteoid", "slime", "Griefer", "ERPer", "Lizard Man", "Unicorn") - - enemy_name = replacetext(name_part1, "the ", "") + name_part2 - name = (name_action + name_part1 + name_part2) - - -/datum/file/program/arcade/interact() - if(!interactable()) - return - var/dat// = topic_link(src,"close","Close") - dat = "

[enemy_name]

" - - dat += "

[temp]

" - dat += "
Health: [player_hp] | Magic: [player_mp] | Enemy Health: [enemy_hp]
" - - if(gameover) - dat += "
[topic_link(src,"newgame","New Game")]" - else - dat += "
[topic_link(src,"attack","Attack")] | [topic_link(src,"heal","Heal")] | [topic_link(src,"charge","Recharge Power")]" - - dat += "
" - - popup.set_content(dat) - popup.open() - -/datum/file/program/arcade/Topic(href, list/href_list) - if(!interactable() || ..(href,href_list)) - return - if(!blocked && !gameover) - if("attack" in href_list) - blocked = 1 - var/attackamt = rand(2,6) - temp = "You attack for [attackamt] damage!" - computer.updateUsrDialog() - if(turtle > 0) - turtle-- - - sleep(10) - enemy_hp -= attackamt - arcade_action() - - else if("heal" in href_list) - blocked = 1 - var/pointamt = rand(1,3) - var/healamt = rand(6,8) - temp = "You use [pointamt] magic to heal for [healamt] damage!" - computer.updateUsrDialog() - turtle++ - - sleep(10) - player_mp -= pointamt - player_hp += healamt - blocked = 1 - computer.updateUsrDialog() - arcade_action() - - else if("charge" in href_list) - blocked = 1 - var/chargeamt = rand(4,7) - temp = "You regain [chargeamt] points" - player_mp += chargeamt - if(turtle > 0) - turtle-- - - computer.updateUsrDialog() - sleep(10) - arcade_action() - - if("newgame" in href_list) //Reset everything - temp = "New Round" - player_hp = 30 - player_mp = 10 - enemy_hp = 45 - enemy_mp = 20 - gameover = 0 - turtle = 0 - computer.updateUsrDialog() - - -/datum/file/program/arcade/proc/arcade_action() - if((enemy_mp <= 0) || (enemy_hp <= 0)) - if(!gameover) - gameover = 1 - temp = "[enemy_name] has fallen! Rejoice!" - if(computer.toybox) - computer.toybox.dispense() - - else if((enemy_mp <= 5) && (prob(70))) - var/stealamt = rand(2,3) - temp = "[enemy_name] steals [stealamt] of your power!" - player_mp -= stealamt - - if(player_mp <= 0) - gameover = 1 - sleep(10) - temp = "You have been drained! GAME OVER" - feedback_inc("arcade_loss_mana_normal") - - else if((enemy_hp <= 10) && (enemy_mp > 4)) - temp = "[enemy_name] heals for 4 health!" - enemy_hp += 4 - enemy_mp -= 4 - - else - var/attackamt = rand(3,6) - temp = "[enemy_name] attacks for [attackamt] damage!" - player_hp -= attackamt - - if((player_mp <= 0) || (player_hp <= 0)) - gameover = 1 - temp = "You have been crushed! GAME OVER" - feedback_inc("arcade_loss_hp_normal") - - if(interactable()) - computer.updateUsrDialog() - blocked = 0 - return diff --git a/code/modules/computer3/computers/atmos_alert.dm b/code/modules/computer3/computers/atmos_alert.dm deleted file mode 100644 index 31fa38f143f..00000000000 --- a/code/modules/computer3/computers/atmos_alert.dm +++ /dev/null @@ -1,110 +0,0 @@ -/obj/machinery/computer3/atmos_alert - default_prog = /datum/file/program/atmos_alert - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio) - icon_state = "frame-eng" - -/datum/file/program/atmos_alert - name = "atmospheric alert monitor" - desc = "Recieves alerts over the radio." - active_state = "alert:2" - refresh = 1 - var/list/priority_alarms = list() - var/list/minor_alarms = list() - - - execute(var/datum/file/program/source) - ..(source) - - if(!computer.radio) - computer.Crash(MISSING_PERIPHERAL) - - computer.radio.set_frequency(1437,RADIO_ATMOSIA) - - - Reset() - ..() - // Never save your work - priority_alarms.Cut() - minor_alarms.Cut() - - - // This will be called as long as the program is running on the parent computer - // and the computer has the radio peripheral - receive_signal(datum/signal/signal) - if(!signal || signal.encryption) return - - var/zone = signal.data["zone"] - var/severity = signal.data["alert"] - if(!zone || !severity) return - - minor_alarms -= zone - priority_alarms -= zone - if(severity=="severe") - priority_alarms += zone - else if(severity=="minor") - minor_alarms += zone - update_icon() - return - - - interact() - if(!interactable()) - return - if(!computer.radio) - computer.Crash(MISSING_PERIPHERAL) - - popup.set_content(return_text()) - popup.open() - - - update_icon() - ..() - if(priority_alarms.len > 0) - overlay.icon_state = "alert:2" - else if(minor_alarms.len > 0) - overlay.icon_state = "alert:1" - else - overlay.icon_state = "alert:0" - - if(computer) - computer.update_icon() - - - proc/return_text() - var/priority_text = "

Priority Alerts:

" - var/minor_text = "

Minor Alerts:

" - - if(priority_alarms.len) - for(var/zone in priority_alarms) - priority_text += "[format_text(zone)] [topic_link(src,"priority_clear=[ckey(zone)]","X")]
" - else - priority_text += "No priority alerts detected.
" - - if(minor_alarms.len) - for(var/zone in minor_alarms) - minor_text += "[format_text(zone)] [topic_link(src,"minor_clear=[ckey(zone)]","X")]
" - else - minor_text += "No minor alerts detected.
" - - return "[priority_text]

[minor_text]
[topic_link(src,"close","Close")]" - - - Topic(var/href, var/list/href_list) - if(!interactable() || ..(href,href_list)) - return - - if("priority_clear" in href_list) - var/removing_zone = href_list["priority_clear"] - for(var/zone in priority_alarms) - if(ckey(zone) == removing_zone) - to_chat(usr, "Priority Alert for area [zone] cleared.") - priority_alarms -= zone - - if("minor_clear" in href_list) - var/removing_zone = href_list["minor_clear"] - for(var/zone in minor_alarms) - if(ckey(zone) == removing_zone) - to_chat(usr, "Minor Alert for area [zone] cleared.") - minor_alarms -= zone - - computer.updateUsrDialog() diff --git a/code/modules/computer3/computers/camera.dm b/code/modules/computer3/computers/camera.dm deleted file mode 100644 index 76fdc4d3d2d..00000000000 --- a/code/modules/computer3/computers/camera.dm +++ /dev/null @@ -1,324 +0,0 @@ -/* - Camera monitoring computers - - NOTE: If we actually split the station camera network into regions that will help with sorting through the - tediously large list of cameras. The new camnet_key architecture lets you switch between keys easily, - so you don't lose the capability of seeing everything, you just switch to a subnet. -*/ - -/obj/machinery/computer3/security - default_prog = /datum/file/program/security - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/cameras) - spawn_files = list(/datum/file/camnet_key) - icon_state = "frame-sec" - - -/obj/machinery/computer3/security/wooden_tv - name = "security cameras console" - desc = "An old TV hooked into the stations camera network." - icon = 'icons/obj/computer.dmi' - icon_state = "security_det" - - legacy_icon = 1 - allow_disassemble = 0 - - // No operating system - New() - ..(built=0) - os = program - circuit.OS = os - - -/obj/machinery/computer3/security/mining - name = "outpost cameras console" - desc = "Used to access the various cameras on the outpost." - spawn_files = list(/datum/file/camnet_key/miningoutpost) - -/* - Camera monitoring computers, wall-mounted -*/ -/obj/machinery/computer3/wall_comp/telescreen - default_prog = /datum/file/program/security - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/cameras) - spawn_files = list(/datum/file/camnet_key) - -/obj/machinery/computer3/wall_comp/telescreen/entertainment - desc = "Damn, they better have Paradise Channel on these things." - spawn_files = list(/datum/file/camnet_key/entertainment) - - -/* - File containing an encrypted camera network key. - - (Where by encrypted I don't actually mean encrypted at all) -*/ -/datum/file/camnet_key - name = "Security Camera Network Main Key" - var/title = "Station" - var/desc = "Connects to station security cameras." - var/list/networks = list("SS13") - var/screen = "cameras" - - execute(var/datum/file/source) - if(istype(source,/datum/file/program/security)) - var/datum/file/program/security/prog = source - prog.key = src - prog.camera_list = null - return - if(istype(source,/datum/file/program/ntos)) - for(var/obj/item/part/computer/storage/S in list(computer.hdd,computer.floppy)) - for(var/datum/file/F in S.files) - if(istype(F,/datum/file/program/security)) - var/datum/file/program/security/Sec = F - Sec.key = src - Sec.camera_list = null - Sec.execute(source) - return - computer.Crash(MISSING_PROGRAM) - -/datum/file/camnet_key/telecomms - name = "Telecomms Network Key" - title = "telecommunications satellite" - desc = "Connects to telecommunications satellite security cameras." - networks = list("Telecomms") - -/datum/file/camnet_key/researchoutpost - name = "Research Outpost Network Key" - title = "research outpost" - desc = "Connects to research outpost security cameras." - networks = list("Research Outpost") - -/datum/file/camnet_key/miningoutpost - name = "Mining Outpost Network Key" - title = "mining outpost" - desc = "Connects to mining outpost security cameras." - networks = list("Mining Outpost") - screen = "miningcameras" - -/datum/file/camnet_key/research - name = "Research Network Key" - title = "research" - desc = "Connects to research security cameras." - networks = list("Research") - -/datum/file/camnet_key/prison - name = "Prison Network Key" - title = "prison" - desc = "Connects to prison security cameras." - networks = list("Prison") - -/datum/file/camnet_key/interrogation - name = "Interrogation Network Key" - title = "interrogation" - desc = "Connects to interrogation security cameras." - networks = list("Interrogation") - -/datum/file/camnet_key/supermatter - name = "Supermatter Network Key" - title = "supermatter" - desc = "Connects to supermatter security cameras." - networks = list("Supermatter") - -/datum/file/camnet_key/singularity - name = "Singularity Network Key" - title = "singularity" - desc = "Connects to singularity security cameras." - networks = list("Singularity") - -/datum/file/camnet_key/anomalyisolation - name = "Anomaly Isolation Network Key" - title = "anomalyisolation" - desc = "Connects to interrogation security cameras." - networks = list("Anomaly Isolation") - -/datum/file/camnet_key/toxins - name = "Toxins Network Key" - title = "toxins" - desc = "Connects to toxins security cameras." - networks = list("Toxins") - -/datum/file/camnet_key/telepad - name = "Telepad Network Key" - title = "telepad" - desc = "Connects to telepad security cameras." - networks = list("Telepad") - -/datum/file/camnet_key/ert - name = "Emergency Response Team Network Key" - title = "emergency response team" - desc = "Connects to emergency response team security cameras." - networks = list("ERT") - -/datum/file/camnet_key/centcom - name = "Central Command Network Key" - title = "central command" - desc = "Connects to central command security cameras." - networks = list("CentCom") - -/datum/file/camnet_key/thunderdome - name = "Thunderdome Network Key" - title = "thunderdome" - desc = "Connects to thunderdome security cameras." - networks = list("Thunderdome") - -/datum/file/camnet_key/entertainment - name = "Entertainment Network Key" - title = "entertainment" - desc = "Connects to entertainment security cameras." - networks = list("news") - - -/* - Computer part needed to connect to cameras -*/ - -/obj/item/part/computer/networking/cameras - name = "camera network access module" - desc = "Connects a computer to the camera network." - - // I have no idea what the following does - var/mapping = 0//For the overview file, interesting bit of code. - - //proc/camera_list(var/datum/file/camnet_key/key) - get_machines(var/datum/file/camnet_key/key) - if(!computer || !is_away_level(computer.z)) - return null - - var/list/L = list() - for(var/obj/machinery/camera/C in cameranet.cameras) - var/list/temp = C.network & key.networks - if(temp.len) - L.Add(C) - - - return L - verify_machine(var/obj/machinery/camera/C,var/datum/file/camnet_key/key = null) - if(!istype(C) || !C.can_use()) - return 0 - - if(key) - var/list/temp = C.network & key.networks - if(!temp.len) - return 0 - return 1 - -/* - Camera monitoring program - - The following things should break you out of the camera view: - * The computer resetting, being damaged, losing power, etc - * The program quitting - * Closing the window - * Going out of range of the computer - * Becoming incapacitated - * The camera breaking, emping, disconnecting, etc -*/ - -/datum/file/program/security - name = "camera monitor" - desc = "Connets to the Nanotrasen Camera Network" - image = 'icons/ntos/camera.png' - active_state = "camera-static" - - var/datum/file/camnet_key/key = null - var/last_pic = 1.0 - var/last_camera_refresh = 0 - var/camera_list = null - - var/obj/machinery/camera/current = null - - execute(var/datum/file/program/caller) - ..(caller) - if(computer && !key) - var/list/fkeys = computer.list_files(/datum/file/camnet_key) - if(fkeys && fkeys.len) - key = fkeys[1] - update_icon() - computer.update_icon() - for(var/mob/living/L in viewers(1)) - if(!istype(L,/mob/living/silicon/ai) && L.machine == src) - L.reset_perspective(null) - - - Reset() - ..() - current = null - for(var/mob/living/L in viewers(1)) - if(!istype(L,/mob/living/silicon/ai) && L.machine == src) - L.reset_perspective(null) - - interact() - if(!interactable()) - return - - if(!computer.camnet) - computer.Crash(MISSING_PERIPHERAL) - return - - if(!key) - var/list/fkeys = computer.list_files(/datum/file/camnet_key) - if(fkeys && fkeys.len) - key = fkeys[1] - update_icon() - computer.update_icon() - if(!key) - return - - if(computer.camnet.verify_machine(current)) - usr.reset_perspective(current) - - if(world.time - last_camera_refresh > 50 || !camera_list) - last_camera_refresh = world.time - - var/list/temp_list = computer.camnet.get_machines(key) - - camera_list = "Network Key: [key.title] [topic_link(src,"keyselect","\[ Select key \]")]
" - for(var/obj/machinery/camera/C in temp_list) - if(C.status) - camera_list += "[C.c_tag] - [topic_link(src,"show=\ref[C]","Show")]
" - else - camera_list += "[C.c_tag] - DEACTIVATED
" - //camera_list += "
" + topic_link(src,"close","Close") - - popup.set_content(camera_list) - popup.open() - - - update_icon() - if(key) - overlay.icon_state = key.screen - name = key.title + " Camera Monitor" - else - overlay.icon_state = "camera-static" - name = initial(name) - - - - Topic(var/href,var/list/href_list) - if(!interactable() || !computer.camnet || ..(href,href_list)) - return - - if("show" in href_list) - var/obj/machinery/camera/C = locate(href_list["show"]) - if(istype(C) && C.status) - current = C - usr.reset_perspective(C) - interact() - return - - if("keyselect" in href_list) - current = null - usr.reset_perspective(null) - key = input(usr,"Select a camera network key:", "Key Select", null) as null|anything in computer.list_files(/datum/file/camnet_key) - camera_list = null - update_icon() - computer.update_icon() - if(key) - interact() - else - to_chat(usr, "The screen turns to static.") - return - - // Atlantis: Required for camnetkeys to work. -/datum/file/program/security/hidden - hidden_file = 1 diff --git a/code/modules/computer3/computers/card.dm b/code/modules/computer3/computers/card.dm deleted file mode 100644 index 69b74a0b067..00000000000 --- a/code/modules/computer3/computers/card.dm +++ /dev/null @@ -1,347 +0,0 @@ -/obj/machinery/computer3/card - default_prog = /datum/file/program/card_comp - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual) -/obj/machinery/computer3/card/hop - default_prog = /datum/file/program/card_comp - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot/dual) - spawn_files = list(/datum/file/program/arcade, /datum/file/program/security, /datum/file/camnet_key/miningoutpost, /datum/file/camnet_key/entertainment,/datum/file/camnet_key/prison) - - -/obj/machinery/computer3/card/centcom - default_prog = /datum/file/program/card_comp/centcom - -/datum/file/program/card_comp - name = "identification card console" - desc = "Used to modify magnetic strip ID cards." - image = 'icons/ntos/cardcomp.png' - active_state = "id" - - var/obj/item/weapon/card/id/reader = null - var/obj/item/weapon/card/id/writer = null - - var/mode = 0 - var/auth = 0 - var/printing = 0 - - proc/list_jobs() - return get_all_jobs() + "Custom" - - // creates the block with the script in it - // cache the result since it's almost constant but not quite - // the list of jobs won't change after all... - proc/scriptblock() - var/global/dat = null - var/counter = 0 - var jobs_all = "" - jobs_all += "" - - jobs_all += ""//Captain in special because he is head of heads ~Intercross21 - jobs_all += "" - jobs_all += "" - - counter = 0 - jobs_all += ""//Red - for(var/job in security_positions) - counter++ - if(counter >= 6) - jobs_all += "" - counter = 0 - jobs_all += "" - - counter = 0 - jobs_all += ""//Orange - for(var/job in engineering_positions) - counter++ - if(counter >= 6) - jobs_all += "" - counter = 0 - jobs_all += "" - - counter = 0 - jobs_all += ""//Green - for(var/job in medical_positions) - counter++ - if(counter >= 6) - jobs_all += "" - counter = 0 - jobs_all += "" - - counter = 0 - jobs_all += ""//Purple - for(var/job in science_positions) - counter++ - if(counter >= 6) - jobs_all += "" - counter = 0 - jobs_all += "" - - counter = 0 - jobs_all += ""//Grey - for(var/job in support_positions) - counter++ - if(counter >= 6) - jobs_all += "" - counter = 0 - jobs_all += "" - - dat = {""} - return dat - - // creates the list of access rights on the card - proc/accessblock() - var/accesses = "
Access
" - accesses += "
Command
SpecialCaptainCustom
Security
[replacetext(job, " ", " ")]
Engineering
[replacetext(job, " ", " ")]
Medical
[replacetext(job, " ", " ")]
Science
[replacetext(job, " ", " ")]
Support
[replacetext(job, " ", " ")]
" - accesses += "" - for(var/i = 1; i <= 7; i++) - accesses += "" - accesses += "" - for(var/i = 1; i <= 7; i++) - accesses += "" - accesses += "
[get_region_accesses_name(i)]:
" - for(var/A in get_region_accesses(i)) - if(A in writer.access) - accesses += topic_link(src,"access=[A]","[replacetext(get_access_desc(A), " ", " ")]") + " " - else - accesses += topic_link(src,"access=[A]",replacetext(get_access_desc(A), " ", " ")) + " " - accesses += "
" - accesses += "
" - return accesses - - proc/card_modify_menu() - //assume peripherals and cards, do checks for them in interact - - // Header - var/dat = "

" - dat += topic_link(src,"remove=writer","Remove [writer.name]") + " || " - dat += topic_link(src,"remove=reader","Remove [reader.name]") + "
" - dat += topic_link(src,"mode=1","Access Crew Manifest") + " || " - dat += topic_link(src,"logout","Log Out") + "
" - dat += "
" + scriptblock() - - // form for renaming the ID - dat += "
" - dat += "" - dat += "registered_name: " - dat += "" - dat += "
" - - // form for changing assignment, taken care of by scriptblock() mostly - var/assign_temp = writer.assignment - if(!assign_temp || assign_temp == "") assign_temp = "Unassigned" - dat += "Assignment: [assign_temp] change" - - // list of access rights - dat += accessblock() - - return dat - - proc/login_menu() - //assume peripherals and cards, do checks for them in interact - var/dat = "
Please insert the cards into the slots
" - - if(istype(writer)) - dat += "Target: [topic_link(src,"remove=writer",writer.name)]
" - else - dat += "Target: [topic_link(src,"insert=writer","--------")]
" - - if(istype(reader)) - dat += "Confirm Identity: [topic_link(src,"remove=reader",reader.name)]
" - else - dat += "Confirm Identity: [topic_link(src,"insert=reader","--------")]
" - dat += "[topic_link(src,"auth","{Log in}")]

" - dat += topic_link(src,"mode=1","Access Crew Manifest") - return dat - - proc/show_manifest() - // assume linked_db since called by interact() - var/crew = "" - var/list/L = list() - for(var/datum/data/record/t in data_core.general) - var/R = t.fields["name"] + " - " + t.fields["rank"] - L += R - for(var/R in sortList(L)) - crew += "[R]
" - return "Crew Manifest:
Please use security record computer to modify entries.

[crew][topic_link(src,"print","Print")]

[topic_link(src,"mode=0","Access ID modification console.")]
" - - // These are here partly in order to be overwritten by the centcom card computer code - proc/authenticate() - if(access_change_ids in reader.access) - return 1 - if(istype(usr,/mob/living/silicon/ai)) - return 1 - return 0 - - proc/set_default_access(var/jobname) - var/datum/job/jobdatum - for(var/jobtype in typesof(/datum/job)) - var/datum/job/J = new jobtype - if(ckey(J.title) == ckey(jobname)) - jobdatum = J - break - if(jobdatum) - writer.access = jobdatum.get_access() // ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) - - - interact() - if(!interactable()) return - - if(!computer.cardslot || !computer.cardslot.dualslot) - computer.Crash(MISSING_PERIPHERAL) - return - - reader = computer.cardslot.reader - writer = computer.cardslot.writer - - var/dat - - switch(mode) - if(0) - if( !istype(writer) || !istype(reader) ) - auth = 0 - if( !auth ) - dat = login_menu() - else - dat = card_modify_menu() - if(1) - dat = show_manifest() - - - popup.width = 940 - popup.height = 520 - popup.set_content(dat) - popup.open() - return - - - Topic(href, list/href_list) - if(!interactable() || !computer.cardslot || ..(href,href_list)) - return - // todo distance/disability checks - - if("mode" in href_list) - mode = text2num(href_list["mode"]) - if(mode != 0 && mode != 1) - mode = 0 - - auth = 0 // always log out if switching modes just in case - - if("remove" in href_list) - var/which = href_list["remove"] - if(which == "writer") - computer.cardslot.remove(2) - else - computer.cardslot.remove(1) - auth = 0 - - if("insert" in href_list) - var/obj/item/weapon/card/card = usr.get_active_hand() - if(!istype(card)) return - - var/which = href_list["insert"] - if(which == "writer") - computer.cardslot.insert(card,2) - else - computer.cardslot.insert(card,1) - - if("print" in href_list) - if(printing) - return - - printing = 1 - sleep(50) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) - P.info = "Crew Manifest:
" - var/list/L = list() - for(var/datum/data/record/t in data_core.general) - var/R = t.fields["name"] + " - " + t.fields["rank"] - L += R - for(var/R in sortList(L)) - P.info += "[R]
" - P.name = "paper- 'Crew Manifest'" - printing = 0 - - if("auth" in href_list) - auth = 0 - if(istype(reader) && istype(writer) && authenticate()) - auth = 1 - - if("logout" in href_list) - auth = 0 - - // Actual ID changing - - if("access" in href_list) - if(auth) - var/access_type = text2num(href_list["access"]) - writer.access ^= list(access_type) //logical xor: remove if present, add if not - - if("assign" in href_list) - if(auth) - var/t1 = href_list["assign"] - if(t1 == "Custom") - var/temp_t = sanitize(copytext(input("Enter a custom job assignment.","Assignment"),1,MAX_MESSAGE_LEN)) - if(temp_t) - t1 = temp_t - set_default_access(t1) - - writer.assignment = t1 - writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])") - - if("reg" in href_list) - if(auth) - writer.registered_name = href_list["reg"] - writer.name = text("[writer.registered_name]'s ID Card ([writer.assignment])") - - computer.updateUsrDialog() - return - - - - - - -/datum/file/program/card_comp/centcom - name = "CentCom identification console" - drm = 1 - - list_jobs() - return get_all_centcom_jobs() + "Custom" - - accessblock() - var/accesses = "
Central Command:
" - for(var/A in get_all_centcom_access()) - if(A in writer.access) - accesses += topic_link(src,"access=[A]","[replacetext(get_centcom_access_desc(A), " ", " ")]") + " " - else - accesses += topic_link(src,"access=[A]",replacetext(get_centcom_access_desc(A), " ", " ")) + " " - return accesses - - authenticate() - if(access_cent_commander in reader.access) - return 1 - return 0 \ No newline at end of file diff --git a/code/modules/computer3/computers/communications.dm b/code/modules/computer3/computers/communications.dm deleted file mode 100644 index bff075c4791..00000000000 --- a/code/modules/computer3/computers/communications.dm +++ /dev/null @@ -1,403 +0,0 @@ -/obj/machinery/computer3/communications - default_prog = /datum/file/program/communications - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace) - -/obj/machinery/computer3/communications/captain - default_prog = /datum/file/program/communications - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/cardslot/dual) - spawn_files = list(/datum/file/program/card_comp, /datum/file/program/security, /datum/file/program/crew, /datum/file/program/arcade, - /datum/file/camnet_key, /datum/file/camnet_key/entertainment, /datum/file/camnet_key/singularity) - - -/datum/file/program/communications - var/const/STATE_DEFAULT = 1 - var/const/STATE_CALLSHUTTLE = 2 - var/const/STATE_CANCELSHUTTLE = 3 - var/const/STATE_MESSAGELIST = 4 - var/const/STATE_VIEWMESSAGE = 5 - var/const/STATE_DELMESSAGE = 6 - var/const/STATE_STATUSDISPLAY = 7 - var/const/STATE_ALERT_LEVEL = 8 - var/const/STATE_CONFIRM_LEVEL = 9 - - -/datum/file/program/communications - name = "Centcom communications relay" - desc = "Used to connect to Centcom." - active_state = "comm" - req_access = list(access_heads) - - var/prints_intercept = 1 - var/authenticated = 0 - var/list/messagetitle = list() - var/list/messagetext = list() - var/currmsg = 0 - var/aicurrmsg = 0 - var/state = STATE_DEFAULT - var/aistate = STATE_DEFAULT - var/message_cooldown = 0 - var/centcomm_message_cooldown = 0 - var/tmp_alertlevel = 0 - - var/status_display_freq = "1435" - var/stat_msg1 - var/stat_msg2 - - var/datum/announcement/priority/crew_announcement = new - - New() - ..() - crew_announcement.newscast = 0 - - Reset() - ..() - authenticated = 0 - state = STATE_DEFAULT - aistate = STATE_DEFAULT - - - Topic(var/href, var/list/href_list) - if(!interactable() || !computer.radio || ..(href,href_list) ) - return - if(!is_station_level(computer.z)) - to_chat(usr, "Unable to establish a connection: You're too far away from the station!") - return - - if("main" in href_list) - state = STATE_DEFAULT - if("login" in href_list) - if(!ishuman(usr)) - to_chat(usr, "Access denied.") - return - var/mob/living/carbon/human/H = usr - var/obj/item/I = H.get_active_hand() - if(I) - I = I.GetID() - if(istype(I,/obj/item/weapon/card/id) && check_access(I)) - authenticated = 1 - if(access_captain in I.GetAccess()) - authenticated = 2 - var/obj/item/weapon/card/id = H.get_idcard(TRUE) - if(istype(id)) - crew_announcement.announcer = GetNameAndAssignmentFromId(id) - - if("logout" in href_list) - authenticated = 0 - crew_announcement.announcer = "" - - if("swipeidseclevel" in href_list) - var/mob/M = usr - var/obj/item/I = M.get_active_hand() - I = I.GetID() - - if(istype(I,/obj/item/weapon/card/id)) - if(access_captain in I.GetAccess()) - var/old_level = security_level - if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN - if(tmp_alertlevel > SEC_LEVEL_BLUE) tmp_alertlevel = SEC_LEVEL_BLUE //Cannot engage delta with this - set_security_level(tmp_alertlevel) - if(security_level != old_level) - //Only notify the admins if an actual change happened - log_game("[key_name(usr)] has changed the security level to [get_security_level()].") - message_admins("[key_name_admin(usr)] has changed the security level to [get_security_level()].") - switch(security_level) - if(SEC_LEVEL_GREEN) - feedback_inc("alert_comms_green",1) - if(SEC_LEVEL_BLUE) - feedback_inc("alert_comms_blue",1) - tmp_alertlevel = 0 - else: - to_chat(usr, "You are not authorized to do this.") - tmp_alertlevel = 0 - state = STATE_DEFAULT - else - to_chat(usr, "You need to swipe your ID.") - if("announce" in href_list) - if(authenticated==2) - if(message_cooldown) - to_chat(usr, "Please allow at least one minute to pass between announcements") - return - var/input = input(usr, "Please write a message to announce to the station crew.", "Priority Announcement") - if(!input || !interactable()) - return - crew_announcement.Announce(input) - message_cooldown = 1 - spawn(600)//One minute cooldown - message_cooldown = 0 - - if("callshuttle" in href_list) - state = STATE_DEFAULT - if(authenticated) - state = STATE_CALLSHUTTLE - if("callshuttle2" in href_list) - if(!computer.radio.subspace) - return - if(authenticated) - var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null - if(!input || ..(href, href_list) || !authenticated) - return - call_shuttle_proc(usr, input) - if(shuttle_master.emergency.timer) - post_status("shuttle") - state = STATE_DEFAULT - if("cancelshuttle" in href_list) - state = STATE_DEFAULT - if(authenticated) - cancel_call_proc(usr) - state = STATE_CANCELSHUTTLE - if("messagelist" in href_list) - currmsg = 0 - state = STATE_MESSAGELIST - if("viewmessage" in href_list) - state = STATE_VIEWMESSAGE - if(!currmsg) - if(href_list["message-num"]) - currmsg = text2num(href_list["message-num"]) - else - state = STATE_MESSAGELIST - if("delmessage" in href_list) - state = (currmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST - if("delmessage2" in href_list) - if(authenticated) - if(currmsg) - var/title = messagetitle[currmsg] - var/text = messagetext[currmsg] - messagetitle.Remove(title) - messagetext.Remove(text) - if(currmsg == aicurrmsg) - aicurrmsg = 0 - currmsg = 0 - state = STATE_MESSAGELIST - else - state = STATE_VIEWMESSAGE - if("status" in href_list) - state = STATE_STATUSDISPLAY - - // Status display stuff - if("setstat" in href_list) - switch(href_list["statdisp"]) - if("message") - post_status("message", stat_msg1, stat_msg2) - if("alert") - post_status("alert", href_list["alert"]) - else - post_status(href_list["statdisp"]) - - if("setmsg1" in href_list) - stat_msg1 = reject_bad_text(input("Line 1", "Enter Message Text", stat_msg1) as text|null, 40) - computer.updateDialog() - if("setmsg2" in href_list) - stat_msg2 = reject_bad_text(input("Line 2", "Enter Message Text", stat_msg2) as text|null, 40) - computer.updateDialog() - - // OMG CENTCOMM LETTERHEAD - if("MessageCentcomm" in href_list) - if(!computer.radio.subspace) - return - if(authenticated==2) - if(centcomm_message_cooldown) - to_chat(usr, "Arrays recycling. Please stand by.") - return - var/input = stripped_input(usr, "Please choose a message to transmit to Centcomm via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") - if(!input || !interactable()) - return - Centcomm_announce(input, usr) - to_chat(usr, "Message transmitted.") - log_say("[key_name(usr)] has made a Centcomm announcement: [input]") - centcomm_message_cooldown = 1 - spawn(600)//10 minute cooldown - centcomm_message_cooldown = 0 - - - // OMG SYNDICATE ...LETTERHEAD - if("MessageSyndicate" in href_list) - if((authenticated==2) && (computer.emagged)) - if(centcomm_message_cooldown) - to_chat(usr, "Arrays recycling. Please stand by.") - return - var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING CORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") - if(!input || !interactable()) - return - Syndicate_announce(input, usr) - to_chat(usr, "Message transmitted.") - log_say("[key_name(usr)] has made a Syndicate announcement: [input]") - centcomm_message_cooldown = 1 - spawn(600)//10 minute cooldown - centcomm_message_cooldown = 0 - - if("RestoreBackup" in href_list) - to_chat(usr, "Backup routing data restored!") - computer.emagged = 0 - computer.updateDialog() - - - - // AI interface - if("ai-main" in href_list) - aicurrmsg = 0 - aistate = STATE_DEFAULT - if("ai-callshuttle" in href_list) - aistate = STATE_CALLSHUTTLE - if("ai-callshuttle2" in href_list) - if(!computer.radio.subspace) - return - var/input = stripped_input(usr, "Please enter the reason for calling the shuttle.", "Shuttle Call Reason.","") as text|null - if(!input || ..(href, href_list)) - return - call_shuttle_proc(usr, input) - aistate = STATE_DEFAULT - if("ai-messagelist" in href_list) - aicurrmsg = 0 - aistate = STATE_MESSAGELIST - if("ai-viewmessage" in href_list) - aistate = STATE_VIEWMESSAGE - if(!aicurrmsg) - if(href_list["message-num"]) - aicurrmsg = text2num(href_list["message-num"]) - else - aistate = STATE_MESSAGELIST - if("ai-delmessage" in href_list) - aistate = (aicurrmsg) ? STATE_DELMESSAGE : STATE_MESSAGELIST - if("ai-delmessage2" in href_list) - if(aicurrmsg) - var/title = messagetitle[aicurrmsg] - var/text = messagetext[aicurrmsg] - messagetitle.Remove(title) - messagetext.Remove(text) - if(currmsg == aicurrmsg) - currmsg = 0 - aicurrmsg = 0 - aistate = STATE_MESSAGELIST - if("ai-status" in href_list) - aistate = STATE_STATUSDISPLAY - - if("securitylevel" in href_list) - tmp_alertlevel = text2num( href_list["newalertlevel"] ) - if(!tmp_alertlevel) tmp_alertlevel = 0 - state = STATE_CONFIRM_LEVEL - - if("changeseclevel" in href_list) - state = STATE_ALERT_LEVEL - - computer.updateUsrDialog() - - - - proc/main_menu() - var/dat = "" - if(computer.radio.subspace) - if(shuttle_master.emergency.mode == SHUTTLE_CALL) - var/timeleft = shuttle_master.emergency.timeLeft() - dat += "Emergency shuttle\n
\nETA: [timeleft / 60 % 60]:[add_zero(num2text(timeleft % 60), 2)]" - refresh = 1 - else - refresh = 0 - if(authenticated) - dat += "
\[ Log Out \]" - if(authenticated==2) - dat += "
\[ Make An Announcement \]" - if(computer.emagged == 0) - dat += "
\[ Send an emergency message to Centcomm \]" - else - dat += "
\[ Send an emergency message to \[UNKNOWN\] \]" - dat += "
\[ Restore Backup Routing Data \]" - - dat += "
\[ Change alert level \]" - /*if(emergency_shuttle.location()) - if(emergency_shuttle.online()) - dat += "
\[ Cancel Shuttle Call \]" - else - dat += "
\[ Call Emergency Shuttle \]"*/ - - dat += "
\[ Set Status Display \]" - else - dat += "
\[ Log In \]" - dat += "
\[ Message List \]" - return dat - - proc/confirm_menu(var/prompt,var/yes_option) - return "Are you sure you want to [prompt]? \[ [topic_link(src,yes_option,"OK")] | [topic_link(src,"main","Cancel")] \]" - - interact() - if(!interactable()) - return - if(!computer.radio) - computer.Crash(MISSING_PERIPHERAL) - return - - var/dat = "" - switch(state) - if(STATE_DEFAULT) - dat = main_menu() - if(STATE_CALLSHUTTLE) - dat = confirm_menu("call the shuttle","callshuttle2") - if(STATE_CANCELSHUTTLE) - dat = confirm_menu("cancel the shuttle","cancelshuttle2") - if(STATE_MESSAGELIST) - dat += "\[ Back \]
" - dat += "Messages:" - for(var/i = 1; i<=messagetitle.len; i++) - dat += "
[messagetitle[i]]" - if(STATE_VIEWMESSAGE) - if(currmsg) - dat += "[messagetitle[currmsg]]

[messagetext[currmsg]]" - if(authenticated) - dat += "

\[ Delete \]" - else - state = STATE_MESSAGELIST - interact() - return - if(STATE_DELMESSAGE) - if(currmsg) - dat += "Are you sure you want to delete this message? \[ OK | Cancel \]" - else - state = STATE_MESSAGELIST - interact() - return - if(STATE_STATUSDISPLAY) - dat += "\[ Back \]
" - dat += "Set Status Displays
" - dat += "\[ Clear \]
" - dat += "\[ Shuttle ETA \]
" - dat += "\[ Message \]" - dat += "
" - dat += "\[ Alert: None |" - dat += " Red Alert |" - dat += " Lockdown |" - dat += " Biohazard \]

" - if(STATE_ALERT_LEVEL) - dat += "Current alert level: [get_security_level()]
" - if(security_level == SEC_LEVEL_DELTA) - dat += "The self-destruct mechanism is active. Find a way to deactivate the mechanism to lower the alert level or evacuate." - else - dat += "Blue
" - dat += "Green" - if(STATE_CONFIRM_LEVEL) - dat += "Current alert level: [get_security_level()]
" - dat += "Confirm the change to: [num2seclevel(tmp_alertlevel)]
" - dat += "Swipe ID to confirm change.
" - - popup.set_content(dat) - popup.open() - - - proc/post_status(var/command, var/data1, var/data2) - 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 - - switch(command) - if("message") - status_signal.data["msg1"] = data1 - status_signal.data["msg2"] = data2 - if("alert") - status_signal.data["picture_state"] = data1 - - frequency.post_signal(src, status_signal) diff --git a/code/modules/computer3/computers/crew.dm b/code/modules/computer3/computers/crew.dm deleted file mode 100644 index 29c411ad164..00000000000 --- a/code/modules/computer3/computers/crew.dm +++ /dev/null @@ -1,78 +0,0 @@ -/obj/machinery/computer3/crew - default_prog = /datum/file/program/crew - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio) - icon_state = "frame-med" - -/datum/file/program/crew - name = "crew monitoring console" - desc = "Used to monitor active health sensors built into most of the crew's uniforms." - active_state = "crew" - var/list/tracked = list( ) - - interact(mob/user) - if(!interactable()) - return - - scan() - var/t = "Crew Monitoring
" - t += "
Refresh " - t += "Close
" - t += "" - var/list/logs = list() - for(var/obj/item/clothing/under/C in src.tracked) - var/log = "" - var/turf/pos = get_turf(C) - if((C) && (C.has_sensor) && (pos) && (pos.z == computer.z) && C.sensor_mode) - if(istype(C.loc, /mob/living/carbon/human)) - - var/mob/living/carbon/human/H = C.loc - - var/dam1 = round(H.getOxyLoss(),1) - var/dam2 = round(H.getToxLoss(),1) - var/dam3 = round(H.getFireLoss(),1) - var/dam4 = round(H.getBruteLoss(),1) - - var/life_status = "[H.stat > 1 ? "Deceased" : "Living"]" - var/damage_report = "([dam1]/[dam2]/[dam3]/[dam4])" - - if(H.wear_id) - log += "" - else - log += "" - - switch(C.sensor_mode) - if(1) - log += "" - if(2) - log += "" - if(3) - var/area/player_area = get_area(H) - log += "" - logs += log - logs = sortList(logs) - for(var/log in logs) - t += log - t += "
NameVitalsPosition
[H.wear_id.name]
Unknown[life_status]Not Available
[life_status] [damage_report]Not Available
[life_status] [damage_report][player_area.name] ([pos.x], [pos.y])
" - t += "
" - - popup.set_content(t) - popup.open() - - - proc/scan() - for(var/obj/item/clothing/under/C in world) - if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human))) - tracked |= C - return 1 - - Topic(href, list/href_list) - if(!interactable() || !computer.cardslot || ..(href,href_list)) - return - if( href_list["close"] ) - usr << browse(null, "window=crewcomp") - usr.unset_machine() - return - if(href_list["update"]) - interact() - //src.updateUsrDialog() - return \ No newline at end of file diff --git a/code/modules/computer3/computers/customs.dm b/code/modules/computer3/computers/customs.dm deleted file mode 100644 index bca73055b8f..00000000000 --- a/code/modules/computer3/computers/customs.dm +++ /dev/null @@ -1,3 +0,0 @@ -/obj/machinery/computer3/customs - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras) - spawn_files = list(/datum/file/program/arcade,/datum/file/program/security,/datum/file/camnet_key/entertainment,/datum/file/program/crew) \ No newline at end of file diff --git a/code/modules/computer3/computers/law.dm b/code/modules/computer3/computers/law.dm deleted file mode 100644 index fb040230a06..00000000000 --- a/code/modules/computer3/computers/law.dm +++ /dev/null @@ -1,87 +0,0 @@ - - -/obj/machinery/computer3/aiupload - name = "\improper AI upload console" - desc = "Used to upload laws to the AI." - icon_state = "frame-rnd" - var/mob/living/silicon/ai/current = null - var/opened = 0 - - - verb/AccessInternals() - set category = "Object" - set name = "Access Computer's Internals" - set src in oview(1) - if(!Adjacent(usr) || usr.restrained() || usr.lying || usr.stat || istype(usr, /mob/living/silicon) || !istype(usr, /mob/living)) - return - - opened = !opened - if(opened) - to_chat(usr, "The access panel is now open.") - else - to_chat(usr, "The access panel is now closed.") - return - - - attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob, params) - if(istype(module, /obj/item/weapon/aiModule)) - var/turf/T = get_turf(current) - if(!atoms_share_level(T, src)) - to_chat(user, "Unable to establish a connection: You're too far away from the target silicon!") - return - module.install(src) - else - return ..() - - - attack_hand(var/mob/user as mob) - if(src.stat & NOPOWER) - to_chat(usr, "The upload computer has no power!") - return - if(src.stat & BROKEN) - to_chat(usr, "The upload computer is broken!") - return - - src.current = select_active_ai(user) - - if(!src.current) - to_chat(usr, "No active AIs detected.") - else - to_chat(usr, "[src.current.name] selected for law changes.") - return - - - -/obj/machinery/computer3/borgupload - name = "cyborg upload console" - desc = "Used to upload laws to Cyborgs." - icon_state = "frame-rnd" - var/mob/living/silicon/robot/current = null - - - attackby(obj/item/weapon/aiModule/module as obj, mob/user as mob, params) - if(istype(module, /obj/item/weapon/aiModule)) - var/turf/T = get_turf(current) - if(!atoms_share_level(T, src)) - to_chat(user, "Unable to establish a connection: You're too far away from the target silicon!") - return - module.install(src) - else - return ..() - - - attack_hand(var/mob/user as mob) - if(src.stat & NOPOWER) - to_chat(usr, "The upload computer has no power!") - return - if(src.stat & BROKEN) - to_chat(usr, "The upload computer is broken!") - return - - src.current = freeborg() - - if(!src.current) - to_chat(usr, "No free cyborgs detected.") - else - to_chat(usr, "[src.current.name] selected for law changes.") - return diff --git a/code/modules/computer3/computers/medical.dm b/code/modules/computer3/computers/medical.dm deleted file mode 100644 index c54b4867d7e..00000000000 --- a/code/modules/computer3/computers/medical.dm +++ /dev/null @@ -1,518 +0,0 @@ -/* - I hate to make this a todo, but I cannot possibly complete all of computer3 - if I have to rearchitecture datacores and everything else that uses them right now. - - In the future the datacore should probably be a server, perhaps on station, perhaps on centcom, - with data records as files probably. It's not difficult unless you're trying to do a million - impossible things before breakfast. -*/ - -/obj/machinery/computer3/med_data - default_prog = /datum/file/program/med_data - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio) - - -/obj/machinery/computer3/laptop/medical - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio) - spawn_files = list(/datum/file/program/arcade,/datum/file/program/crew,/datum/file/program/med_data) - -/datum/file/program/med_data - name = "Medical Records" - desc = "This can be used to check medical records." - active_state = "medcomp" - req_one_access = list(access_medical, access_forensics_lockers) - - var/obj/item/weapon/card/id/scan = null - var/obj/item/weapon/card/id/scan2 = null - var/authenticated = null - var/rank = null - var/screen = null - var/datum/data/record/active1 = null - var/datum/data/record/active2 = null - var/a_id = null - var/temp = null - var/printing = null - - - proc/authenticate() - if(access_medical in scan.access) - return 1 - if(istype(usr,/mob/living/silicon/ai)) - return 1 - return 0 - - interact() - if(!computer.cardslot) - computer.Crash(MISSING_PERIPHERAL) - return - scan = computer.cardslot.reader - if(!interactable()) - return - if(is_away_level(computer.z)) - to_chat(usr, "Unable to establish a connection: You're too far away from the station!") - return - var/dat - - if(temp) - dat = text("[src.temp]

Clear Screen") - else - dat = text("Confirm Identity (R): []
", (scan ? text("[]", scan.name) : "----------")) - if(computer.cardslot.dualslot) - dat += text("Check Identity (W): []
", (scan2 ? text("[]", scan2.name) : "----------")) - if(scan2 && !scan) - dat += text("
Insert card into reader slot to log in.

") - - if(src.authenticated) - switch(src.screen) - if(1.0) - dat += {" -Search Records -
List Records -
-
Virus Database -
Medbot Tracking -
-
Record Maintenance -
{Log Out}
-"} - if(2.0) - dat += "Record List:
" - if(!isnull(data_core.general)) - for(var/datum/data/record/R in sortRecord(data_core.general)) - dat += text("[]: []
", R, R.fields["id"], R.fields["name"]) - //Foreach goto(132) - dat += "
Back" - if(3.0) - dat += "Records Maintenance
\nBackup To Disk
\nUpload From disk
\nDelete All Records
\n
\nBack" - if(4.0) - dat += "
Medical Record

" - if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) - dat += "
Name: [active1.fields["name"]] \ - ID: [active1.fields["id"]]
\n \ - Sex: [active1.fields["sex"]]
\n \ - Age: [active1.fields["age"]]
\n \ - Fingerprint: [active1.fields["fingerprint"]]
\n \ - Physical Status: [active1.fields["p_stat"]]
\n \ - Mental Status: [active1.fields["m_stat"]]
\ - Photo:
\ -
" - else - dat += "General Record Lost!
" - if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) - dat += text("
\n
Medical Data

\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", src.active2.fields["b_type"], src.active2.fields["b_dna"], src.active2.fields["mi_dis"], src.active2.fields["mi_dis_d"], src.active2.fields["ma_dis"], src.active2.fields["ma_dis_d"], src.active2.fields["alg"], src.active2.fields["alg_d"], src.active2.fields["cdi"], src.active2.fields["cdi_d"], decode(src.active2.fields["notes"])) - var/counter = 1 - while(src.active2.fields[text("com_[]", counter)]) - dat += text("[]
Delete Entry

", src.active2.fields[text("com_[]", counter)], counter) - counter++ - dat += "Add Entry

" - dat += "Delete Record (Medical Only)

" - else - dat += "Medical Record Lost!
" - dat += text("New Record

") - dat += "\nPrint Record
\nBack
" - if(5.0) - dat += "
Virus Database
" - for(var/Dt in typesof(/datum/disease/)) - var/datum/disease/Dis = new Dt(0) - if(istype(Dis, /datum/disease/advance)) - continue // TODO (tm): Add advance diseases to the virus database which no one uses. - if(!Dis.desc) - continue - dat += "
[Dis.name]" - dat += "
Back" - if(6.0) - dat += "
Medical Robot Monitor
" - dat += "Back" - dat += "
Medical Robots:" - var/bdat = null - for(var/mob/living/simple_animal/bot/medbot/M in world) - - if(M.z != computer.z) continue //only find medibots on the same z-level as the computer - var/turf/bl = get_turf(M) - if(bl) //if it can't find a turf for the medibot, then it probably shouldn't be showing up - bdat += "[M.name] - \[[bl.x],[bl.y]\] - [M.on ? "Online" : "Offline"]
" - if((!isnull(M.reagent_glass)) && M.use_beaker) - bdat += "Reservoir: \[[M.reagent_glass.reagents.total_volume]/[M.reagent_glass.reagents.maximum_volume]\]
" - else - bdat += "Using Internal Synthesizer.
" - if(!bdat) - dat += "
None detected
" - else - dat += "
[bdat]" - - else - else - dat += "{Log In}" - popup.width = 600 - popup.height = 400 - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) - popup.open() - return - - Topic(href, href_list) - if(!interactable() || !computer.cardslot || ..(href,href_list)) - return - if(!( data_core.general.Find(src.active1) )) - src.active1 = null - if(!( data_core.medical.Find(src.active2) )) - src.active2 = null - - if(href_list["temp"]) - src.temp = null - - if(href_list["cardr"]) - if(scan) - if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) - computer.cardslot.remove(1) - else - scan.loc = get_turf(src) - scan = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/card/id)) - computer.cardslot.insert(I, 1) - scan = I - - if(href_list["cardw"]) - if(scan2) - if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) - computer.cardslot.remove(2) - else - scan2.loc = get_turf(src) - scan2 = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/card/id)) - computer.cardslot.insert(I, 2) - scan2 = I - - else if(href_list["logout"]) - src.authenticated = null - src.screen = null - src.active1 = null - src.active2 = null - - else if(href_list["login"]) - - if(istype(usr, /mob/living/silicon/ai)) - src.active1 = null - src.active2 = null - src.authenticated = usr.name - src.rank = "AI" - src.screen = 1 - - else if(istype(usr, /mob/living/silicon/robot)) - src.active1 = null - src.active2 = null - src.authenticated = usr.name - var/mob/living/silicon/robot/R = usr - src.rank = "[R.modtype] [R.braintype]" - src.screen = 1 - - else if(istype(src.scan, /obj/item/weapon/card/id)) - src.active1 = null - src.active2 = null - - if(src.check_access(src.scan)) - src.authenticated = src.scan.registered_name - src.rank = src.scan.assignment - src.screen = 1 - - if(src.authenticated) - - if(href_list["screen"]) - src.screen = text2num(href_list["screen"]) - if(src.screen < 1) - src.screen = 1 - - src.active1 = null - src.active2 = null - - if(href_list["vir"]) - var/datum/data/record/v = locate(href_list["vir"]) - src.temp = "
GNAv2 based virus lifeform V-[v.fields["id"]]
" - src.temp += "
Name: [v.fields["name"]]" - src.temp += "
Antigen: [v.fields["antigen"]]" - src.temp += "
Spread: [v.fields["spread type"]] " - src.temp += "
Details:
[v.fields["description"]]" - - if(href_list["del_all"]) - src.temp = "Are you sure you wish to delete all records?
\n\tYes
\n\tNo
" - - if(href_list["del_all2"]) - for(var/datum/data/record/R in data_core.medical) - //R = null - qdel(R) - //Foreach goto(494) - src.temp = "All records deleted." - - if(href_list["field"]) - var/a1 = src.active1 - var/a2 = src.active2 - switch(href_list["field"]) - if("fingerprint") - if(istype(src.active1, /datum/data/record)) - var/t1 = trim(sanitize(copytext(input("Please input fingerprint hash:", "Med. records", src.active1.fields["fingerprint"], null) as text,1,MAX_MESSAGE_LEN))) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) - return - src.active1.fields["fingerprint"] = t1 - if("sex") - if(istype(src.active1, /datum/data/record)) - if(src.active1.fields["sex"] == "Male") - src.active1.fields["sex"] = "Female" - else - src.active1.fields["sex"] = "Male" - if("age") - if(istype(src.active1, /datum/data/record)) - var/t1 = input("Please input age:", "Med. records", src.active1.fields["age"], null) as num - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) - return - src.active1.fields["age"] = t1 - if("mi_dis") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input minor disabilities list:", "Med. records", src.active2.fields["mi_dis"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["mi_dis"] = t1 - if("mi_dis_d") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize minor dis.:", "Med. records", src.active2.fields["mi_dis_d"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["mi_dis_d"] = t1 - if("ma_dis") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input major diabilities list:", "Med. records", src.active2.fields["ma_dis"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["ma_dis"] = t1 - if("ma_dis_d") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize major dis.:", "Med. records", src.active2.fields["ma_dis_d"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["ma_dis_d"] = t1 - if("alg") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please state allergies:", "Med. records", src.active2.fields["alg"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["alg"] = t1 - if("alg_d") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize allergies:", "Med. records", src.active2.fields["alg_d"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["alg_d"] = t1 - if("cdi") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please state diseases:", "Med. records", src.active2.fields["cdi"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["cdi"] = t1 - if("cdi_d") - if(istype(src.active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize diseases:", "Med. records", src.active2.fields["cdi_d"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["cdi_d"] = t1 - if("notes") - if(istype(src.active2, /datum/data/record)) - var/t1 = html_encode(trim(copytext(input("Please summarize notes:", "Med. records", html_decode(src.active2.fields["notes"]), null) as message,1,MAX_MESSAGE_LEN))) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - src.active2.fields["notes"] = t1 - if("p_stat") - if(istype(src.active1, /datum/data/record)) - src.temp = "Physical Condition:
\n\t*Deceased*
\n\t*SSD*
\n\tActive
\n\tPhysically Unfit
\n\tDisabled
" - if("m_stat") - if(istype(src.active1, /datum/data/record)) - src.temp = "Mental Condition:
\n\t*Insane*
\n\t*Unstable*
\n\t*Watch*
\n\tStable
" - if("b_type") - if(istype(src.active2, /datum/data/record)) - src.temp = "Blood Type:
\n\tA- A+
\n\tB- B+
\n\tAB- AB+
\n\tO- O+
" - if("b_dna") - if(istype(src.active1, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input DNA hash:", "Med. records", src.active1.fields["dna"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) - return - src.active1.fields["dna"] = t1 - if("vir_name") - var/datum/data/record/v = locate(href_list["edit_vir"]) - if(v) - var/t1 = sanitize(copytext(input("Please input pathogen name:", "VirusDB", v.fields["name"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) - return - v.fields["name"] = t1 - if("vir_desc") - var/datum/data/record/v = locate(href_list["edit_vir"]) - if(v) - var/t1 = sanitize(copytext(input("Please input information about pathogen:", "VirusDB", v.fields["description"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active1 != a1)) - return - v.fields["description"] = t1 - else - - if(href_list["p_stat"]) - if(src.active1) - switch(href_list["p_stat"]) - if("deceased") - src.active1.fields["p_stat"] = "*Deceased*" - if("ssd") - src.active1.fields["p_stat"] = "*SSD*" - if("active") - src.active1.fields["p_stat"] = "Active" - if("unfit") - src.active1.fields["p_stat"] = "Physically Unfit" - if("disabled") - src.active1.fields["p_stat"] = "Disabled" - - if(href_list["m_stat"]) - if(src.active1) - switch(href_list["m_stat"]) - if("insane") - src.active1.fields["m_stat"] = "*Insane*" - if("unstable") - src.active1.fields["m_stat"] = "*Unstable*" - if("watch") - src.active1.fields["m_stat"] = "*Watch*" - if("stable") - src.active1.fields["m_stat"] = "Stable" - - - if(href_list["b_type"]) - if(src.active2) - switch(href_list["b_type"]) - if("an") - src.active2.fields["b_type"] = "A-" - if("bn") - src.active2.fields["b_type"] = "B-" - if("abn") - src.active2.fields["b_type"] = "AB-" - if("on") - src.active2.fields["b_type"] = "O-" - if("ap") - src.active2.fields["b_type"] = "A+" - if("bp") - src.active2.fields["b_type"] = "B+" - if("abp") - src.active2.fields["b_type"] = "AB+" - if("op") - src.active2.fields["b_type"] = "O+" - - - if(href_list["del_r"]) - if(src.active2) - src.temp = "Are you sure you wish to delete the record (Medical Portion Only)?
\n\tYes
\n\tNo
" - - if(href_list["del_r2"]) - if(src.active2) - //src.active2 = null - qdel(src.active2) - - if(href_list["d_rec"]) - var/datum/data/record/R = locate(href_list["d_rec"]) - var/datum/data/record/M = locate(href_list["d_rec"]) - if(!( data_core.general.Find(R) )) - src.temp = "Record Not Found!" - return - for(var/datum/data/record/E in data_core.medical) - if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) - M = E - else - //Foreach continue //goto(2540) - src.active1 = R - src.active2 = M - src.screen = 4 - - if(href_list["new"]) - if((istype(src.active1, /datum/data/record) && !( istype(src.active2, /datum/data/record) ))) - var/datum/data/record/R = new /datum/data/record( ) - R.fields["name"] = src.active1.fields["name"] - R.fields["id"] = src.active1.fields["id"] - R.name = text("Medical Record #[]", R.fields["id"]) - R.fields["b_type"] = "Unknown" - R.fields["b_dna"] = "Unknown" - R.fields["mi_dis"] = "None" - R.fields["mi_dis_d"] = "No minor disabilities have been declared." - R.fields["ma_dis"] = "None" - R.fields["ma_dis_d"] = "No major disabilities have been diagnosed." - R.fields["alg"] = "None" - R.fields["alg_d"] = "No allergies have been detected in this patient." - R.fields["cdi"] = "None" - R.fields["cdi_d"] = "No diseases have been diagnosed at the moment." - R.fields["notes"] = "No notes." - data_core.medical += R - src.active2 = R - src.screen = 4 - - if(href_list["add_c"]) - if(!( istype(src.active2, /datum/data/record) )) - return - var/a2 = src.active2 - var/t1 = sanitize(copytext(input("Add Comment:", "Med. records", null, null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( src.authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || src.active2 != a2)) - return - var/counter = 1 - while(src.active2.fields[text("com_[]", counter)]) - counter++ - src.active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]") - - if(href_list["del_c"]) - if((istype(src.active2, /datum/data/record) && src.active2.fields[text("com_[]", href_list["del_c"])])) - src.active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" - - if(href_list["search"]) - var/t1 = input("Search String: (Name, DNA, or ID)", "Med. records", null, null) as text - if((!( t1 ) || usr.stat || !( src.authenticated ) || usr.restrained() || ((!interactable()) && (!istype(usr, /mob/living/silicon))))) - return - src.active1 = null - src.active2 = null - t1 = lowertext(t1) - for(var/datum/data/record/R in data_core.medical) - if((lowertext(R.fields["name"]) == t1 || t1 == lowertext(R.fields["id"]) || t1 == lowertext(R.fields["b_dna"]))) - src.active2 = R - else - //Foreach continue //goto(3229) - if(!( src.active2 )) - src.temp = text("Could not locate record [].", t1) - else - for(var/datum/data/record/E in data_core.general) - if((E.fields["name"] == src.active2.fields["name"] || E.fields["id"] == src.active2.fields["id"])) - src.active1 = E - else - //Foreach continue //goto(3334) - src.screen = 4 - - if(href_list["print_p"]) - if(!( src.printing )) - src.printing = 1 - var/datum/data/record/record1 = null - var/datum/data/record/record2 = null - if((istype(src.active1, /datum/data/record) && data_core.general.Find(src.active1))) - record1 = active1 - if((istype(src.active2, /datum/data/record) && data_core.medical.Find(src.active2))) - record2 = active2 - sleep(50) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) - P.info = "
Medical Record

" - if(record1) - P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", record1.fields["name"], record1.fields["id"], record1.fields["sex"], record1.fields["age"], record1.fields["fingerprint"], record1.fields["p_stat"], record1.fields["m_stat"]) - P.name = text("Medical Record ([])", record1.fields["name"]) - else - P.info += "General Record Lost!
" - P.name = "Medical Record" - if(record2) - P.info += text("
\n
Medical Data

\nBlood Type: []
\nDNA: []
\n
\nMinor Disabilities: []
\nDetails: []
\n
\nMajor Disabilities: []
\nDetails: []
\n
\nAllergies: []
\nDetails: []
\n
\nCurrent Diseases: [] (per disease info placed in log/comment section)
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", record2.fields["b_type"], record2.fields["b_dna"], record2.fields["mi_dis"], record2.fields["mi_dis_d"], record2.fields["ma_dis"], record2.fields["ma_dis_d"], record2.fields["alg"], record2.fields["alg_d"], record2.fields["cdi"], record2.fields["cdi_d"], decode(record2.fields["notes"])) - var/counter = 1 - while(record2.fields[text("com_[]", counter)]) - P.info += text("[]
", record2.fields[text("com_[]", counter)]) - counter++ - else - P.info += "Medical Record Lost!
" - P.info += "" - src.printing = null - - interact() - return diff --git a/code/modules/computer3/computers/message.dm b/code/modules/computer3/computers/message.dm deleted file mode 100644 index 35e981a4a7a..00000000000 --- a/code/modules/computer3/computers/message.dm +++ /dev/null @@ -1,452 +0,0 @@ -/obj/machinery/computer3/message_monitor - default_prog = /datum/file/program/message_mon - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/prox) - - -//BROKEN AS HELL, DON'T USE UNTIL FIXED - -/datum/file/program/message_mon - name = "Message Monitor Console" - desc = "Used to Monitor the crew's messages, that are sent via PDA. Can also be used to view Request Console messages." - active_state = "comm_logs" - var/hack_icon = "comm_logsc" - var/normal_icon = "comm_logs" - - //Server linked to. - var/obj/machinery/message_server/linkedServer = null - //Sparks effect - For emag - //var/datum/effect/system/spark_spread/spark_system = new /datum/effect/system/spark_spread - - //Messages - Saves me time if I want to change something. - var/noserver = "ALERT: No server detected." - var/incorrectkey = "ALERT: Incorrect decryption key!" - var/defaultmsg = "Welcome. Please select an option." - var/rebootmsg = "%$&(£: Critical %$$@ Error // !RestArting! - ?pLeaSe wAit!" - - //Computer properties - var/screen = 0 // 0 = Main menu, 1 = Message Logs, 2 = Hacked screen, 3 = Custom Message - var/hacking = 0 // Is it being hacked into by the AI/Cyborg - var/emag = 0 // When it is emagged. - var/message = "System bootup complete. Please select an option." // The message that shows on the main menu. - var/auth = 0 // Are they authenticated? - var/optioncount = 7 - - // Custom Message Properties - var/customsender = "System Administrator" - var/obj/item/device/pda/customrecepient = null - var/customjob = "Admin" - var/custommessage = "This is a test, please ignore." - - - procinitialize() - if(!linkedServer) - if(message_servers && message_servers.len > 0) - linkedServer = message_servers[1] - return - - - update_icon() - if(emag || hacking) - overlay.icon_state = hack_icon - else - overlay.icon_state = normal_icon - computer.update_icon() - - interact() - if(!interactable()) - return - //If the computer is being hacked or is emagged, display the reboot message. - if(hacking || emag) - message = rebootmsg - var/dat = "Message Monitor Console" - dat += "

Message Monitor Console


" - dat += "

" - - if(auth) - dat += "

\[Authenticated\] /" - dat += " Server Power: [src.linkedServer && src.linkedServer.active ? "\[On\]":"\[Off\]"]

" - else - dat += "

\[Unauthenticated\] /" - dat += " Server Power: [src.linkedServer && src.linkedServer.active ? "\[On\]":"\[Off\]"]

" - - if(hacking || emag) - screen = 2 - else if(!auth || !linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) - if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) message = noserver - screen = 0 - - switch(screen) - //Main menu - if(0) - // = TAB - var/i = 0 - dat += "
[++i]. Link To A Server
" - if(auth) - if(!linkedServer || (linkedServer.stat & (NOPOWER|BROKEN))) - dat += "
ERROR: Server not found!
" - else - dat += "
[++i]. View Message Logs
" - dat += "
[++i]. View Request Console Logs
" - dat += "
[++i]. Clear Message Logs
" - dat += "
[++i]. Clear Request Console Logs
" - dat += "
[++i]. Set Custom Key
" - dat += "
[++i]. Send Admin Message
" - else - for(var/n = ++i; n <= optioncount; n++) - dat += "
[n]. ---------------
" - if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr)) - //Malf/Traitor AIs can bruteforce into the system to gain the Key. - dat += "
*&@#. Bruteforce Key
" - else - dat += "
" - - //Bottom message - if(!auth) - dat += "

Please authenticate with the server in order to show additional options." - else - dat += "

Reg, #514 forbids sending messages containing Erotic Rendering Properties." - - //Message Logs - if(1) - var/index = 0 - //var/recipient = "Unspecified" //name of the person - //var/sender = "Unspecified" //name of the sender - //var/message = "Blank" //transferred message - dat += "
Back - Refresh

" - dat += "" - for(var/datum/data_pda_msg/pda in src.linkedServer.pda_msgs) - index++ - if(index > 3000) - break - // Del - Sender - Recepient - Message - // X - Al Green - Your Mom - WHAT UP!? - dat += "" - dat += "
XSenderRecipientMessage
X
[pda.sender][pda.recipient][pda.message]
" - //Hacking screen. - if(2) - if(istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) - dat += "Brute-forcing for server key.
It will take 20 seconds for every character that the password has." - dat += "In the meantime, this console can reveal your true intentions if you let someone access it. Make sure no humans enter the room during that time." - else - //It's the same message as the one above but in binary. Because robots understand binary and humans don't... well I thought it was clever. - dat += {"01000010011100100111010101110100011001010010110
- 10110011001101111011100100110001101101001011011100110011
- 10010000001100110011011110111001000100000011100110110010
- 10111001001110110011001010111001000100000011010110110010
- 10111100100101110001000000100100101110100001000000111011
- 10110100101101100011011000010000001110100011000010110101
- 10110010100100000001100100011000000100000011100110110010
- 10110001101101111011011100110010001110011001000000110011
- 00110111101110010001000000110010101110110011001010111001
- 00111100100100000011000110110100001100001011100100110000
- 10110001101110100011001010111001000100000011101000110100
- 00110000101110100001000000111010001101000011001010010000
- 00111000001100001011100110111001101110111011011110111001
- 00110010000100000011010000110000101110011001011100010000
- 00100100101101110001000000111010001101000011001010010000
- 00110110101100101011000010110111001110100011010010110110
- 10110010100101100001000000111010001101000011010010111001
- 10010000001100011011011110110111001110011011011110110110
- 00110010100100000011000110110000101101110001000000111001
- 00110010101110110011001010110000101101100001000000111100
- 10110111101110101011100100010000001110100011100100111010
- 10110010100100000011010010110111001110100011001010110111
- 00111010001101001011011110110111001110011001000000110100
- 10110011000100000011110010110111101110101001000000110110
- 00110010101110100001000000111001101101111011011010110010
- 10110111101101110011001010010000001100001011000110110001
- 10110010101110011011100110010000001101001011101000010111
- 00010000001001101011000010110101101100101001000000111001
- 10111010101110010011001010010000001101110011011110010000
- 00110100001110101011011010110000101101110011100110010000
- 00110010101101110011101000110010101110010001000000111010
- 00110100001100101001000000111001001101111011011110110110
- 10010000001100100011101010111001001101001011011100110011
- 10010000001110100011010000110000101110100001000000111010
- 001101001011011010110010100101110"} - - //Fake messages - if(3) - dat += "
Back - Reset

" - - dat += {" - - - - "} - //Sender - Sender's Job - Recepient - Message - //Al Green- Your Dad - Your Mom - WHAT UP!? - - dat += {" - - - "} - dat += "
SenderSender's JobRecipientMessage
[customsender][customjob][customrecepient ? customrecepient.owner : "NONE"][custommessage]

Send" - - //Request Console Logs - if(4) - - var/index = 0 - /* data_rc_msg - X - 5% - var/rec_dpt = "Unspecified" //name of the person - 15% - var/send_dpt = "Unspecified" //name of the sender- 15% - var/message = "Blank" //transferred message - 300px - var/stamp = "Unstamped" - 15% - var/id_auth = "Unauthenticated" - 15% - var/priority = "Normal" - 10% - */ - dat += "
Back - Refresh

" - dat += {" - "} - for(var/datum/data_rc_msg/rc in src.linkedServer.rc_msgs) - index++ - if(index > 3000) - break - // Del - Sender - Recepient - Message - // X - Al Green - Your Mom - WHAT UP!? - dat += {" - "} - dat += "
XSending Dep.Receiving Dep.MessageStampID Auth.Priority.
X
[rc.send_dpt][rc.rec_dpt][rc.message][rc.stamp][rc.id_auth][rc.priority]
" - - - popup.width = 700 - popup.height = 700 - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) - popup.open() - return - - - proc/BruteForce(mob/usr as mob) - if(isnull(linkedServer)) - to_chat(usr, "Could not complete brute-force: Linked Server Disconnected!") - else - var/currentKey = src.linkedServer.decryptkey - to_chat(usr, "Brute-force completed! The key is '[currentKey]'.") - src.hacking = 0 - src.active_state = normal_icon - src.screen = 0 // Return the screen back to normal - - proc/UnmagConsole() - src.active_state = normal_icon - src.emag = 0 - - proc/ResetMessage() - customsender = "System Administrator" - customrecepient = null - custommessage = "This is a test, please ignore." - customjob = "Admin" - - Topic(var/href, var/list/href_list) - if(!interactable() || ..(href,href_list)) - return - - if("auth" in href_list) - if(auth) - auth = 0 - screen = 0 - else - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) - if(dkey && dkey != "") - if(src.linkedServer.decryptkey == dkey) - auth = 1 - else - message = incorrectkey - - //Turn the server on/off. - if("active" in href_list) - if(auth) linkedServer.active = !linkedServer.active - //Find a server - if("find" in href_list) - if(message_servers && message_servers.len > 1) - src.linkedServer = input(usr,"Please select a server.", "Select a server.", null) as null|anything in message_servers - message = "NOTICE: Server selected." - else if(message_servers && message_servers.len > 0) - linkedServer = message_servers[1] - message = "NOTICE: Only Single Server Detected - Server selected." - else - message = noserver - - //View the logs - KEY REQUIRED - if("view" in href_list) - if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.screen = 1 - - //Clears the logs - KEY REQUIRED - if("clear" in href_list) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.linkedServer.pda_msgs = list() - message = "NOTICE: Logs cleared." - //Clears the request console logs - KEY REQUIRED - if("clearr" in href_list) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.linkedServer.rc_msgs = list() - message = "NOTICE: Logs cleared." - //Change the password - KEY REQUIRED - if("pass" in href_list) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - var/dkey = trim(input(usr, "Please enter the decryption key.") as text|null) - if(dkey && dkey != "") - if(src.linkedServer.decryptkey == dkey) - var/newkey = trim(input(usr,"Please enter the new key (3 - 16 characters max):")) - if(length(newkey) <= 3) - message = "NOTICE: Decryption key too short!" - else if(length(newkey) > 16) - message = "NOTICE: Decryption key too long!" - else if(newkey && newkey != "") - src.linkedServer.decryptkey = newkey - message = "NOTICE: Decryption key set." - else - message = incorrectkey - - //Hack the Console to get the password - if("hack" in href_list) - if((istype(usr, /mob/living/silicon/ai) || istype(usr, /mob/living/silicon/robot)) && (usr.mind.special_role && usr.mind.original == usr)) - src.hacking = 1 - src.screen = 2 - src.active_state = hack_icon - //Time it takes to bruteforce is dependant on the password length. - spawn(100*length(src.linkedServer.decryptkey)) - if(src && src.linkedServer && usr) - BruteForce(usr) - //Delete the log. - if("delete" in href_list) - //Are they on the view logs screen? - if(screen == 1) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else //if(istype(href_list["delete"], /datum/data_pda_msg)) - src.linkedServer.pda_msgs -= locate(href_list["delete"]) - message = "NOTICE: Log Deleted!" - //Delete the request console log. - if("deleter" in href_list) - //Are they on the view logs screen? - if(screen == 4) - if(!linkedServer || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else //if(istype(href_list["delete"], /datum/data_pda_msg)) - src.linkedServer.rc_msgs -= locate(href_list["deleter"]) - message = "NOTICE: Log Deleted!" - //Create a custom message - if("msg" in href_list) - if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.screen = 3 - //Fake messaging selection - KEY REQUIRED - if("select" in href_list) - if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - screen = 0 - else - switch(href_list["select"]) - - //Reset - if("Reset") - ResetMessage() - - //Select Your Name - if("Sender") - customsender = input(usr, "Please enter the sender's name.") as text|null - - //Select Receiver - if("Recepient") - //Get out list of viable PDAs - var/list/obj/item/device/pda/sendPDAs = list() - for(var/obj/item/device/pda/P in PDAs) - if(!P.owner || P.toff || P.hidden) continue - sendPDAs += P - if(PDAs && PDAs.len > 0) - customrecepient = input(usr, "Select a PDA from the list.") as null|anything in sendPDAs - else - customrecepient = null - - - //Enter custom job - if("RecJob") - customjob = input(usr, "Please enter the sender's job.") as text|null - - //Enter message - if("Message") - custommessage = input(usr, "Please enter your message.") as text|null - custommessage = sanitize(copytext(custommessage), 1, MAX_MESSAGE_LEN) - - //Send message - if("Send") - - if(isnull(customsender) || customsender == "") - customsender = "UNKNOWN" - - if(isnull(customrecepient)) - message = "NOTICE: No recepient selected!" - return src.attack_hand(usr) - - if(isnull(custommessage) || custommessage == "") - message = "NOTICE: No message entered!" - return src.attack_hand(usr) - - var/obj/item/device/pda/PDARec = null - for(var/obj/item/device/pda/P in PDAs) - if(!P.owner || P.toff || P.hidden) continue - if(P.owner == customsender) - PDARec = P - //Sender isn't faking as someone who exists - if(isnull(PDARec)) - src.linkedServer.send_pda_message("[customrecepient.owner]", "[customsender]","[custommessage]") - customrecepient.tnote += "← From
[customsender] ([customjob]):
[custommessage]
" - if(!customrecepient.silent) - playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) - for(var/mob/O in hearers(3, customrecepient.loc)) - O.show_message(text("[bicon(customrecepient)] *[customrecepient.ttone]*")) - if( customrecepient.loc && ishuman(customrecepient.loc) ) - var/mob/living/carbon/human/H = customrecepient.loc - to_chat(H, "[bicon(customrecepient)] Message from [customsender] ([customjob]), \"[custommessage]\" (Reply)" - - log_pda("[usr] (PDA: [customsender]) sent \"[custommessage]\" to [customrecepient.owner]") - customrecepient.overlays.Cut() - customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r") - //Sender is faking as someone who exists - else - src.linkedServer.send_pda_message("[customrecepient.owner]", "[PDARec.owner]","[custommessage]") - customrecepient.tnote += "← From [PDARec.owner] ([customjob]):
[custommessage]
" - if(!customrecepient.silent) - playsound(customrecepient.loc, 'sound/machines/twobeep.ogg', 50, 1) - for(var/mob/O in hearers(3, customrecepient.loc)) - O.show_message(text("[bicon(customrecepient)] *[customrecepient.ttone]*")) - if( customrecepient.loc && ishuman(customrecepient.loc) ) - var/mob/living/carbon/human/H = customrecepient.loc - to_chat(H, "[bicon(customrecepient)] Message from [PDARec.owner] ([customjob]), \"[custommessage]\" (Reply)" - - log_pda("[usr] (PDA: [PDARec.owner]) sent \"[custommessage]\" to [customrecepient.owner]") - customrecepient.overlays.Cut() - customrecepient.overlays += image('icons/obj/pda.dmi', "pda-r") - //Finally.. - ResetMessage() - - //Request Console Logs - KEY REQUIRED - if("viewr" in href_list) - if(src.linkedServer == null || (src.linkedServer.stat & (NOPOWER|BROKEN))) - message = noserver - else - if(auth) - src.screen = 4 - -// to_chat(usr, href_list["select"]) - - if("back" in href_list) - src.screen = 0 - interact() \ No newline at end of file diff --git a/code/modules/computer3/computers/power.dm b/code/modules/computer3/computers/power.dm deleted file mode 100644 index 38477be836d..00000000000 --- a/code/modules/computer3/computers/power.dm +++ /dev/null @@ -1,48 +0,0 @@ -/obj/machinery/computer3/powermonitor - default_prog = /datum/file/program/powermon - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/cable) - icon_state = "frame-eng" - -/datum/file/program/powermon - name = "power monitoring console" - desc = "It monitors APC status." - active_state = "power" - - proc/format(var/obj/machinery/power/apc/A) - var/static/list/S = list(" Off","AOff"," On", " AOn") - var/static/list/chg = list("N","C","F") - return "[copytext(add_tspace("\The [A.area]", 30), 1, 30)] [S[A.equipment+1]] [S[A.lighting+1]] [S[A.environ+1]] \ - [add_lspace(A.lastused_total, 6)] [A.cell ? "[add_lspace(round(A.cell.percent()), 3)]% [chg[A.charging+1]]" : " N/C"]
" - - interact() - if(!interactable()) - return - if(!computer.net) - computer.Crash(MISSING_PERIPHERAL) - return - var/list/L = computer.net.get_machines(/obj/machinery/power/apc) - var/t = "" - t += "Refresh

" - if(!L || !L.len) - t += "No connection" - else - var/datum/powernet/powernet = computer.net.connect_to(/datum/powernet,null) - if(powernet) - t += "
Total power: [powernet.avail] W
Total load: [num2text(powernet.viewload,10)] W
" - else - t += "
Power statistics unavailable
" - t += "" - - if(L.len > 0) - t += "Area Eqp./Lgt./Env. Load Cell
" - for(var/obj/machinery/power/apc/A in L) - t += src.format(A) - t += "
" - - popup.set_content(t) - popup.open() - - Topic(var/href, var/list/href_list) - if(!interactable() || ..(href,href_list)) - return - interact() diff --git a/code/modules/computer3/computers/prisoner.dm b/code/modules/computer3/computers/prisoner.dm deleted file mode 100644 index f6e91fb9346..00000000000 --- a/code/modules/computer3/computers/prisoner.dm +++ /dev/null @@ -1,100 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -/obj/machinery/computer3/prisoner - default_prog = /datum/file/program/prisoner - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio) - icon_state = "frame-sec" - -/datum/file/program/prisoner - name = "Prisoner Management Console" - active_state = "explosive" - req_access = list(access_armory) - - var/id = 0.0 - var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0.0 - var/screen = 0 // 0 - No Access Denied, 1 - Access allowed - - - interact() - if(!interactable()) - return - var/dat - dat += "Prisoner Implant Manager System
" - if(screen == 0) - dat += "
Unlock Console" - else if(screen == 1) - dat += "
Chemical Implants
" - var/turf/Tr = null - for(var/obj/item/weapon/implant/chem/C in world) - Tr = get_turf(C) - if((Tr) && (Tr.z != computer.z)) continue//Out of range - if(!C.implanted) continue - dat += "[C.imp_in.name] | Remaining Units: [C.reagents.total_volume] | Inject: " - dat += "((1))" - dat += "((5))" - dat += "((10))
" - dat += "********************************
" - dat += "
Tracking Implants
" - for(var/obj/item/weapon/implant/tracking/T in world) - Tr = get_turf(T) - if((Tr) && (Tr.z != computer.z)) continue//Out of range - if(!T.implanted) continue - var/loc_display = "Unknown" - var/mob/living/carbon/M = T.imp_in - if(is_station_level(M.z) && !istype(M.loc, /turf/space)) - var/turf/mob_loc = get_turf(M) - loc_display = mob_loc.loc - dat += "ID: [T.id] | Location: [loc_display]
" - dat += "(Send Message) |
" - dat += "********************************
" - dat += "
Lock Console" - - popup.width = 400 - popup.height = 500 - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) - popup.open() - return - - - process() - if(!..()) - interact() - return - - - Topic(href, href_list) - if(!interactable() || ..(href,href_list)) - return - - if(href_list["inject1"]) - var/obj/item/weapon/implant/I = locate(href_list["inject1"]) - if(istype(I)) - I.activate(1) - - else if(href_list["inject5"]) - var/obj/item/weapon/implant/I = locate(href_list["inject5"]) - if(istype(I)) - I.activate(5) - - else if(href_list["inject10"]) - var/obj/item/weapon/implant/I = locate(href_list["inject10"]) - if(istype(I)) - I.activate(10) - - else if(href_list["lock"]) - screen = !screen - - else if(href_list["warn"]) - var/warning = trim(sanitize(copytext(input(usr,"Message:","Enter your message here!",""),1,MAX_MESSAGE_LEN))) - if(!warning) return - var/obj/item/weapon/implant/I = locate(href_list["warn"]) - if( istype(I) && I.imp_in) - var/mob/living/carbon/R = I.imp_in - log_say("PrisonComputer3 message: [key_name(usr)]->[key_name(R)] : [warning]") - to_chat(R, "You hear a voice in your head saying: '[warning]'") - - interact() - return diff --git a/code/modules/computer3/computers/robot.dm b/code/modules/computer3/computers/robot.dm deleted file mode 100644 index 7b7659878ea..00000000000 --- a/code/modules/computer3/computers/robot.dm +++ /dev/null @@ -1,208 +0,0 @@ -/obj/machinery/computer3/robotics - default_prog = /datum/file/program/borg_control - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio) - icon_state = "frame-rnd" - -/datum/file/program/borg_control - name = "Cyborg Control" - desc = "Used to remotely lockdown or detonate linked Cyborgs." - active_state = "robot" - var/id = 0.0 - var/temp = null - var/status = 0 - var/timeleft = 60 - var/stop = 0.0 - var/screen = 0 // 0 - Main Menu, 1 - Cyborg Status, 2 - Kill 'em All! -- In text - req_access = list(access_robotics) - - proc/start_sequence() - do - if(src.stop) - src.stop = 0 - return - src.timeleft-- - sleep(10) - while(src.timeleft) - - for(var/mob/living/silicon/robot/R in mob_list) - if(!R.scrambledcodes) - R.self_destruct() - return - - - interact() - if(!interactable() || is_away_level(computer.z)) - return - var/dat - if(src.temp) - dat = "[src.temp]

Clear Screen" - else - if(screen == 0) - //dat += "

Cyborg Control Console


" - dat += "1. Cyborg Status
" - dat += "2. Emergency Full Destruct
" - if(screen == 1) - for(var/mob/living/silicon/robot/R in mob_list) - if(istype(usr, /mob/living/silicon/ai)) - if(R.connected_ai != usr) - continue - if(istype(usr, /mob/living/silicon/robot)) - if(R != usr) - continue - if(R.scrambledcodes) - continue - - dat += "[R.name] |" - if(R.stat) - dat += " Not Responding |" - else if(!R.canmove) - dat += " Locked Down |" - else - dat += " Operating Normally |" - if(!R.canmove) - else if(R.cell) - dat += " Battery Installed ([R.cell.charge]/[R.cell.maxcharge]) |" - else - dat += " No Cell Installed |" - if(R.module) - dat += " Module Installed ([R.module.name]) |" - else - dat += " No Module Installed |" - if(R.connected_ai) - dat += " Slaved to [R.connected_ai.name] |" - else - dat += " Independent from AI |" - if(istype(usr, /mob/living/silicon)) - if(issilicon(usr) && is_special_character(usr) && !R.emagged) - dat += "(Hack) " - dat += "([R.canmove ? "Lockdown" : "Release"]) " - dat += "(Destroy)" - dat += "
" - dat += "(Return to Main Menu)
" - if(screen == 2) - if(!src.status) - dat += {"
Emergency Robot Self-Destruct
\nStatus: Off
- \n
- \nCountdown: [src.timeleft]/60 \[Reset\]
- \n
- \nStart Sequence
- \n
- \nClose"} - else - dat = {"Emergency Robot Self-Destruct
\nStatus: Activated
- \n
- \nCountdown: [src.timeleft]/60 \[Reset\]
- \n
\nStop Sequence
- \n
- \nClose"} - dat += "(Return to Main Menu)
" - - popup.set_content(dat) - popup.open() - return - - Topic(var/href, var/list/href_list) - if(!interactable() || ..(href,href_list)) - return - - if("killall" in href_list) - src.temp = {"Destroy Robots?
-
\[Swipe ID to initiate destruction sequence\]
- Cancel"} - - if("do_killall" in href_list) - var/obj/item/weapon/card/id/I = usr.get_active_hand() - if(istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/pda = I - I = pda.id - if(istype(I)) - if(src.check_access(I)) - if(!status) - message_admins("[key_name_admin(usr)] has initiated the global cyborg killswitch!") - log_game("[key_name(usr)] has initiated the global cyborg killswitch!") - src.status = 1 - src.start_sequence() - src.temp = null - - else - to_chat(usr, "Access Denied.") - - if("stop" in href_list) - src.temp = {" - Stop Robot Destruction Sequence?
-
Yes
- No"} - - if("stop2" in href_list) - src.stop = 1 - src.temp = null - src.status = 0 - - if("reset" in href_list) - src.timeleft = 60 - - if("temp" in href_list) - src.temp = null - if("screen" in href_list) - switch(href_list["screen"]) - if("0") - screen = 0 - if("1") - screen = 1 - if("2") - screen = 2 - if("killbot" in href_list) - if(computer.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["killbot"]) - if(R) - var/choice = input("Are you certain you wish to detonate [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm") - if(R && istype(R)) - if(R.mind && R.mind.special_role && R.emagged) - to_chat(R, "Extreme danger. Termination codes detected. Scrambling security codes and automatic AI unlink triggered.") - R.ResetSecurityCodes() - - else - message_admins("[key_name_admin(usr)] detonated [R.name]!") - log_game("[key_name_admin(usr)] detonated [R.name]!") - R.self_destruct() - else - to_chat(usr, "Access Denied.") - - if("stopbot" in href_list) - if(computer.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["stopbot"]) - if(R && istype(R)) // Extra sancheck because of input var references - var/choice = input("Are you certain you wish to [R.canmove ? "lock down" : "release"] [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm") - if(R && istype(R)) - message_admins("[key_name_admin(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") - log_game("[key_name(usr)] [R.canmove ? "locked down" : "released"] [R.name]!") - R.canmove = !R.canmove - if(R.lockcharge) - // R.cell.charge = R.lockcharge - R.lockcharge = !R.lockcharge - to_chat(R, "Your lockdown has been lifted!") - else - R.lockcharge = !R.lockcharge - // R.cell.charge = 0 - to_chat(R, "You have been locked down!") - - else - to_chat(usr, "Access Denied.") - - if("magbot" in href_list) - if(computer.allowed(usr)) - var/mob/living/silicon/robot/R = locate(href_list["magbot"]) - if(R) - var/choice = input("Are you certain you wish to hack [R.name]?") in list("Confirm", "Abort") - if(choice == "Confirm") - if(R && istype(R)) -// message_admins("[key_name_admin(usr)] emagged [R.name] using robotic console!") - log_game("[key_name(usr)] emagged [R.name] using robotic console!") - R.emagged = 1 - if(R.mind.special_role) - R.verbs += /mob/living/silicon/robot/proc/ResetSecurityCodes - - interact() - return diff --git a/code/modules/computer3/computers/scanconsole.dm b/code/modules/computer3/computers/scanconsole.dm deleted file mode 100644 index 747ca4b1a61..00000000000 --- a/code/modules/computer3/computers/scanconsole.dm +++ /dev/null @@ -1,1274 +0,0 @@ -/obj/machinery/computer3/scan_consolenew - default_prog = /datum/file/program/dnascanner - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/storage/removable,/obj/item/part/computer/networking/prox) - - -#define MAX_UIBLOCK 13 -#define MAX_SEBLOCK 14 - -/datum/file/program/dnascanner - name = "DNA Scanner and Manipulator" - desc = "The DNA ScaM is sure to change your life forever." - active_state = "dna" - var/obj/machinery/dna_scannernew/scanner = null - - var/ui_block = 1 - var/se_block = 1 - var/subblock = 1 - - var/uitarget = 1 - var/uitargethex = "1" - - var/radduration = 2 - var/radstrength = 1 - - var/injectorready = 0 //Quick fix for issue 286 (screwdriver the screen twice to restore injector) -Pete - - var/mode = 0 - // These keep track of the patient status - var/present = 0 - var/viable = 0 - - var/bufferlabel = "" - var/datum/dna/buffer = null - var/obj/item/part/computer/target_drive = null - - Reset() - ..() - mode = 0 - scanner = null - ui_block = 1 - se_block = 1 - subblock = 1 - buffer = null - bufferlabel = "" - - - Topic(var/href, var/list/href_list) - if(!interactable() || !computer.net || ..(href,href_list)) - return - - scanner = computer.net.connect_to(/obj/machinery/dna_scannernew, scanner) // if exists, will be verified - if(!scanner) - computer.Crash(NETWORK_FAILURE) - return - - // todo check everything goddamnit - present = scanner.occupant && scanner.occupant.dna - viable = present && !(NOCLONE in scanner.occupant.mutations) - - // current screen/function - if("mode" in href_list) - mode = text2num(href_list["mode"]) - // locks scanner door - if("lock" in href_list) - scanner.locked = !scanner.locked - - // inject good-juice - if("rejuv" in href_list) - rejuv() - - // expose to radiation, controlled otherwise - if("pulse" in href_list) - pulse(href_list["pulse"]) // ui, se, or nothing/null - - if("duration" in href_list) - var/modifier = text2num(href_list["duration"]) - radduration += modifier - if("strength" in href_list) - var/modifier = text2num(href_list["strength"]) - radstrength += modifier - - if("uiblock" in href_list) - ui_block = text2num(href_list["uiblock"]) - if("seblock" in href_list) - se_block = text2num(href_list["seblock"]) - if("subblock" in href_list) - subblock = text2num(href_list["subblock"]) - if("uitarget" in href_list) - uitarget = text2num(href_list["uitarget"]) - uitargethex = num2hex(uitarget) - - // save dna to buffer - buffer=se,ui,ue,all,clear - if("buffer" in href_list) - if(!viable) - return - var/which = href_list["buffer"] - if(!which || which == "clear") - buffer = null - else - if(!buffer) - buffer = new - if( which == "all" ) - buffer.unique_enzymes = scanner.occupant.dna.unique_enzymes - buffer.struc_enzymes = scanner.occupant.dna.struc_enzymes - buffer.uni_identity = scanner.occupant.dna.uni_identity - buffer.real_name = scanner.occupant.dna.real_name - buffer.mutantrace = scanner.occupant.dna.mutantrace - if( which == "se" ) - buffer.struc_enzymes = scanner.occupant.dna.struc_enzymes - buffer.mutantrace = scanner.occupant.dna.mutantrace - if( which == "ui" ) - buffer.uni_identity = scanner.occupant.dna.uni_identity - if( which == "ue" ) - buffer.uni_identity = scanner.occupant.dna.uni_identity - buffer.unique_enzymes = scanner.occupant.dna.unique_enzymes - buffer.real_name = scanner.occupant.dna.real_name - - // save buffer to file - - if("save" in href_list) - if(!viable || !buffer) - return - var/datum/file/data/genome/G = null - var/obj/item/part/computer/dest = device - if(target_drive) - dest = target_drive - - switch(href_list["save"]) - if("se") - if(buffer.struc_enzymes) - G = new /datum/file/data/genome/SE() - G.content = buffer.struc_enzymes - G:mutantrace = buffer.mutantrace // : not . due to inheritance - G.real_name = buffer.real_name - if("ui") - if(buffer.uni_identity) - G = new /datum/file/data/genome/UI() - G.content = buffer.uni_identity - G.real_name = buffer.real_name - if("ue") - if(buffer.uni_identity) - G = new /datum/file/data/genome/UI/UE() - G.content = buffer.uni_identity - G.real_name = buffer.real_name - if(G && dest) - var/label = input(usr, "Enter a filename:", "Save file", buffer.real_name) as text - G.name = G.name + "([label])" - dest:addfile(G) - - // load buffer from file - if("load" in href_list) - var/datum/file/data/genome/G = locate(href_list["load"]) - if(G) - if(!buffer) - buffer = new - switch(G.type) - if(/datum/file/data/genome/SE) - buffer.struc_enzymes = G.content - buffer.mutantrace = G:mutantrace - if(/datum/file/data/genome/UI/UE) - buffer.uni_identity = G.content - buffer.real_name = G.real_name - buffer.unique_enzymes = md5(buffer.real_name) - if(/datum/file/data/genome/UI) - buffer.uni_identity = G.content - if(/datum/file/data/genome/cloning) - var/datum/dna/record = G:record - buffer.unique_enzymes = record.unique_enzymes - buffer.struc_enzymes = record.struc_enzymes - buffer.uni_identity = record.uni_identity - buffer.real_name = record.real_name - buffer.mutantrace = record.mutantrace - - - // inject genetics into occupant - if("inject" in href_list) - if(!buffer || !viable) - return - - var/which = href_list["inject"] - var/datum/dna/target = scanner.occupant.dna - switch(which) - if("all",null) - if(buffer.struc_enzymes) - target.struc_enzymes = buffer.struc_enzymes - if(buffer.uni_identity) - target.uni_identity = buffer.uni_identity - if(buffer.real_name) - target.real_name = buffer.real_name - target.unique_enzymes = md5(target.real_name) - updateappearance(scanner.occupant,target.uni_identity) - domutcheck(scanner.occupant, scanner, 1) - - if(ishuman(scanner.occupant)) - target.mutantrace = buffer.mutantrace - scanner.occupant:update_mutantrace() - if("se") - if(buffer.struc_enzymes) - target.struc_enzymes = buffer.struc_enzymes - domutcheck(scanner.occupant, scanner, 1) - if(ishuman(scanner.occupant)) - target.mutantrace = buffer.mutantrace - scanner.occupant:update_mutantrace() - if("ui") - if(buffer.uni_identity) - target.uni_identity = buffer.uni_identity - updateappearance(scanner.occupant,target.uni_identity) - if("ue") - if(buffer.uni_identity) - target.uni_identity = buffer.uni_identity - if(buffer.real_name) - target.real_name = buffer.real_name - target.unique_enzymes = md5(target.real_name) - updateappearance(scanner.occupant,target.uni_identity) - - // generate dna injector - if("generate" in href_list) - if(!buffer || !injectorready) - return - buffer.check_integrity() - var/which = href_list["generate"] - var/obj/item/weapon/dnainjector/inj - switch(which) - if("se") - inj = new(computer.loc) - inj.dnatype = "se" - inj.dna = buffer.struc_enzymes - inj.mutantrace = buffer.mutantrace - inj.name = "Structural Enzymes" - if("ui") - inj = new(computer.loc) - inj.dnatype = "ui" - inj.dna = buffer.uni_identity - inj.ue = null - inj.name = "Unique Identifiers" - if("ue") - inj = new(computer.loc) - inj.dnatype = "ui" - inj.dna = buffer.uni_identity - inj.ue = buffer.real_name - inj.name = "Unique Enzymes + Unique Identifiers" - if(inj) - injectorready = 0 - spawn(300) - injectorready = 1 - var/label = input(usr, "Enter a label", "Label [inj.name] Injector", buffer.real_name) as null|text - if(label && inj) // it's possible it was deleted before we get here, input suspends execution - inj.name += " ([label])" - - interact() - return // putting this in there to visually mark the end of topic() while I do other things - - proc/menu() - if(!present && (mode==1 || mode==2)) // require viable occupant - mode = 0 - switch(mode) - if(0) // MAIN MENU - return main_menu() - - if(1) - return ui_menu() - if(2) - return se_menu() - - if(3) - return emitter_menu() - - if(4) - return buffer_menu() - - // unified header with health data - // option to show UI,UE,SE as plaintext - proc/status_display(var/dna_summary = 0) - var/mob/living/occupant = scanner.occupant - var/status_html - if(viable) - status_html = "
Health:
[occupant.health]%
" - status_html += "
Radiation Level:
[occupant.radiation]%
" - if(ishuman(occupant)) - var/rejuvenators = round(occupant.reagents.get_reagent_amount("inaprovaline") / REJUVENATORS_MAX * 100) - status_html += "
Rejuvenators:
[occupant.reagents.get_reagent_amount("inaprovaline")] units
" - - if(dna_summary) - status_html += "
Unique Enzymes :
[uppertext(occupant.dna.unique_enzymes)]
" - status_html += "
Unique Identifier:
[occupant.dna.uni_identity]
" - status_html += "
Structural Enzymes:
[occupant.dna.struc_enzymes]
" - - var/occupant_status = "Scanner Unoccupied" - if(present) - if(!viable) - occupant_status = "Invalid DNA structure" - else - switch(occupant.stat) // obvious, see what their status is - if(0) - occupant_status = "Conscious" - if(1) - occupant_status = "Unconscious" - else - occupant_status = "DEAD" - - occupant_status = "[occupant.name] => [occupant_status]
" - var/dat = "

Scanner Status

[topic_link(src,"","Scan")]
[occupant_status][status_html]
" - if(present) - dat += topic_link(src,"lock",scanner.locked?"Unlock Scanner":"Lock Scanner") + " " + topic_link(src,"rejuv","Inject Rejuvenators") - else - dat += "[scanner.locked?"Unlock Scanner":"Lock Scanner"] Inject Rejuvenators" - return dat - - proc/main_menu() - var/dat = status_display(dna_summary = 1) - dat += "

Main Menu

" - if(present) - dat += topic_link(src,"mode=1","Modify Unique Identifier") + "
" + topic_link(src,"mode=2","Modify Structural Enzymes") + "

" - else - dat += "Modify Unique Identifier
Modify Structural Enzymes

" - dat += topic_link(src,"mode=3","Radiation Emitter Settings") + "

" + topic_link(src,"mode=4","Transfer Buffer") - return dat - - - proc/block_plus_minus(var/topicstr, var/blockval,var/min,var/max) - var/left = blockval - 1 - var/right = blockval + 1 - if(left < min) - left = max - if(right > max) - right = min - return topic_link(src,"[topicstr]=[left]","<-") + " [blockval] " + topic_link(src,"[topicstr]=[right]","->") - - - proc/getblockstring(var/ui = 0) - var/mainblock = "seblock" - var/block = se_block - var/input = scanner.occupant.dna.struc_enzymes - if(ui) - mainblock = "uiblock" - block = ui_block - input = scanner.occupant.dna.uni_identity - - var/string = "
" - var/subpos = 1 // keeps track of the current sub block - var/blockpos = 1 - - for(var/i = 1, i <= length(input), i++) // loop through each letter - - if(blockpos == block && subpos == subblock) // if the current block/subblock is selected, mark it - string += fake_link(copytext(input,i,i+1)) - else - string += topic_link(src,"[mainblock]=[blockpos];subblock=[subpos]",copytext(input,i,i+1)) - - subpos++ - if(subpos > 3) // add a line break for every block - string += "
" - subpos = 1 - blockpos++ - - string += "
" - return string - - proc/ui_menu() - if(!viable) - return "No viable occupant detected." - to_chat(var/dat = topic_link(src,"mode=0",", Main Menu") + "
") - dat += "

Modify Unique Identifier

" - dat += "
Unique Identifier:
[getblockstring(ui=1)]

" - - dat += "Selected Block: " + block_plus_minus("uiblock",ui_block,1,MAX_UIBLOCK) + "

" - dat += "Selected Sub-Block: " + block_plus_minus("subblock",subblock,1,3) + "

" - dat += "Selected Target: " + block_plus_minus("uitarget",uitarget,0,15) + "

" - dat += "Modify Block
" - dat += topic_link(src,"pulse=ui","Irradiate") + "
" - return dat - - proc/se_menu() - if(!viable) - return "No viable occupant detected." - to_chat(var/dat = topic_link(src,"mode=0",", Main Menu") + "
") - dat += "

Modify Structural Enzymes

" - dat += "
Structural Enzymes: [getblockstring(ui=0)]

" - dat += "Selected Block: " + block_plus_minus("seblock",se_block,1,MAX_SEBLOCK) + "

" - dat += "Selected Sub-Block: " + block_plus_minus("subblock",subblock,1,3) + "

" - dat += "Modify Block
" - dat += topic_link(src,"pulse=se","Irradiate") + "
" - return dat - - proc/emitter_menu() - to_chat(var/dat = topic_link(src,"mode=0",", Main Menu") + "
") - dat += "

Radiation Emitter Settings

" - if(viable) - dat += topic_link(src,"pulse","Pulse Radiation") - else - dat += fake_link("Pulse Radiation") - dat += "

" - dat += "Radiation Duration: " + block_plus_minus("duration",radduration,1,20) + "
" - dat += "Radiation Intensity: " + block_plus_minus("strength",radstrength,1,10) + "

" - return dat - - proc/buffer_menu() - - interact() - if(!interactable()) - return - popup.add_stylesheet("scannernew", 'html/browser/scannernew.css') - - if(!computer.net) - computer.Crash(MISSING_PERIPHERAL) - return - - scanner = computer.net.connect_to(/obj/machinery/dna_scannernew, scanner) // if exists, will be verified - if(!scanner) - computer.Crash(NETWORK_FAILURE) - return - - // todo check everything goddamnit - - present = scanner.occupant && scanner.occupant.dna - viable = present && !(NOCLONE in scanner.occupant.mutations) - - popup.set_content(menu()) - popup.open() - - proc/pulse(var/target as null|anything in list("ui","se")) - - //Makes sure someone is in there (And valid) before trying anything - //More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason - - if(target != "ui" && target != "se") - target = null - - // transforms into the fail condition instead of having it in yet another nested if block - else if( prob(20 - (radduration / 2))) - target += "-f" - - if(!viable) - popup.set_content("No viable occupant detected.") - popup.open() - else - popup.set_content("Working ... Please wait ([radduration]) Seconds)") - popup.open() - - var/lock_state = scanner.locked - scanner.locked = 1//lock it - sleep(10*radduration) - - switch(target) - if("ui") - var/ui = scanner.occupant.dna.uni_identity - var/block = getblock(ui,ui_block,3) - var/result = "" - for(var/sb = 1; sb <=3; sb++) - var/temp = copytext(block,sb,sb+1) - if(sb == subblock) - temp = miniscramble("[uitargethex]",radstrength,radduration) - result += temp - scanner.occupant.dna.uni_identity = setblock(ui, ui_block, result,3) - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) - if("ui-f") - if(prob(20+radstrength)) - randmutb(scanner.occupant) - domutcheck(scanner.occupant,scanner) - else - randmuti(scanner.occupant) - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE) - - if("se") - var/se = scanner.occupant.dna.struc_enzymes - var/targetblock = se_block - - if(!(se_block in list(2,8,10,12)) && prob (20)) // shifts the target slightly - if(se_block <= 5) - targetblock++ - else - targetblock-- - var/block = getblock(scanner.occupant.dna.struc_enzymes,targetblock,3) - - var/result = "" - for(var/sb = 1; sb <=3; sb++) - var/temp = copytext(block,sb,sb+1) - if(sb == subblock) - temp = miniscramble(temp,radstrength,radduration) - result += temp - - scanner.occupant.dna.struc_enzymes = setblock(se, se_block, result,3) - domutcheck(scanner.occupant,scanner) - scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) - if("se-f") - if(prob(80-radduration)) - randmutb(scanner.occupant) - domutcheck(scanner.occupant,scanner) - else - randmuti(scanner.occupant) - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE) - - if(null) - if(prob(95)) - if(prob(75)) - randmutb(scanner.occupant) - else - randmuti(scanner.occupant) - else - if(prob(95)) - randmutg(scanner.occupant) - else - randmuti(scanner.occupant) - scanner.occupant.apply_effect((radstrength*3)+radduration*3, IRRADIATE) - - - scanner.locked = lock_state - interact() - - proc/rejuv() - if(!viable) - popup.set_content("No viable occupant detected.") - popup.open() - var/mob/living/carbon/human/H = scanner.occupant - if(istype(H)) - var/inap = H.reagents.get_reagent_amount("inaprovaline") // oh my *god* this section was ugly before I shortened it - - if(inap < (REJUVENATORS_MAX - REJUVENATORS_INJECT)) - H.reagents.add_reagent("inaprovaline", REJUVENATORS_INJECT) - else - H.reagents.add_reagent("inaprovaline", max(REJUVENATORS_MAX - inap,0)) - -/* -/obj/machinery/computer/scan_consolenew/Topic(href, href_list) - - temp_html = null - var/temp_header_html = null - var/temp_footer_html = null - - scanner_status_html = null // Scanner status is reset each update - var/mob/living/occupant = scanner.occupant - var/viable_occupant = (occupant && occupant.dna && !(NOCLONE in occupant.mutations)) - var/mob/living/carbon/human/human_occupant = scanner.occupant - - if(href_list["screen"]) // Passing a screen is only a request, we set current_screen here but it can be overridden below if necessary - current_screen = href_list["screen"] - - if(!viable_occupant) // If there is no viable occupant only allow certain screens - var/allowed_no_occupant_screens = list("mainmenu", "radsetmenu", "buffermenu") //These are the screens which will be allowed if there's no occupant - if(!(current_screen in allowed_no_occupant_screens)) - href_list = new /list(0) // clear list of options - current_screen = "mainmenu" - - - if(!current_screen) // If no screen is set default to mainmenu - current_screen = "mainmenu" - - - if(!scanner) //Is the scanner not connected? - scanner_status_html = "ERROR: No DNA Scanner connected." - current_screen = null // blank does not exist in the switch below, so no screen will be outputted - updateUsrDialog() - return - - usr.set_machine(src) - if(href_list["locked"]) - if(scanner.occupant) - scanner.locked = !( scanner.locked ) - //////////////////////////////////////////////////////// - if(href_list["genpulse"]) - if(!viable_occupant)//Makes sure someone is in there (And valid) before trying anything - temp_html = text("No viable occupant detected.")//More than anything, this just acts as a sanity check in case the option DOES appear for whatever reason - //usr << browse(temp_html, "window=scannernew;size=550x650") - //onclose(usr, "scannernew") - popup.set_content(temp_html) - popup.open() - else - - temp_html = text("Working ... Please wait ([] Seconds)", radduration) - popup.set_content(temp_html) - popup.open() - var/lock_state = scanner.locked - scanner.locked = 1//lock it - sleep(10*radduration) - if(!scanner.occupant) - temp_html = null - return null - if(prob(95)) - if(prob(75)) - randmutb(scanner.occupant) - else - randmuti(scanner.occupant) - else - if(prob(95)) - randmutg(scanner.occupant) - else - randmuti(scanner.occupant) - scanner.occupant.apply_effect((radstrength*3)+radduration*3, IRRADIATE) - scanner.locked = lock_state - temp_html = null - dopage(src,"screen=radsetmenu") - if(href_list["radleplus"]) - if(!viable_occupant) - temp_html = text("No viable occupant detected.") - popup.set_content(temp_html) - popup.open() - if(radduration < 20) - radduration++ - radduration++ - dopage(src,"screen=radsetmenu") - if(href_list["radleminus"]) - if(!viable_occupant) - temp_html = text("No viable occupant detected.") - popup.set_content(temp_html) - popup.open() - if(radduration > 2) - radduration-- - radduration-- - dopage(src,"screen=radsetmenu") - if(href_list["radinplus"]) - if(radstrength < 10) - radstrength++ - dopage(src,"screen=radsetmenu") - if(href_list["radinminus"]) - if(radstrength > 1) - radstrength-- - dopage(src,"screen=radsetmenu") - //////////////////////////////////////////////////////// - if(href_list["unimenuplus"]) - if(ui_block < 13) - ui_block++ - else - ui_block = 1 - dopage(src,"screen=unimenu") - if(href_list["unimenuminus"]) - if(ui_block > 1) - ui_block-- - else - ui_block = 13 - dopage(src,"screen=unimenu") - if(href_list["unimenusubplus"]) - if(subblock < 3) - subblock++ - else - subblock = 1 - dopage(src,"screen=unimenu") - if(href_list["unimenusubminus"]) - if(subblock > 1) - subblock-- - else - subblock = 3 - dopage(src,"screen=unimenu") - if(href_list["unimenutargetplus"]) - if(unitarget < 15) - unitarget++ - unitargethex = unitarget - switch(unitarget) - if(10) - unitargethex = "A" - if(11) - unitargethex = "B" - if(12) - unitargethex = "C" - if(13) - unitargethex = "D" - if(14) - unitargethex = "E" - if(15) - unitargethex = "F" - else - unitarget = 0 - unitargethex = 0 - dopage(src,"screen=unimenu") - if(href_list["unimenutargetminus"]) - if(unitarget > 0) - unitarget-- - unitargethex = unitarget - switch(unitarget) - if(10) - unitargethex = "A" - if(11) - unitargethex = "B" - if(12) - unitargethex = "C" - if(13) - unitargethex = "D" - if(14) - unitargethex = "E" - else - unitarget = 15 - unitargethex = "F" - dopage(src,"screen=unimenu") - if(href_list["uimenuset"] && href_list["uimenusubset"]) // This chunk of code updates selected block / sub-block based on click - var/menuset = text2num(href_list["uimenuset"]) - var/menusubset = text2num(href_list["uimenusubset"]) - if((menuset <= 13) && (menuset >= 1)) - ui_block = menuset - if((menusubset <= 3) && (menusubset >= 1)) - subblock = menusubset - dopage(src, "unimenu") - if(href_list["unipulse"]) - if(scanner.occupant) - var/block - var/newblock - var/tstructure2 - block = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),subblock,1) - - temp_html = text("Working ... Please wait ([] Seconds)", radduration) - popup.set_content(temp_html) - popup.open() - var/lock_state = scanner.locked - scanner.locked = 1//lock it - sleep(10*radduration) - if(!scanner.occupant) - temp_html = null - return null - /// - if(prob((80 + (radduration / 2)))) - block = miniscrambletarget(num2text(unitarget), radstrength, radduration) - newblock = null - if(subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),2,1) + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),3,1) - if(subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),3,1) - if(subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),1,1) + getblock(getblock(scanner.occupant.dna.uni_identity,ui_block,3),2,1) + block - tstructure2 = setblock(scanner.occupant.dna.uni_identity, ui_block, newblock,3) - scanner.occupant.dna.uni_identity = tstructure2 - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) - else - if(prob(20+radstrength)) - randmutb(scanner.occupant) - domutcheck(scanner.occupant,scanner) - else - randmuti(scanner.occupant) - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE) - scanner.locked = lock_state - dopage(src,"screen=unimenu") - - //////////////////////////////////////////////////////// - if(href_list["rejuv"]) - if(!viable_occupant) - temp_html = text("No viable occupant detected.") - popup.set_content(temp_html) - popup.open() - else - if(human_occupant) - if(human_occupant.reagents.get_reagent_amount("inaprovaline") < REJUVENATORS_MAX) - if(human_occupant.reagents.get_reagent_amount("inaprovaline") < (REJUVENATORS_MAX - REJUVENATORS_INJECT)) - human_occupant.reagents.add_reagent("inaprovaline", REJUVENATORS_INJECT) - else - human_occupant.reagents.add_reagent("inaprovaline", round(REJUVENATORS_MAX - human_occupant.reagents.get_reagent_amount("inaprovaline"))) -// to_chat(usr, text("Occupant now has [] units of rejuvenation in his/her bloodstream.", human_occupant.reagents.get_reagent_amount("inaprovaline"))) - - //////////////////////////////////////////////////////// - if(href_list["strucmenuplus"]) - if(se_block < 14) - se_block++ - else - se_block = 1 - dopage(src,"screen=strucmenu") - if(href_list["strucmenuminus"]) - if(se_block > 1) - se_block-- - else - se_block = 14 - dopage(src,"screen=strucmenu") - if(href_list["strucmenusubplus"]) - if(subblock < 3) - subblock++ - else - subblock = 1 - dopage(src,"screen=strucmenu") - if(href_list["strucmenusubminus"]) - if(subblock > 1) - subblock-- - else - subblock = 3 - dopage(src,"screen=strucmenu") - if(href_list["semenuset"] && href_list["semenusubset"]) // This chunk of code updates selected block / sub-block based on click (se stands for strutural enzymes) - var/menuset = text2num(href_list["semenuset"]) - var/menusubset = text2num(href_list["semenusubset"]) - if((menuset <= 14) && (menuset >= 1)) - se_block = menuset - if((menusubset <= 3) && (menusubset >= 1)) - subblock = menusubset - dopage(src, "strucmenu") - if(href_list["strucpulse"]) - var/block - var/newblock - var/tstructure2 - var/oldblock - var/lock_state = scanner.locked - scanner.locked = 1//lock it - if(viable_occupant) - block = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),subblock,1) - - temp_html = text("Working ... Please wait ([] Seconds)", radduration) - popup.set_content(temp_html) - popup.open() - sleep(10*radduration) - else - temp_html = null - return null - /// - if(viable_occupant) - if(prob((80 + (radduration / 2)))) - if((se_block != 2 || se_block != 12 || se_block != 8 || se_block || 10) && prob (20)) - oldblock = se_block - block = miniscramble(block, radstrength, radduration) - newblock = null - if(se_block > 1 && se_block < 5) - se_block++ - else if(se_block > 5 && se_block < 14) - se_block-- - if(subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if(subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if(subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + block - tstructure2 = setblock(scanner.occupant.dna.struc_enzymes, se_block, newblock,3) - scanner.occupant.dna.struc_enzymes = tstructure2 - domutcheck(scanner.occupant,scanner) - scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) - se_block = oldblock - else - // - block = miniscramble(block, radstrength, radduration) - newblock = null - if(subblock == 1) newblock = block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if(subblock == 2) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + block + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),3,1) - if(subblock == 3) newblock = getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),1,1) + getblock(getblock(scanner.occupant.dna.struc_enzymes,se_block,3),2,1) + block - tstructure2 = setblock(scanner.occupant.dna.struc_enzymes, se_block, newblock,3) - scanner.occupant.dna.struc_enzymes = tstructure2 - domutcheck(scanner.occupant,scanner) - scanner.occupant.apply_effect(radstrength+radduration, IRRADIATE) - else - if(prob(80-radduration)) - randmutb(scanner.occupant) - domutcheck(scanner.occupant,scanner) - else - randmuti(scanner.occupant) - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - scanner.occupant.apply_effect((radstrength*2)+radduration, IRRADIATE) - scanner.locked = lock_state - /// - dopage(src,"screen=strucmenu") - - //////////////////////////////////////////////////////// - if(href_list["b1addui"]) - if(scanner.occupant && scanner.occupant.dna) - buffer1iue = 0 - buffer1 = scanner.occupant.dna.uni_identity - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer1owner = scanner.occupant.name - else - buffer1owner = scanner.occupant.real_name - buffer1label = "Unique Identifier" - buffer1type = "ui" - dopage(src,"screen=buffermenu") - if(href_list["b1adduiue"]) - if(scanner.occupant && scanner.occupant.dna) - buffer1 = scanner.occupant.dna.uni_identity - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer1owner = scanner.occupant.name - else - buffer1owner = scanner.occupant.real_name - buffer1label = "Unique Identifier & Unique Enzymes" - buffer1type = "ui" - buffer1iue = 1 - dopage(src,"screen=buffermenu") - if(href_list["b2adduiue"]) - if(scanner.occupant && scanner.occupant.dna) - buffer2 = scanner.occupant.dna.uni_identity - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer2owner = scanner.occupant.name - else - buffer2owner = scanner.occupant.real_name - buffer2label = "Unique Identifier & Unique Enzymes" - buffer2type = "ui" - buffer2iue = 1 - dopage(src,"screen=buffermenu") - if(href_list["b3adduiue"]) - if(scanner.occupant && scanner.occupant.dna) - buffer3 = scanner.occupant.dna.uni_identity - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer3owner = scanner.occupant.name - else - buffer3owner = scanner.occupant.real_name - buffer3label = "Unique Identifier & Unique Enzymes" - buffer3type = "ui" - buffer3iue = 1 - dopage(src,"screen=buffermenu") - if(href_list["b2addui"]) - if(scanner.occupant && scanner.occupant.dna) - buffer2iue = 0 - buffer2 = scanner.occupant.dna.uni_identity - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer2owner = scanner.occupant.name - else - buffer2owner = scanner.occupant.real_name - buffer2label = "Unique Identifier" - buffer2type = "ui" - dopage(src,"screen=buffermenu") - if(href_list["b3addui"]) - if(scanner.occupant && scanner.occupant.dna) - buffer3iue = 0 - buffer3 = scanner.occupant.dna.uni_identity - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer3owner = scanner.occupant.name - else - buffer3owner = scanner.occupant.real_name - buffer3label = "Unique Identifier" - buffer3type = "ui" - dopage(src,"screen=buffermenu") - if(href_list["b1addse"]) - if(scanner.occupant && scanner.occupant.dna) - buffer1iue = 0 - buffer1 = scanner.occupant.dna.struc_enzymes - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer1owner = scanner.occupant.name - else - buffer1owner = scanner.occupant.real_name - buffer1label = "Structural Enzymes" - buffer1type = "se" - dopage(src,"screen=buffermenu") - if(href_list["b2addse"]) - if(scanner.occupant && scanner.occupant.dna) - buffer2iue = 0 - buffer2 = scanner.occupant.dna.struc_enzymes - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer2owner = scanner.occupant.name - else - buffer2owner = scanner.occupant.real_name - buffer2label = "Structural Enzymes" - buffer2type = "se" - dopage(src,"screen=buffermenu") - if(href_list["b3addse"]) - if(scanner.occupant && scanner.occupant.dna) - buffer3iue = 0 - buffer3 = scanner.occupant.dna.struc_enzymes - if(!istype(scanner.occupant,/mob/living/carbon/human)) - buffer3owner = scanner.occupant.name - else - buffer3owner = scanner.occupant.real_name - buffer3label = "Structural Enzymes" - buffer3type = "se" - dopage(src,"screen=buffermenu") - if(href_list["b1clear"]) - buffer1 = null - buffer1owner = null - buffer1label = null - buffer1iue = null - dopage(src,"screen=buffermenu") - if(href_list["b2clear"]) - buffer2 = null - buffer2owner = null - buffer2label = null - buffer2iue = null - dopage(src,"screen=buffermenu") - if(href_list["b3clear"]) - buffer3 = null - buffer3owner = null - buffer3label = null - buffer3iue = null - dopage(src,"screen=buffermenu") - if(href_list["b1label"]) - buffer1label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"screen=buffermenu") - if(href_list["b2label"]) - buffer2label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"screen=buffermenu") - if(href_list["b3label"]) - buffer3label = sanitize(input("New Label:","Edit Label","Infos here")) - dopage(src,"screen=buffermenu") - if(href_list["b1transfer"]) - if(!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) - return - if(buffer1type == "ui") - if(buffer1iue) - scanner.occupant.real_name = buffer1owner - scanner.occupant.name = buffer1owner - scanner.occupant.dna.uni_identity = buffer1 - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - else if(buffer1type == "se") - scanner.occupant.dna.struc_enzymes = buffer1 - domutcheck(scanner.occupant,scanner) - temp_html = "Transfered." - scanner.occupant.apply_effect(rand(20,50), IRRADIATE) - - if(href_list["b2transfer"]) - if(!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) - return - if(buffer2type == "ui") - if(buffer2iue) - scanner.occupant.real_name = buffer2owner - scanner.occupant.name = buffer2owner - scanner.occupant.dna.uni_identity = buffer2 - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - else if(buffer2type == "se") - scanner.occupant.dna.struc_enzymes = buffer2 - domutcheck(scanner.occupant,scanner) - temp_html = "Transfered." - scanner.occupant.apply_effect(rand(20,50), IRRADIATE) - - if(href_list["b3transfer"]) - if(!scanner.occupant || (NOCLONE in scanner.occupant.mutations) || !scanner.occupant.dna) - return - if(buffer3type == "ui") - if(buffer3iue) - scanner.occupant.real_name = buffer3owner - scanner.occupant.name = buffer3owner - scanner.occupant.dna.uni_identity = buffer3 - updateappearance(scanner.occupant,scanner.occupant.dna.uni_identity) - else if(buffer3type == "se") - scanner.occupant.dna.struc_enzymes = buffer3 - domutcheck(scanner.occupant,scanner) - temp_html = "Transfered." - scanner.occupant.apply_effect(rand(20,50), IRRADIATE) - - if(href_list["b1injector"]) - if(injectorready) - var/obj/item/tool/medical/dnainjector/I = new /obj/item/tool/medical/dnainjector - I.dna = buffer1 - I.dnatype = buffer1type - I.loc = loc - I.name += " ([buffer1label])" - if(buffer1iue) I.ue = buffer1owner //lazy haw haw - temp_html = "Injector created." - - injectorready = 0 - spawn(300) - injectorready = 1 - else - temp_html = "Replicator not ready yet." - - if(href_list["b2injector"]) - if(injectorready) - var/obj/item/tool/medical/dnainjector/I = new /obj/item/tool/medical/dnainjector - I.dna = buffer2 - I.dnatype = buffer2type - I.loc = loc - I.name += " ([buffer2label])" - if(buffer2iue) I.ue = buffer2owner //lazy haw haw - temp_html = "Injector created." - - injectorready = 0 - spawn(300) - injectorready = 1 - else - temp_html = "Replicator not ready yet." - - if(href_list["b3injector"]) - if(injectorready) - var/obj/item/tool/medical/dnainjector/I = new /obj/item/tool/medical/dnainjector - I.dna = buffer3 - I.dnatype = buffer3type - I.loc = loc - I.name += " ([buffer3label])" - if(buffer3iue) I.ue = buffer3owner //lazy haw haw - temp_html = "Injector created." - - injectorready = 0 - spawn(300) - injectorready = 1 - else - temp_html = "Replicator not ready yet." - - //////////////////////////////////////////////////////// - if(href_list["load_disk"]) - var/buffernum = text2num(href_list["load_disk"]) - if((buffernum > 3) || (buffernum < 1)) - return - if((isnull(diskette)) || (!diskette.data) || (diskette.data == "")) - return - switch(buffernum) - if(1) - buffer1 = diskette.data - buffer1type = diskette.data_type - buffer1iue = diskette.ue - buffer1owner = diskette.owner - if(2) - buffer2 = diskette.data - buffer2type = diskette.data_type - buffer2iue = diskette.ue - buffer2owner = diskette.owner - if(3) - buffer3 = diskette.data - buffer3type = diskette.data_type - buffer3iue = diskette.ue - buffer3owner = diskette.owner - temp_html = "Data loaded." - - if(href_list["save_disk"]) - var/buffernum = text2num(href_list["save_disk"]) - if((buffernum > 3) || (buffernum < 1)) - return - if((isnull(diskette)) || (diskette.read_only)) - return - switch(buffernum) - if(1) - diskette.data = buffer1 - diskette.data_type = buffer1type - diskette.ue = buffer1iue - diskette.owner = buffer1owner - diskette.name = "data disk - '[buffer1owner]'" - if(2) - diskette.data = buffer2 - diskette.data_type = buffer2type - diskette.ue = buffer2iue - diskette.owner = buffer2owner - diskette.name = "data disk - '[buffer2owner]'" - if(3) - diskette.data = buffer3 - diskette.data_type = buffer3type - diskette.ue = buffer3iue - diskette.owner = buffer3owner - diskette.name = "data disk - '[buffer3owner]'" - temp_html = "Data saved." - if(href_list["eject_disk"]) - if(!diskette) - return - diskette.loc = get_turf(src) - diskette = null - //////////////////////////////////////////////////////// - - temp_html = temp_header_html - switch(current_screen) - if("mainmenu") - temp_html += "

Main Menu

" - if(viable_occupant) //is there REALLY someone in there who can be modified? - temp_html += "Modify Unique Identifier
" - temp_html += "Modify Structural Enzymes

" - else - temp_html += "Modify Unique Identifier
" - temp_html += "Modify Structural Enzymes

" - temp_html += "Radiation Emitter Settings

" - temp_html += "Transfer Buffer

" - - if("unimenu") - if(!viable_occupant) - temp_html = text("No viable occupant detected.") - popup.set_content(temp_html) - popup.open() - else - temp_html = "<< Main Menu
" - temp_html += "

Modify Unique Identifier

" - temp_html += "
Unique Identifier:
[getblockstring(scanner.occupant.dna.uni_identity,ui_block,subblock,3, src,1)]

" - temp_html += "Selected Block: <- [ui_block] ->

" - temp_html += "Selected Sub-Block: <- [subblock] ->

" - temp_html += "Selected Target: <- [unitargethex] ->

" - temp_html += "Modify Block
" - temp_html += "Irradiate
" - - if("strucmenu") - if(!viable_occupant) - temp_html = text("No viable occupant detected.") - popup.set_content(temp_html) - popup.open() - else - temp_html = "<< Main Menu
" - temp_html += "

Modify Structural Enzymes

" - temp_html += "
Structural Enzymes: [getblockstring(scanner.occupant.dna.struc_enzymes,se_block,subblock,3,src,0)]

" - temp_html += "Selected Block: <- [se_block] ->

" - temp_html += "Selected Sub-Block: <- [subblock] ->

" - temp_html += "Modify Block
" - temp_html += "Irradiate
" - - if("radsetmenu") - temp_html = "<< Main Menu
" - temp_html += "

Radiation Emitter Settings

" - if(viable_occupant) - temp_html += "Pulse Radiation" - else - temp_html += "Pulse Radiation" - temp_html += "

Radiation Duration: - [radduration] +
" - temp_html += "Radiation Intensity: - [radstrength] +

" - - if("buffermenu") - temp_html = "<< Main Menu
" - temp_html += "

Transfer Buffer

" - temp_html += "

Buffer 1:

" - if(!(buffer1)) - temp_html += "Buffer Empty
" - else - temp_html += text("Data: []
", buffer1) - temp_html += text("By: []
", buffer1owner) - temp_html += text("Label: []
", buffer1label) - if(viable_occupant) temp_html += "Save : UI - UI+UE - SE
" - if(buffer1) temp_html += "Transfer to: Occupant - Injector
" - //if(buffer1) temp_html += "Isolate Block
" - if(buffer1) temp_html += "Disk: Save To | Load From
" - if(buffer1) temp_html += "Edit Label
" - if(buffer1) temp_html += "Clear Buffer

" - if(!buffer1) temp_html += "
" - temp_html += "

Buffer 2:

" - if(!(buffer2)) - temp_html += "Buffer Empty
" - else - temp_html += text("Data: []
", buffer2) - temp_html += text("By: []
", buffer2owner) - temp_html += text("Label: []
", buffer2label) - if(viable_occupant) temp_html += "Save : UI - UI+UE - SE
" - if(buffer2) temp_html += "Transfer to: Occupant - Injector
" - //if(buffer2) temp_html += "Isolate Block
" - if(buffer2) temp_html += "Disk: Save To | Load From
" - if(buffer2) temp_html += "Edit Label
" - if(buffer2) temp_html += "Clear Buffer

" - if(!buffer2) temp_html += "
" - temp_html += "

Buffer 3:

" - if(!(buffer3)) - temp_html += "Buffer Empty
" - else - temp_html += text("Data: []
", buffer3) - temp_html += text("By: []
", buffer3owner) - temp_html += text("Label: []
", buffer3label) - if(viable_occupant) temp_html += "Save : UI - UI+UE - SE
" - if(buffer3) temp_html += "Transfer to: Occupant - Injector
" - //if(buffer3) temp_html += "Isolate Block
" - if(buffer3) temp_html += "Disk: Save To | Load From
" - if(buffer3) temp_html += "Edit Label
" - if(buffer3) temp_html += "Clear Buffer

" - if(!buffer3) temp_html += "
" - temp_html += temp_footer_html - - if(viable_occupant && !scanner_status_html && occupant) //is there REALLY someone in there? - scanner_status_html = "
Health:
[occupant.health]%
" - scanner_status_html += "
Radiation Level:
[occupant.radiation]%
" - if(human_occupant) - var/rejuvenators = round(human_occupant.reagents.get_reagent_amount("inaprovaline") / REJUVENATORS_MAX * 100) - scanner_status_html += "
Rejuvenators:
[human_occupant.reagents.get_reagent_amount("inaprovaline")] units
" - - if(current_screen == "mainmenu") - scanner_status_html += "
Unique Enzymes :
[uppertext(occupant.dna.unique_enzymes)]
" - scanner_status_html += "
Unique Identifier:
[occupant.dna.uni_identity]
" - scanner_status_html += "
Structural Enzymes:
[occupant.dna.struc_enzymes]
" - - var/dat = "

Scanner Status

" - - var/occupant_status = "Scanner Unoccupied" - if(occupant && occupant.dna) //is there REALLY someone in there? - if(!istype(occupant,/mob/living/carbon/human)) - sleep(1) - if(NOCLONE in occupant.mutations) - occupant_status = "Invalid DNA structure" - else - switch(occupant.stat) // obvious, see what their status is - if(0) - occupant_status = "Conscious" - if(1) - occupant_status = "Unconscious" - else - occupant_status = "DEAD" - - occupant_status = "[occupant.name] => [occupant_status]
" - - dat += "
[occupant_status][scanner_status_html]
" - - var/scanner_access_text = "Lock Scanner" - if(scanner.locked) - scanner_access_text = "Unlock Scanner" - - dat += "Scan " - - if(occupant && occupant.dna) - dat += "[scanner_access_text] " - if(human_occupant) - dat += "Inject Rejuvenators
" - else - dat += "Inject Rejuvenators
" - else - dat += "[scanner_access_text] " - dat += "Inject Rejuvenators
" - - if(!isnull(diskette)) - dat += "Eject Disk
" - - dat += "
" - - if(temp_html) - dat += temp_html - - popup.set_content(dat) - popup.open() -*/ diff --git a/code/modules/computer3/computers/security.dm b/code/modules/computer3/computers/security.dm deleted file mode 100644 index c3c05c11d19..00000000000 --- a/code/modules/computer3/computers/security.dm +++ /dev/null @@ -1,628 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 -/obj/machinery/computer3/secure_data - default_prog = /datum/file/program/secure_data - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio) - icon_state = "frame-sec" - -/obj/machinery/computer3/laptop/secure_data - default_prog = /datum/file/program/secure_data - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/cardslot,/obj/item/part/computer/networking/radio) - icon_state = "laptop" - - -/datum/file/program/secure_data - name = "Security Records" - desc = "Used to view and edit personnel's security records" - active_state = "security" - image = 'icons/ntos/records.png' - - req_one_access = list(access_security, access_forensics_lockers) - - var/obj/item/weapon/card/id/scan = null - var/obj/item/weapon/card/id/scan2 = null - var/authenticated = null - var/rank = null - var/screen = null - var/datum/data/record/active1 = null - var/datum/data/record/active2 = null - var/a_id = null - var/temp = null - var/printing = null - var/can_change_id = 0 - var/list/Perp - var/tempname = null - //Sorting Variables - var/sortBy = "name" - var/order = 1 // -1 = Descending - 1 = Ascending - - - - proc/authenticate() - if((access_security in scan.access) || (access_forensics_lockers in scan.access) ) - return 1 - if(istype(usr,/mob/living/silicon/ai)) - return 1 - return 0 - - interact() - if(!computer.cardslot) - computer.Crash(MISSING_PERIPHERAL) - return - scan = computer.cardslot.reader - - if(computer.cardslot.dualslot) - scan2 = computer.cardslot.writer - - if(!interactable()) - return - - if(is_away_level(computer.z)) - to_chat(usr, "Unable to establish a connection: You're too far away from the station!") - return - var/dat - - if(temp) - dat = "[temp]

Clear Screen" - else - dat = text("Confirm Identity (R): []
", (scan ? text("[]", scan.name) : "----------")) - if(computer.cardslot.dualslot) - dat += text("Check Identity (W): []
", (scan2 ? text("[]", scan2.name) : "----------")) - if(scan2 && !scan) - dat += text("
Insert card into reader slot to log in.

") - if(authenticated) - switch(screen) - if(1.0) - dat += {" -

"} - dat += "Search Records
" - dat += "New Record
" - dat += {" -

- - - - -
Records:
- - - - - - - - "} - if(!isnull(data_core.general)) - for(var/datum/data/record/R in sortRecord(data_core.general, sortBy, order)) - var/crimstat = "" - for(var/datum/data/record/E in data_core.security) - if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) - crimstat = E.fields["criminal"] - var/background - switch(crimstat) - if("*Arrest*") - background = "'background-color:#DC143C;'" - if("Incarcerated") - background = "'background-color:#CD853F;'" - if("Parolled") - background = "'background-color:#CD853F;'" - if("Released") - background = "'background-color:#3BB9FF;'" - if("None") - background = "'background-color:#00FF00;'" - if("") - background = "'background-color:#00FF7F;'" - crimstat = "No Record." - dat += text("", background, R, R.fields["name"]) - dat += text("", R.fields["id"]) - dat += text("", R.fields["rank"]) - dat += text("", R.fields["fingerprint"]) - dat += text("", crimstat) - dat += "
NameIDRankFingerprintsCriminal Status
[][][][][]

" - dat += "Record Maintenance

" - dat += "{Log Out}" - if(2.0) - dat += "Records Maintenance
" - dat += "
Delete All Records

Back" - if(3.0) - dat += "
Security Record

" - if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - dat += text(" \ -
\ - Name: [active1.fields["name"]]
\ - ID: [active1.fields["id"]]
\n \ - Sex: [active1.fields["sex"]]
\n \ - Age: [active1.fields["age"]]
\n \ - Rank: [active1.fields["rank"]]
\n \ - Fingerprint: [active1.fields["fingerprint"]]
\n \ - Physical Status: [active1.fields["p_stat"]]
\n \ - Mental Status: [active1.fields["m_stat"]]
Photo:
\ -
") - else - dat += "General Record Lost!
" - if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) - dat += text("
\n
Security Data

\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", active2.fields["criminal"], active2.fields["mi_crim"], active2.fields["mi_crim_d"], active2.fields["ma_crim"], active2.fields["ma_crim_d"], decode(active2.fields["notes"])) - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - dat += text("[]
Delete Entry

", active2.fields[text("com_[]", counter)], counter) - counter++ - dat += "Add Entry

" - dat += "Delete Record (Security Only)

" - else - dat += "Security Record Lost!
" - dat += "New Security Record

" - dat += "\nDelete Record (ALL)

\nPrint Record
\nBack
" - if(4.0) - if(!Perp.len) - dat += "ERROR. String could not be located.

Back" - else - dat += {" - - "} - dat += text("", tempname) - dat += {" - -
Search Results for '[]':
- - - - - - - - "} - for(var/i=1, i<=Perp.len, i += 2) - var/crimstat = "" - var/datum/data/record/R = Perp[i] - if(istype(Perp[i+1],/datum/data/record/)) - var/datum/data/record/E = Perp[i+1] - crimstat = E.fields["criminal"] - var/background - switch(crimstat) - if("*Arrest*") - background = "'background-color:#DC143C;'" - if("Incarcerated") - background = "'background-color:#CD853F;'" - if("Parolled") - background = "'background-color:#CD853F;'" - if("Released") - background = "'background-color:#3BB9FF;'" - if("None") - background = "'background-color:#00FF7F;'" - if("") - background = "'background-color:#FFFFFF;'" - crimstat = "No Record." - dat += text("", background, R, R.fields["name"]) - dat += text("", R.fields["id"]) - dat += text("", R.fields["rank"]) - dat += text("", R.fields["fingerprint"]) - dat += text("", crimstat) - dat += "
NameIDRankFingerprintsCriminal Status
[][][][][]

" - dat += "
Return to index." - else - else - dat += "{Log In}" - popup.width = 600 - popup.height = 400 - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) - popup.open() - return - -/*Revised /N -I can't be bothered to look more of the actual code outside of switch but that probably needs revising too. -What a mess.*/ - Topic(href, href_list) - if(!interactable() || !computer.cardslot || ..(href,href_list)) - return - if(!( data_core.general.Find(active1) )) - active1 = null - if(!( data_core.security.Find(active2) )) - active2 = null - switch(href_list["choice"]) -// SORTING! - if("Sorting") - // Reverse the order if clicked twice - if(sortBy == href_list["sort"]) - if(order == 1) - order = -1 - else - order = 1 - else - // New sorting order! - sortBy = href_list["sort"] - order = initial(order) -//BASIC FUNCTIONS - if("Clear Screen") - temp = null - - if("Return") - screen = 1 - active1 = null - active2 = null - - if("Confirm Identity R") - if(scan) - if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) - computer.cardslot.remove(1) - else - scan.loc = get_turf(src) - scan = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/card/id)) - computer.cardslot.insert(I, 1) - scan = I - - if("Confirm Identity W") - if(scan2) - if(istype(usr,/mob/living/carbon/human) && !usr.get_active_hand()) - computer.cardslot.remove(2) - else - scan2.loc = get_turf(src) - scan2 = null - else - var/obj/item/I = usr.get_active_hand() - if(istype(I, /obj/item/weapon/card/id)) - computer.cardslot.insert(I, 2) - scan2 = I - - if("Log Out") - authenticated = null - screen = null - active1 = null - active2 = null - - if("Log In") - if(istype(usr, /mob/living/silicon/ai)) - src.active1 = null - src.active2 = null - src.authenticated = usr.name - src.rank = "AI" - src.screen = 1 - else if(istype(usr, /mob/living/silicon/robot)) - src.active1 = null - src.active2 = null - src.authenticated = usr.name - var/mob/living/silicon/robot/R = usr - src.rank = "[R.modtype] [R.braintype]" - src.screen = 1 - else if(istype(scan, /obj/item/weapon/card/id)) - active1 = null - active2 = null - if(authenticate()) - authenticated = scan.registered_name - rank = scan.assignment - screen = 1 -//RECORD FUNCTIONS - if("Search Records") - var/t1 = input("Search String: (Partial Name or ID or Fingerprints or Rank)", "Secure. records", null, null) as text - if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || !interactable())) - return - Perp = new/list() - t1 = lowertext(t1) - var/list/components = splittext(t1, " ") - if(components.len > 5) - return //Lets not let them search too greedily. - for(var/datum/data/record/R in data_core.general) - var/temptext = R.fields["name"] + " " + R.fields["id"] + " " + R.fields["fingerprint"] + " " + R.fields["rank"] - for(var/i = 1, i<=components.len, i++) - if(findtext(temptext,components[i])) - var/prelist = new/list(2) - prelist[1] = R - Perp += prelist - for(var/i = 1, i<=Perp.len, i+=2) - for(var/datum/data/record/E in data_core.security) - var/datum/data/record/R = Perp[i] - if((E.fields["name"] == R.fields["name"] && E.fields["id"] == R.fields["id"])) - Perp[i+1] = E - tempname = t1 - screen = 4 - - if("Record Maintenance") - screen = 2 - active1 = null - active2 = null - - if("Browse Record") - var/datum/data/record/R = locate(href_list["d_rec"]) - var/S = locate(href_list["d_rec"]) - if(!( data_core.general.Find(R) )) - temp = "Record Not Found!" - else - for(var/datum/data/record/E in data_core.security) - if((E.fields["name"] == R.fields["name"] || E.fields["id"] == R.fields["id"])) - S = E - active1 = R - active2 = S - screen = 3 - -/* if("Search Fingerprints") - var/t1 = input("Search String: (Fingerprint)", "Secure. records", null, null) as text - if((!( t1 ) || usr.stat || !( authenticated ) || usr.restrained() || (!interactable()) && (!istype(usr, /mob/living/silicon)))) - return - active1 = null - active2 = null - t1 = lowertext(t1) - for(var/datum/data/record/R in data_core.general) - if(lowertext(R.fields["fingerprint"]) == t1) - active1 = R - if(!( active1 )) - temp = text("Could not locate record [].", t1) - else - for(var/datum/data/record/E in data_core.security) - if((E.fields["name"] == active1.fields["name"] || E.fields["id"] == active1.fields["id"])) - active2 = E - screen = 3 */ - - if("Print Record") - if(!( printing )) - printing = 1 - var/datum/data/record/record1 = null - var/datum/data/record/record2 = null - if((istype(active1, /datum/data/record) && data_core.general.Find(active1))) - record1 = active1 - if((istype(active2, /datum/data/record) && data_core.security.Find(active2))) - record2 = active2 - sleep(50) - var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( computer.loc ) - P.info = "
Security Record

" - if(record1) - P.info += text("Name: [] ID: []
\nSex: []
\nAge: []
\nFingerprint: []
\nPhysical Status: []
\nMental Status: []
", record1.fields["name"], record1.fields["id"], record1.fields["sex"], record1.fields["age"], record1.fields["fingerprint"], record1.fields["p_stat"], record1.fields["m_stat"]) - P.name = text("Security Record ([])", record1.fields["name"]) - else - P.info += "General Record Lost!
" - P.name = "Security Record" - if(record2) - P.info += text("
\n
Security Data

\nCriminal Status: []
\n
\nMinor Crimes: []
\nDetails: []
\n
\nMajor Crimes: []
\nDetails: []
\n
\nImportant Notes:
\n\t[]
\n
\n
Comments/Log

", record2.fields["criminal"], record2.fields["mi_crim"], record2.fields["mi_crim_d"], record2.fields["ma_crim"], record2.fields["ma_crim_d"], decode(record2.fields["notes"])) - var/counter = 1 - while(record2.fields[text("com_[]", counter)]) - P.info += text("[]
", record2.fields[text("com_[]", counter)]) - counter++ - else - P.info += "Security Record Lost!
" - P.info += "" - printing = null - computer.updateUsrDialog() -//RECORD DELETE - if("Delete All Records") - temp = "" - temp += "Are you sure you wish to delete all Security records?
" - temp += "Yes
" - temp += "No" - - if("Purge All Records") - for(var/datum/data/record/R in data_core.security) - qdel(R) - temp = "All Security records deleted." - - if("Add Entry") - if(!( istype(active2, /datum/data/record) )) - return - var/a2 = active2 - var/t1 = sanitize(copytext(input("Add Comment:", "Secure. records", null, null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) - return - var/counter = 1 - while(active2.fields[text("com_[]", counter)]) - counter++ - active2.fields[text("com_[counter]")] = text("Made by [authenticated] ([rank]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]
[t1]") - - if("Delete Record (ALL)") - if(active1) - temp = "
Are you sure you wish to delete the record (ALL)?
" - temp += "Yes
" - temp += "No" - - if("Delete Record (Security)") - if(active2) - temp = "
Are you sure you wish to delete the record (Security Portion Only)?
" - temp += "Yes
" - temp += "No" - - if("Delete Entry") - if((istype(active2, /datum/data/record) && active2.fields[text("com_[]", href_list["del_c"])])) - active2.fields[text("com_[]", href_list["del_c"])] = "Deleted" -//RECORD CREATE - if("New Record (Security)") - if((istype(active1, /datum/data/record) && !( istype(active2, /datum/data/record) ))) - var/datum/data/record/R = new /datum/data/record() - R.fields["name"] = active1.fields["name"] - R.fields["id"] = active1.fields["id"] - R.name = text("Security Record #[]", R.fields["id"]) - R.fields["criminal"] = "None" - R.fields["mi_crim"] = "None" - R.fields["mi_crim_d"] = "No minor crime convictions." - R.fields["ma_crim"] = "None" - R.fields["ma_crim_d"] = "No major crime convictions." - R.fields["notes"] = "No notes." - data_core.security += R - active2 = R - screen = 3 - - if("New Record (General)") - var/datum/data/record/G = new /datum/data/record() - G.fields["name"] = "New Record" - G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) - G.fields["rank"] = "Unassigned" - G.fields["real_rank"] = "Unassigned" - G.fields["sex"] = "Male" - G.fields["age"] = "Unknown" - G.fields["fingerprint"] = "Unknown" - G.fields["p_stat"] = "Active" - G.fields["m_stat"] = "Stable" - G.fields["species"] = "Human" - data_core.general += G - active1 = G - active2 = null - -//FIELD FUNCTIONS - if("Edit Field") - var/a1 = active1 - var/a2 = active2 - switch(href_list["field"]) - if("name") - if(istype(active1, /datum/data/record)) - var/t1 = input("Please input name:", "Secure. records", active1.fields["name"], null) as text - if((!( t1 ) || !length(trim(t1)) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon)))) || active1 != a1) - return - active1.fields["name"] = t1 - if("id") - if(istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input id:", "Secure. records", active1.fields["id"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) - return - active1.fields["id"] = t1 - if("fingerprint") - if(istype(active1, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input fingerprint hash:", "Secure. records", active1.fields["fingerprint"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) - return - active1.fields["fingerprint"] = t1 - if("sex") - if(istype(active1, /datum/data/record)) - if(active1.fields["sex"] == "Male") - active1.fields["sex"] = "Female" - else - active1.fields["sex"] = "Male" - if("age") - if(istype(active1, /datum/data/record)) - var/t1 = input("Please input age:", "Secure. records", active1.fields["age"], null) as num - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) - return - active1.fields["age"] = t1 - if("mi_crim") - if(istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input minor crimes list:", "Secure. records", active2.fields["mi_crim"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) - return - active2.fields["mi_crim"] = t1 - if("mi_crim_d") - if(istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) - return - active2.fields["mi_crim_d"] = t1 - if("ma_crim") - if(istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please input major crimes list:", "Secure. records", active2.fields["ma_crim"], null) as text,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) - return - active2.fields["ma_crim"] = t1 - if("ma_crim_d") - if(istype(active2, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please summarize major crimes:", "Secure. records", active2.fields["ma_crim_d"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) - return - active2.fields["ma_crim_d"] = t1 - if("notes") - if(istype(active2, /datum/data/record)) - var/t1 = trim(sanitize(copytext(input("Please summarize minor crimes:", "Secure. records", active2.fields["mi_crim_d"], null) as message,1,MAX_MESSAGE_LEN))) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active2 != a2)) - return - active2.fields["notes"] = t1 - if("criminal") - if(istype(active2, /datum/data/record)) - temp = "
Criminal Status:
" - temp += "" - if("rank") - var/list/L = list( "Head of Personnel", "Captain", "AI" ) - //This was so silly before the change. Now it actually works without beating your head against the keyboard. /N - if((istype(active1, /datum/data/record) && L.Find(rank))) - temp = "
Rank:
" - temp += "
    " - for(var/rank in joblist) - temp += "
  • [rank]
  • " - temp += "
" - else - alert(usr, "You do not have the required rank to do this!") - if("species") - if(istype(active1, /datum/data/record)) - var/t1 = sanitize(copytext(input("Please enter race:", "General records", active1.fields["species"], null) as message,1,MAX_MESSAGE_LEN)) - if((!( t1 ) || !( authenticated ) || usr.stat || usr.restrained() || (!interactable() && (!istype(usr, /mob/living/silicon))) || active1 != a1)) - return - active1.fields["species"] = t1 - -//TEMPORARY MENU FUNCTIONS - else//To properly clear as per clear screen. - temp=null - switch(href_list["choice"]) - if("Change Rank") - if(active1) - active1.fields["rank"] = href_list["rank"] - if(href_list["rank"] in joblist) - active1.fields["real_rank"] = href_list["real_rank"] - - if("Change Criminal Status") - if(active2) - - switch(href_list["criminal2"]) - if("none") - active2.fields["criminal"] = "None" - if("arrest") - active2.fields["criminal"] = "*Arrest*" - if("incarcerated") - active2.fields["criminal"] = "Incarcerated" - if("parolled") - active2.fields["criminal"] = "Parolled" - if("released") - active2.fields["criminal"] = "Released" - for(var/mob/living/carbon/human/H in mob_list) - H.sec_hud_set_security_status() - - if("Delete Record (Security) Execute") - if(active2) - qdel(active2) - - if("Delete Record (ALL) Execute") - if(active1) - for(var/datum/data/record/R in data_core.medical) - if((R.fields["name"] == active1.fields["name"] || R.fields["id"] == active1.fields["id"])) - qdel(R) - else - qdel(active1) - if(active2) - qdel(active2) - else - temp = "This function does not appear to be working at the moment. Our apologies." - - //computer.updateUsrDialog() - interact() - return - -/obj/machinery/computer3/secure_data/emp_act(severity) - if(stat & (BROKEN|NOPOWER)) - ..(severity) - return - - for(var/datum/data/record/R in data_core.security) - if(prob(10/severity)) - switch(rand(1,6)) - if(1) - R.fields["name"] = "[pick(pick(first_names_male), pick(first_names_female))] [pick(last_names)]" - if(2) - R.fields["sex"] = pick("Male", "Female") - if(3) - R.fields["age"] = rand(5, 85) - if(4) - R.fields["criminal"] = pick("None", "*Arrest*", "Incarcerated", "Parolled", "Released") - if(5) - R.fields["p_stat"] = pick("*Unconcious*", "Active", "Physically Unfit") - if(6) - R.fields["m_stat"] = pick("*Insane*", "*Unstable*", "*Watch*", "Stable") - continue - - else if(prob(1)) - qdel(R) - continue - - ..(severity) - -/obj/machinery/computer3/secure_data/detective_computer - icon = 'icons/obj/computer.dmi' - icon_state = "messyfiles" diff --git a/code/modules/computer3/computers/station_alert.dm b/code/modules/computer3/computers/station_alert.dm deleted file mode 100644 index 82c57cc7ee5..00000000000 --- a/code/modules/computer3/computers/station_alert.dm +++ /dev/null @@ -1,96 +0,0 @@ -/obj/machinery/computer3/station_alert - default_prog = /datum/file/program/station_alert - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio) - icon_state = "frame-eng" - - -/datum/file/program/station_alert - name = "Station Alert Console" - desc = "Used to access the station's automated alert system." - active_state = "alert:0" - var/alarms = list("Fire"=list(), "Atmosphere"=list(), "Power"=list()) - - interact(mob/user) - if(!interactable()) - return - var/dat = "Current Station Alerts\n" - dat += "Close

" - for(var/cat in src.alarms) - dat += text("[]
\n", cat) - var/list/L = src.alarms[cat] - if(L.len) - for(var/alarm in L) - var/list/alm = L[alarm] - var/area/A = alm[1] - var/list/sources = alm[3] - dat += "" - dat += "• " - dat += "[A.name]" - if(sources.len > 1) - dat += text(" - [] sources", sources.len) - dat += "
\n" - else - dat += "-- All Systems Nominal
\n" - dat += "
\n" - //user << browse(dat, "window=alerts") - //onclose(user, "alerts") - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) - popup.open() - return - - - Topic(href, href_list) - if(..()) - return - return - - - proc/triggerAlarm(var/class, area/A, var/O, var/alarmsource) - var/list/L = src.alarms[class] - for(var/I in L) - if(I == A.name) - var/list/alarm = L[I] - var/list/sources = alarm[3] - if(!(alarmsource in sources)) - sources += alarmsource - return 1 - var/obj/machinery/camera/C = null - var/list/CL = null - if(O && istype(O, /list)) - CL = O - if(CL.len == 1) - C = CL[1] - else if(O && istype(O, /obj/machinery/camera)) - C = O - L[A.name] = list(A, (C) ? C : O, list(alarmsource)) - return 1 - - - proc/cancelAlarm(var/class, area/A as area, obj/origin) - var/list/L = src.alarms[class] - var/cleared = 0 - for(var/I in L) - if(I == A.name) - var/list/alarm = L[I] - var/list/srcs = alarm[3] - if(origin in srcs) - srcs -= origin - if(srcs.len == 0) - cleared = 1 - L -= I - return !cleared - - - - process() - var/active_alarms = 0 - for(var/cat in src.alarms) - var/list/L = src.alarms[cat] - if(L.len) active_alarms = 1 - if(active_alarms) - active_state = "alert:2" - else - active_state = "alert:0" - ..() - return diff --git a/code/modules/computer3/computers/welcome.dm b/code/modules/computer3/computers/welcome.dm deleted file mode 100644 index 203c5922289..00000000000 --- a/code/modules/computer3/computers/welcome.dm +++ /dev/null @@ -1,33 +0,0 @@ -/obj/machinery/computer3/laptop/vended - default_prog = /datum/file/program/welcome - - -/datum/file/program/welcome - name = "Welcome Screen" - desc = "First time boot splash screen" - active_state = "osod" - image = 'icons/ntos/program.png' - - - interact() - if(!interactable()) - return - var/dat = "" - dat += "
Welcome to NTOS
" - dat += "
Thank you for choosing NTOS, your gateway to the future of mobile computing technology, sponsored by Nanotrasen (R)

" - dat += "Getting started with NTOS:
" - dat += "To leave a current program, click the X button in the top right corner of the window. This will return you to the NTOS desktop. \ - From the desktop, you can open the hard drive, usually located in the top left corner to access all the programs installed on your computer. \ - When you rented your laptop, you were supplied with programs that your Nanotrasen Issued ID has given you access to use. \ - In the event of a serious error, the right click menu will give you the ability to reset your computer. To open and close your laptop, alt-click your device.\ - If you have any questions or technical issues, please contact your local computer technical experts at your local Central Command." - popup.set_content(dat) - popup.set_title_image(usr.browse_rsc_icon(computer.icon, computer.icon_state)) - popup.open() - return - - Topic(href, href_list) - if(!interactable() || ..(href,href_list)) - return - interact() - return \ No newline at end of file diff --git a/code/modules/computer3/file.dm b/code/modules/computer3/file.dm deleted file mode 100644 index 1cbb363894a..00000000000 --- a/code/modules/computer3/file.dm +++ /dev/null @@ -1,165 +0,0 @@ -// I am deciding that for sayustation's purposes directories are right out, -// we can't even get backpacks to work right with recursion, and that -// actually fucking matters. Metadata too, that can be added if ever needed. - -/* - Files are datums that can be stored in digital storage devices -*/ - -/datum/file - var/name = "File" - var/extension = "dat" - var/volume = 10 // in KB - var/image = 'icons/ntos/file.png' // determines the icon to use, found in icons/ntos - var/obj/machinery/computer3/computer // the parent computer, if fixed - var/obj/item/part/computer/storage/device // the device that is containing this file - var/hidden_file = 0 // Prevents file from showing up on NTOS program list. - var/drm = 0 // Copy protection, called by copy() and move() - var/readonly = 0 // Edit protection, called by edit(), which is just a failcheck proc - - proc/execute(var/datum/file/source) - return - - // - // Copy file to device. - // If you overwrite this function, use the return value to make sure it succeeded - // - proc/copy(var/obj/item/part/computer/storage/dest) - if(!computer || computer.crit_fail) return null - if(drm) - if(!computer.emagged) - return null - var/datum/file/F = new type() - if(!dest.addfile(F)) - return null // todo: arf here even though the player can't do a damn thing due to concurrency - return F - - // - // Move file to device - // Returns null on failure even though the existing file doesn't go away - // - proc/move(var/obj/item/part/computer/storage/dest) - if(!computer || computer.crit_fail) return null - if(drm) - if(!computer.emagged) - return null - var/obj/item/part/computer/storage/current = device - if(!dest.addfile(src)) - return null - current.removefile(src) - return src - - // - // Determines if the file is editable. This does not use the DRM flag, - // but instead the readonly flag. - // - - proc/edit() - if(!computer || computer.crit_fail) - return 0 - if(readonly && !computer.emagged) - return 0 // - return 1 - -/* - Centcom root authorization certificate - - Non-destructive, officially sanctioned. - Has the same effect on computers as an emag. -*/ -/datum/file/centcom_auth - name = "Centcom Root Access Token" - extension = "auth" - volume = 100 - copy() - return null - -/* - A file that contains information -*/ - -/datum/file/data - - var/content = "content goes here" - var/file_increment = 1 - var/binary = 0 // determines if the file can't be opened by editor - - // Set the content to a specific amount, increase filesize appropriately. - proc/set_content(var/text) - content = text - if(file_increment > 1) - volume = round(file_increment * length(text)) - - copy(var/obj/O) - var/datum/file/data/D = ..(O) - if(D) - D.content = content - D.readonly = readonly - - New() - if(content) - if(file_increment > 1) - volume = round(file_increment * length(content)) - -/* - A generic file that contains text -*/ - -/datum/file/data/text - name = "Text File" - extension = "txt" - image = 'icons/ntos/file.png' - content = "" - file_increment = 0.002 // 0.002 kilobytes per character (1024 characters per KB) - -/datum/file/data/text/ClownProphecy - name = "Clown Prophecy" - content = "HONKhHONKeHONKlHONKpHONKHONmKHONKeHONKHONKpHONKlHONKeHONKaHONKsHONKe" - - -/* - A file that contains research -*/ - -/datum/file/data/research - name = "Untitled Research" - binary = 1 - content = "Untitled Tier X Research" - var/datum/tech/stored // the actual tech contents - volume = 1440 - -/* - A file that contains genetic information -*/ - -/datum/file/data/genome - name = "Genetic Buffer" - binary = 1 - var/real_name = "Poop" - - -/datum/file/data/genome/SE - name = "Structural Enzymes" - -/datum/file/data/genome/UE - name = "Unique Enzymes" - -/* -the way genome computers now work, a subtype is the wrong way to do this; -it will no longer be picked up. You can change this later if you need to. -for now put it on a disk - -/datum/file/data/genome/UE/GodEmperorOfMankind - name = "G.E.M.K." - content = "066000033000000000AF00330660FF4DB002690" - label = "God Emperor of Mankind" -*/ -/datum/file/data/genome/UI - name = "Unique Identifier" - -/datum/file/data/genome/UI/UE - name = "Unique Identifier + Unique Enzymes" - -/datum/file/data/genome/cloning - name = "Cloning Data" - var/datum/data/record/record diff --git a/code/modules/computer3/laptop.dm b/code/modules/computer3/laptop.dm deleted file mode 100644 index 1eaf28de60d..00000000000 --- a/code/modules/computer3/laptop.dm +++ /dev/null @@ -1,199 +0,0 @@ -/* - Computer3 portable computer. - - Battery powered only; it does not use the APC network at all. - - When picked up, becomes an inert item. This item can be put in a recharger, - or set down and re-opened into the original machine. While closed, the computer - has the MAINT stat flag. If you want to ignore this, you will have to bitmask it out. - - The unused(?) alt+click will toggle laptops open and closed. If we find a better - answer for this in the future, by all means use it. I just don't want it limited - to the verb, which is SIGNIFICANTLY less accessible than shutting a laptop. - Ctrl-click would work for closing the machine, since it's anchored, but not for - opening it back up again. And obviously, I don't want to override shift-click. - There's no double-click because that's used in regular click events. Alt-click is the - only obvious one left. -*/ - - -/obj/item/device/laptop - name = "Laptop Computer" - desc = "A clamshell portable computer. It is closed." - icon = 'icons/obj/computer3.dmi' - icon_state = "laptop-closed" - item_state = "laptop-inhand" - pixel_x = 2 - pixel_y = -3 - w_class = 3 - - var/obj/machinery/computer3/laptop/stored_computer = null - - verb/open_computer() - set name = "Open Laptop" - set category = "Object" - set src in view(1) - - if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living)) - to_chat(usr, "You can't do that.") - return - - if(!Adjacent(usr)) - to_chat(usr, "You can't reach it.") - return - - if(!istype(loc,/turf)) - to_chat(usr, "[src] is too bulky! You'll have to set it down.") - return - - if(!stored_computer) - if(contents.len) - for(var/obj/O in contents) - O.forceMove(loc) - to_chat(usr, "\The [src] crumbles to pieces.") - spawn(5) - qdel(src) - return - - if(!stored_computer.manipulating) - stored_computer.manipulating = 1 - stored_computer.loc = loc - stored_computer.stat &= ~MAINT - stored_computer.update_icon() - loc = null - to_chat(usr, "You open \the [src].") - - spawn(5) - stored_computer.manipulating = 0 - qdel(src) - else - to_chat(usr, "You are already opening the computer!") - - - AltClick() - if(Adjacent(usr)) - open_computer() - - Destroy() - ..() - return QDEL_HINT_HARDDEL_NOW // Warning: GC'ing will cause the laptop to vanish when it next closes - -//Quickfix until Snapshot works out how he wants to redo power. ~Z -/obj/item/device/laptop/verb/eject_id() - set category = null - set name = "Eject ID Card" - set src in oview(1) - - if(stored_computer) - stored_computer.eject_id() - -/obj/machinery/computer3/laptop/verb/eject_id() - set category = null - set name = "Eject ID Card" - set src in oview(1) - - var/obj/item/part/computer/cardslot/C = locate() in src.contents - - if(!C) - to_chat(usr, "There is no card port on the laptop.") - return - - var/obj/item/weapon/card/id/card - if(C.reader) - card = C.reader - C.remove_reader(usr) - else if(C.writer) - card = C.writer - C.remove_writer(usr) - else - to_chat(usr, "There is nothing to remove from the laptop card port.") - return - - to_chat(usr, "You remove [card] from the laptop.") - - -/obj/machinery/computer3/laptop - name = "Laptop Computer" - desc = "A clamshell portable computer. It is open." - - icon_state = "laptop" - density = 0 - pixel_x = 2 - pixel_y = -3 - show_keyboard = 0 - - var/manipulating = 0 // To prevent disappearing bug - var/obj/item/device/laptop/portable = null - - New(var/L, var/built = 0) - if(!built && !battery) - battery = new /obj/item/weapon/stock_parts/cell(src) - ..(L,built) - - verb/close_computer() - set name = "Close Laptop" - set category = "Object" - set src in view(1) - - if(usr.stat || usr.restrained() || usr.lying || !istype(usr, /mob/living)) - to_chat(usr, "You can't do that.") - return - - if(!Adjacent(usr)) - to_chat(usr, "You can't reach it.") - return - - if(istype(loc,/obj/item/device/laptop)) - testing("Close closed computer") - return - if(!istype(loc,/turf)) - testing("Odd computer location: [loc] - close laptop") - return - - if(stat&BROKEN) - to_chat(usr, "\The [src] is broken! You can't quite get it closed.") - return - - if(!portable) - portable = new - portable.stored_computer = src - - if(!manipulating) - portable.forceMove(loc) - forceMove(portable) - stat |= MAINT - to_chat(usr, "You close \the [src].") - - auto_use_power() - if(stat&MAINT) - return - if(use_power && istype(battery) && battery.charge > 0) - if(use_power == 1) - battery.use(idle_power_usage) - else - battery.use(active_power_usage) - return 1 - return 0 - - use_power(var/amount, var/chan = -1) - if(battery && battery.charge > 0) - battery.use(amount) - - power_change() - if( !battery || battery.charge <= 0 ) - stat |= NOPOWER - else - stat &= ~NOPOWER - - Destroy() - if(istype(loc,/obj/item/device/laptop)) - var/obj/O = loc - spawn(5) - if(O) - qdel(O) - return ..() - - - AltClick() - if(Adjacent(usr)) - close_computer() diff --git a/code/modules/computer3/lapvend.dm b/code/modules/computer3/lapvend.dm deleted file mode 100644 index e77298dc35e..00000000000 --- a/code/modules/computer3/lapvend.dm +++ /dev/null @@ -1,420 +0,0 @@ -/obj/machinery/lapvend - name = "laptop vendor" - desc = "A generic vending machine." - icon = 'icons/obj/vending.dmi' - icon_state = "robotics" - layer = 2.9 - anchored = 1 - density = 1 - var/datum/browser/popup = null - var/obj/machinery/computer3/laptop/vended/newlap = null - var/obj/item/device/laptop/relap = null - var/vendmode = 0 - - - var/cardreader = 0 - var/floppy = 0 - var/radionet = 0 - var/camera = 0 - var/network = 0 - var/power = 0 - - -/obj/machinery/lapvend/New() - ..() - spawn(4) - power_change() - return - return - - -/obj/machinery/lapvend/blob_act() - if(prob(50)) - spawn(0) - qdel(src) - return - - return - - -/obj/machinery/lapvend/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(vendmode == 1) - if(istype(W, /obj/item/weapon/card)) - var/obj/item/weapon/card/I = W - scan_card(I) - vendmode = 0 - if(vendmode == 3) - if(istype(W,/obj/item/weapon/card)) - var/obj/item/weapon/card/I = W - reimburse(I) - vendmode = 0 - if(vendmode == 0) - if(istype(W, /obj/item/device/laptop)) - var/obj/item/device/laptop/L = W - relap = L - calc_reimburse(L) - usr.drop_item() - L.loc = src - vendmode = 3 - to_chat(usr, "You slot your [L.name] into \The [src.name]") - else - ..() - - -/obj/machinery/lapvend/attack_hand(mob/user) - if(..()) - return 1 - interact(user) - -/obj/machinery/lapvend/attack_ghost(mob/user) - interact(user) - -/obj/machinery/lapvend/interact(mob/user) - user.set_machine(src) - var/vendorname = (src.name) //import the machine's name - var/dat = "
[vendorname]


" //display the name, and added a horizontal rule - if(vendmode == 0) - dat += "
Please choose your laptop customization options

" - dat += "
Your comptuer will automatically be loaded with any programs you can use after the transaction is complete." - dat += "
Some programs will require additional components to be installed!


" - dat += "
HDD (Required) : Added

" - dat += "
Card Reader : Single (50) | Dual (125)
" - dat += "
Floppy Drive: Add (50)
" - dat += "
Radio Network card Add (50)
" - dat += "
Camera Card Add (100)
" - dat += "
Network card Area (75) Adjacent (50)Powernet (25)
" - dat += "
Power source upgrade
Extended (175) Unreal (250)" - - if(vendmode == 0 || vendmode == 1) - dat += "

Cart

" - dat += "Total: [total()]
" - if(cardreader == 1) - dat += "Card Reader: (single) (50)
" - else if(cardreader == 2) - dat += "Card Reader: (double) (125)
" - else - dat += "Card Reader: None
" - if(floppy == 0) - dat += "Floppy Drive: None
" - else - dat += "Floppy Drive: Added (50)
" - if(radionet == 1) - dat += "Radio Card: Added (50)
" - else - dat += "Radio Card: None
" - if(camera == 1) - dat += "Camera Card: Added (100)
" - else - dat += "Camera Card: None
" - if(network == 1) - dat += "Network card: Area (75)
" - else if(network == 2) - dat += "Network card: Adjacent (50)
" - else if(network == 3) - dat += "Network card: Powernet (25)
" - else - dat += "Network card: None
" - if(power == 0) - dat += "Power source: Regular
" - else if(power == 1) - dat += "Power source: Extended (175)
" - else - dat += "Power source: Unreal (250)
" - - if(vendmode == 0) - dat += "
Vend Laptop" - - if(vendmode == 1) - dat += "Please swipe your card to complete the transaction" - - if(vendmode == 3) - dat += "Please swipe your card to finish returning your computer
" - dat += "Cancel" - - - - - popup = new(user, "lapvend", name, 450, 500) - popup.set_content(dat) - popup.open() - return - - -/obj/machinery/lapvend/Topic(href, href_list) - if(..()) - return 1 - - usr.set_machine(src) - switch(href_list["choice"]) - if("single_add") - cardreader = 1 - if("dual_add") - cardreader = 2 - if("floppy_add") - floppy = 1 - if("radio_add") - radionet = 1 - if("camnet_add") - camera = 1 - if("area_add") - network = 1 - if("prox_add") - network = 2 - if("cable_add") - network = 3 - if("high_add") - power = 1 - if("super_add") - power = 2 - - if("single_rem" || "dual_rem") - cardreader = 0 - if("floppy_rem") - floppy = 0 - if("radio_rem") - radionet = 0 - if("camnet_rem") - camera = 0 - if("area_rem" || "prox_rem" || "cable_rem") - network = 0 - if("high_rem" || "super_rem") - power = 0 - - if("vend") - vendmode = 1 - - if("cancel") - relap.loc = src.loc - relap = null - vendmode = 0 - - src.updateUsrDialog() - return - - -/obj/machinery/lapvend/proc/vend() - if(cardreader > 0) - if(cardreader == 1) - newlap.spawn_parts += (/obj/item/part/computer/cardslot) - else - newlap.spawn_parts += (/obj/item/part/computer/cardslot/dual) - if(floppy == 1) - newlap.spawn_parts += (/obj/item/part/computer/storage/removable) - if(radionet == 1) - newlap.spawn_parts += (/obj/item/part/computer/networking/radio) - if(camera == 1) - newlap.spawn_parts += (/obj/item/part/computer/networking/cameras) - if(network == 1) - newlap.spawn_parts += (/obj/item/part/computer/networking/area) - if(network == 2) - newlap.spawn_parts += (/obj/item/part/computer/networking/prox) - if(network == 3) - newlap.spawn_parts += (/obj/item/part/computer/networking/cable) - if(power == 1) - qdel(newlap.battery) - newlap.battery = new /obj/item/weapon/stock_parts/cell/high(newlap) - if(power == 2) - qdel(newlap.battery) - newlap.battery = new /obj/item/weapon/stock_parts/cell/super(newlap) - - newlap.spawn_parts() - -/obj/machinery/lapvend/proc/scan_card(var/obj/item/weapon/card/I) - if(istype(I, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/C = I - visible_message("[usr] swipes a card through [src].") - if(vendor_account) - var/datum/money_account/D = attempt_account_access_nosec(C.associated_account_number) - if(D && D.security_level) - var/attempt_pin = input("Enter pin code", "Vendor transaction") as num - D = attempt_account_access(C.associated_account_number, attempt_pin, 2) - if(D) - var/transaction_amount = total() - if(transaction_amount <= D.money) - - //transfer the money - D.money -= transaction_amount - vendor_account.money += transaction_amount - - //Transaction logs - var/datum/transaction/T = new() - T.target_name = "[vendor_account.owner_name] (via [src.name])" - T.purpose = "Purchase of Laptop" - if(transaction_amount > 0) - T.amount = "([transaction_amount])" - else - T.amount = "[transaction_amount]" - T.source_terminal = src.name - T.date = current_date_string - T.time = worldtime2text() - D.transaction_log.Add(T) - // - T = new() - T.target_name = D.owner_name - T.purpose = "Purchase of Laptop" - T.amount = "[transaction_amount]" - T.source_terminal = src.name - T.date = current_date_string - T.time = worldtime2text() - vendor_account.transaction_log.Add(T) - - newlap = new /obj/machinery/computer3/laptop/vended(src.loc) - - choose_progs(C) - vend() - popup.close() - newlap.close_computer() - newlap = null - cardreader = 0 - floppy = 0 - radionet = 0 - camera = 0 - network = 0 - power = 0 - else - to_chat(usr, "[bicon(src)]You don't have that much money!") - else - to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") - else - to_chat(usr, "[bicon(src)]Unable to access vendor account. Please record the machine ID and call CentComm Support.") - -/obj/machinery/lapvend/proc/total() - var/total = 0 - - if(cardreader == 1) - total += 50 - if(cardreader == 2) - total += 125 - if(floppy == 1) - total += 50 - if(radionet == 1) - total += 50 - if(camera == 1) - total += 100 - if(network == 1) - total += 75 - if(network == 2) - total += 50 - if(network == 3) - total += 25 - if(power == 1) - total += 175 - if(power == 2) - total += 250 - - return total - -/obj/machinery/lapvend/proc/choose_progs(var/obj/item/weapon/card/id/C) - if((access_security in C.access) || (access_forensics_lockers in C.access)) - newlap.spawn_files += (/datum/file/program/secure_data) - newlap.spawn_files += (/datum/file/camnet_key) - newlap.spawn_files += (/datum/file/camnet_key/researchoutpost) - newlap.spawn_files += (/datum/file/camnet_key/miningoutpost) - newlap.spawn_files += (/datum/file/camnet_key/telecomms) - newlap.spawn_files += (/datum/file/program/security) - if(access_armory in C.access) - newlap.spawn_files += (/datum/file/program/prisoner) - if(access_atmospherics in C.access) - newlap.spawn_files += (/datum/file/program/atmos_alert) - if(access_change_ids in C.access) - newlap.spawn_files += (/datum/file/program/card_comp) - if(access_heads in C.access) - newlap.spawn_files += (/datum/file/program/communications) - if((access_medical in C.access) || (access_forensics_lockers in C.access)) //Gives detective the medical records program, but not the crew monitoring one. - newlap.spawn_files += (/datum/file/program/med_data) - if(access_medical in C.access) - newlap.spawn_files += (/datum/file/program/crew) - if(access_engine in C.access) - newlap.spawn_files += (/datum/file/program/powermon) - if(access_research in C.access) - newlap.spawn_files += (/datum/file/camnet_key/researchoutpost) - newlap.spawn_files += (/datum/file/camnet_key/research) - newlap.spawn_files += (/datum/file/camnet_key/anomalyisolation) - newlap.spawn_files += (/datum/file/camnet_key/toxins) - newlap.spawn_files += (/datum/file/camnet_key/telepad) -/* if(access_rd in C.access) - newlap.spawn_files += (/datum/file/program/borg_control) */ - if(access_cent_specops in C.access) - newlap.spawn_files += (/datum/file/camnet_key/ert) - newlap.spawn_files += (/datum/file/camnet_key/centcom) - newlap.spawn_files += (/datum/file/camnet_key/thunderdome) - newlap.spawn_files += (/datum/file/program/arcade) - newlap.spawn_files += (/datum/file/camnet_key/entertainment) - //Atlantis: Each laptop gets "invisible" program/security - REQUIRED for camnetkeys to work. - newlap.spawn_files += (/datum/file/program/security/hidden) - newlap.update_spawn_files() - -/obj/machinery/lapvend/proc/calc_reimburse(var/obj/item/device/laptop/L) - if(istype(L.stored_computer.cardslot,/obj/item/part/computer/cardslot)) - cardreader = 1 - if(istype(L.stored_computer.cardslot,/obj/item/part/computer/cardslot/dual)) - cardreader = 2 - if(istype(L.stored_computer.floppy,/obj/item/part/computer/storage/removable)) - floppy = 1 - if(istype(L.stored_computer.radio,/obj/item/part/computer/networking/radio)) - radionet = 1 - if(istype(L.stored_computer.camnet,/obj/item/part/computer/networking/cameras)) - camera = 1 - if(istype(L.stored_computer.net,/obj/item/part/computer/networking/area)) - network = 1 - if(istype(L.stored_computer.net,/obj/item/part/computer/networking/prox)) - network = 2 - if(istype(L.stored_computer.net,/obj/item/part/computer/networking/cable)) - network = 3 - if(istype(L.stored_computer.battery, /obj/item/weapon/stock_parts/cell/high)) - power = 1 - if(istype(L.stored_computer.battery, /obj/item/weapon/stock_parts/cell/super)) - power = 2 - - - -/obj/machinery/lapvend/proc/reimburse(var/obj/item/weapon/card/I) - if(istype(I, /obj/item/weapon/card/id)) - var/obj/item/weapon/card/id/C = I - visible_message("[usr] swipes a card through [src].") - if(vendor_account) - var/attempt_pin = input("Enter pin code", "Vendor transaction") as num - var/datum/money_account/D = attempt_account_access(C.associated_account_number, attempt_pin, 2) - if(D) - var/transaction_amount = total() - - //transfer the money - D.money += transaction_amount - vendor_account.money -= transaction_amount - - //Transaction logs - var/datum/transaction/T = new() - T.target_name = "[vendor_account.owner_name] (via [src.name])" - T.purpose = "Return purchase of Laptop" - if(transaction_amount > 0) - T.amount = "([transaction_amount])" - else - T.amount = "[transaction_amount]" - T.source_terminal = src.name - T.date = current_date_string - T.time = worldtime2text() - D.transaction_log.Add(T) - // - T = new() - T.target_name = D.owner_name - T.purpose = "Return purchase of Laptop" - T.amount = "[transaction_amount]" - T.source_terminal = src.name - T.date = current_date_string - T.time = worldtime2text() - vendor_account.transaction_log.Add(T) - - qdel(relap) - - vendmode = 0 - cardreader = 0 - floppy = 0 - radionet = 0 - camera = 0 - network = 0 - power = 0 - - else - to_chat(usr, "[bicon(src)]Unable to access account. Check security settings and try again.") - else - to_chat(usr, "[bicon(src)]Unable to access vendor account. Please record the machine ID and call CentComm Support.") diff --git a/code/modules/computer3/networking.dm b/code/modules/computer3/networking.dm deleted file mode 100644 index f55a63b0718..00000000000 --- a/code/modules/computer3/networking.dm +++ /dev/null @@ -1,235 +0,0 @@ -/obj/item/part/computer/networking - name = "Computer networking component" - - /* - This is the public-facing proc used by NETUP. - It does additional checking before and after calling get_machines() - - */ - proc/connect_to(var/typekey,var/atom/previous) - if(!computer || computer.stat) - return null - - if(istype(previous,typekey) && verify_machine(previous)) - return previous - - var/result = get_machines(typekey) - - if(!result) - return null - - if(islist(result)) - var/list/R = result - if(R.len == 0) - return null - else if(R.len == 1) - return R[1] - else - var/list/atomlist = computer.format_atomlist(R) - result = input("Select:","Multiple destination machines located",atomlist[1]) as null|anything in atomlist - return atomlist[result] - - if(isobj(result)) - return result - - return null // ? - - /* - This one is used to determine the candidate machines. - It may return an object, a list of objects, or null. - - Overwite this on any networking component. - */ - proc/get_machines(var/typekey) - return list() - - /* - This is used to verify that an existing machine is within the network. - Calling NETUP() with an object argument will run this check, and if - the object is still accessible, it will be used. Otherwise, another - search will be run. - - Overwrite this on any networking component. - */ - proc/verify_machine(var/obj/previous) - return 0 - -/* - Provides radio/signaler functionality, and also - network-connects to anything on the same z-level - which is tuned to the same frequency. -*/ -/obj/item/part/computer/networking/radio - name = "Wireless networking component" - desc = "Radio module for computers" - - var/datum/radio_frequency/radio_connection = null - var/frequency = 1459 - var/filter = null - var/range = null - var/subspace = 0 - - init() - ..() - spawn(5) - radio_connection = radio_controller.add_object(src, src.frequency, src.filter) - - proc/set_frequency(new_frequency) - if(radio_controller) - radio_controller.remove_object(src, frequency) - frequency = new_frequency - radio_connection = radio_controller.add_object(src, frequency, filter) - else - frequency = new_frequency - spawn(rand(5,10)) - set_frequency(new_frequency) - - receive_signal(var/datum/signal/signal) - if(!signal || !computer || (computer.stat&~MAINT)) // closed laptops use maint, allow it - return - if(computer.program) - computer.program.receive_signal(signal) - - proc/post_signal(var/datum/signal/signal) - if(!computer || (computer.stat&~MAINT) || !computer.program) return - if(!radio_connection) return - - radio_connection.post_signal(src,signal,filter,range) - - get_machines(var/typekey) - if(!radio_connection || !radio_connection.frequency) - return list() - var/list/result = list() - var/turf/T = get_turf(loc) - var/z_level = T.z - for(var/obj/O in radio_connection.devices) - if(istype(O,typekey)) - T = get_turf(O) - // TODO: Make the radio system cooperate with the space manager - if(istype(O) && (subspace || (O.z == z_level))) // radio does not work across z-levels - result |= O - return result - - verify_machine(var/obj/previous) - if(!previous) return 0 - if(subspace) - return ( radio_connection && (previous in radio_connection.devices) ) - else - var/turf/T = get_turf(loc) - var/turf/O = get_turf(previous) - if(!T || !O) - return 0 - return ( radio_connection && (previous in radio_connection.devices) && (T.z == O.z)) - -/* - Subspace networking: Communicates off-station. Allows centcom communications. -*/ -/obj/item/part/computer/networking/radio/subspace - name = "subspace networking terminal" - desc = "Communicates long distances and through spatial anomalies." - subspace = 1 - -/* - APC (/area) networking -*/ - -/obj/item/part/computer/networking/area - name = "short-wave networking terminal" - desc = "Connects to nearby computers through the area power network" - - get_machines(var/typekey) - var/area/A = get_area(loc) - if(!istype(A) || A == /area) - return list() - if(typekey == null) - typekey = /obj/machinery - var/list/machines = list() - for(var/obj/O in A.contents) - if(istype(O,typekey)) - machines |= O - return machines - verify_machine(var/obj/previous) - if(!previous) return 0 - var/area/A = get_area(src) - if( A && A == get_area(previous) ) - return 1 - return 0 - -/* - Proximity networking: Connects to machines or computers adjacent to this device -*/ -/obj/item/part/computer/networking/prox - name = "proximity networking terminal" - desc = "Connects a computer to adjacent machines" - - get_machines(var/typekey) - var/turf/T = get_turf(loc) - if(!istype(T)) - return list() - if(typekey == null) - typekey = /obj/machinery - var/list/machines = list() - for(var/d in cardinal) - var/turf/T2 = get_step(T,d) - for(var/obj/O in T2) - if(istype(O,typekey)) - machines += O - return machines - - verify_machine(var/obj/previous) - if(!previous) - return 0 - if(get_dist(get_turf(previous),get_turf(loc)) == 1) - return 1 - return 0 -/* - Cable networking: Not currently used -*/ - -/obj/item/part/computer/networking/cable - name = "cable networking terminal" - desc = "Connects to other machines on the same cable network." - - get_machines(var/typekey) -// if(istype(computer,/obj/machinery/computer/laptop)) // laptops move, this could get breaky -// return list() - var/turf/T = get_turf(loc) - var/datum/powernet/P = null - for(var/obj/structure/cable/C in T) - if(C.d1 == 0) - P = C.powernet - break - if(!P) - return list() - if(!typekey) - typekey = /obj/machinery - else if(typekey == /datum/powernet) - return list(P) - var/list/candidates = list() - for(var/atom/A in P.nodes) - if(istype(A,typekey)) - candidates += A - else if(istype(A,/obj/machinery/power/terminal)) - var/obj/machinery/power/terminal/PT = A - if(istype(PT.master,typekey)) - candidates += PT.master - return candidates - - verify_machine(var/obj/previous) - if(!previous) - return 0 - var/turf/T = get_turf(loc) - var/datum/powernet/P = null - for(var/obj/structure/cable/C in T) - if(C.d1 == 0) - P = C.powernet - break - if(istype(previous,/datum/powernet)) - if(previous == P) - return 1 - return 0 - T = get_turf(previous.loc) - for(var/obj/structure/cable/C in T) - if(C.d1 == 0 && (C.powernet == P)) - return 1 - return 0 diff --git a/code/modules/computer3/program.dm b/code/modules/computer3/program.dm deleted file mode 100644 index f1f68c0890d..00000000000 --- a/code/modules/computer3/program.dm +++ /dev/null @@ -1,404 +0,0 @@ - -/* -Programs are a file that can be executed -*/ - -/datum/file/program - name = "Untitled" - extension = "prog" - image = 'icons/ntos/program.png' - var/desc = "An unidentifiable program." - - var/image/overlay = null // Icon to be put on top of the computer frame. - - var/active_state = "generic" // the icon_state that the computer goes to when the program is active - - drm = 0 // prevents a program from being copied - var/refresh = 0 // if true, computer does screen updates during process(). - var/error = 0 // set by background programs so an error pops up when used - - var/human_controls = 0 // if true, non-human animals cannot interact with this program (monkeys, xenos, etc) - var/ai_allowed = 1 // if true, silicon mobs (AI/cyborg) are allowed to use this program. - - var/datum/browser/popup = null - - // ID access: Note that computer3 does not normally check your ID. - // By default this is only really used for inserted cards. - var/list/req_access = list() // requires all of these UNLESS below succeeds - var/list/req_one_access = list() // requires one of these - - -/datum/file/program/New() - ..() - if(!active_state) - active_state = "generic" - overlay = image('icons/obj/computer3.dmi',icon_state = active_state) - - -/datum/file/program/proc/decode(text) - //adds line breaks - text = replacetext(text, "\n","
") - return text - - - -/datum/file/program/execute(var/datum/file/source) - if(computer && !computer.stat) - computer.program = src - computer.req_access = req_access - computer.req_one_access = req_one_access - update_icon() - computer.update_icon() - if(usr) - usr << browse(null, "window=\ref[computer]") - computer.attack_hand(usr) - - ..() - -/* - Standard Topic() for links -*/ - -/datum/file/program/Topic(href, href_list) - return - -/* - The computer object will transfer all empty-hand calls to the program (this includes AIs, Cyborgs, and Monkies) -*/ -/datum/file/program/proc/interact() - return - -/* - Standard receive_signal() -*/ - -/datum/file/program/proc/receive_signal(var/datum/signal/signal) - return -/* - The computer object will transfer all attackby() calls to the program - If the item is a valid interactable object, return 1. Else, return 0. - This helps identify what to use to actually hit the computer with, and - what can be used to interact with it. - - Screwdrivers will, by default, never call program/attackby(). That's used - for deconstruction instead. -*/ - - -/datum/file/program/proc/attackby(O as obj, user as mob, params) - return - -/* - Try not to overwrite this proc, I'd prefer we stayed - with interact() as the main proc -*/ -/datum/file/program/proc/attack_hand(mob/user as mob) - usr = user - interact() - -/* - Called when the computer is rebooted or the program exits/restarts. - Be sure not to save any work. Do NOT start the program again. - If it is the os, the computer will run it again automatically. - - Also, we are deleting the browser window on the chance that this is happening - when the computer is damaged or disassembled, causing us to lose our computer. - The popup window's title is a reference to the computer, making it unique, so - it could introduce bugs in that case. -*/ -/datum/file/program/proc/Reset() - error = 0 - update_icon() - if(popup) - popup.close() - qdel(popup) - return - -/* - The computer object will transfer process() calls to the program. -*/ -/datum/file/program/proc/process() - if(refresh && computer && !computer.stat) - computer.updateDialog() - update_icon() - -/datum/file/program/proc/update_icon() - return - -/datum/file/program/proc/check_access(obj/item/I) - if( (!istype(req_access) || !req_access.len) && (!istype(req_one_access) || !req_one_access.len) ) //no requirements - return 1 - - if(!I) - return 0 - - var/list/iAccess = I.GetAccess() - if(!iAccess || !iAccess.len) - return 0 - - var/list/temp = req_one_access & iAccess - if(temp.len) // a required access in item access list - return 1 - temp = req_access - iAccess - if(temp.len) // a required access not in item access list - return 0 - return 1 - - -/* - Because this does sanity checks I have added the code to make a popup here. - It also does sanity checks there that should prevent some edge case madness. -*/ -/datum/file/program/proc/interactable(var/mob/user = usr) - if(computer && computer.interactable(user)) - if(!popup) - popup = new(user, "\ref[computer]", name, nref=src) - popup.set_title_image(usr.browse_rsc_icon(overlay.icon, overlay.icon_state)) - popup.set_title_buttons(topic_link(src,"quit","")) - if(popup.user != user) - popup.user = user - popup.set_title_image(usr.browse_rsc_icon(overlay.icon, overlay.icon_state)) - popup.set_title(name) - return 1 - return 0 - - -/datum/file/program/proc/fake_link(var/text) - return "[text]" - -/* - Meant for text (not icons) - - lists all installed drives and their files - - I am NOT adding a computer sanity check here, - because why the flying fuck would you get to this - proc before having run it at least once? - If you cause runtimes with this function - may the shame of all ages come upon you. -*/ -/datum/file/program/proc/list_all_files_by_drive(var/typekey,var/linkop = "runfile") - var/dat = "" - if(!typekey) typekey = /datum/file - if(computer.hdd) - dat += "

[computer.hdd]

" - for(var/datum/file/F in computer.hdd.files) - if(istype(F,typekey)) - dat += topic_link(src,"[linkop]=\ref[F]",F.name) + "
" - if(computer.hdd.files.len == 0) - dat += "No files
" - dat += "
" - - if(computer.floppy) - if(!computer.floppy.inserted) - dat += "

[computer.floppy] - Eject



" - else - dat += "

[computer.floppy] - [topic_link(src,"eject_disk","Eject")]

" - for(var/datum/file/F in computer.floppy.inserted.files) - dat += topic_link(src,"[linkop]=\ref[F]",F.name) + "
" - if(computer.floppy.inserted.files.len == 0) - dat += "No files
" - dat += "
" - - if(computer.cardslot && istype(computer.cardslot.reader,/obj/item/weapon/card/data)) - dat += "

[computer.cardslot.reader] - [topic_link(src,"eject_card=reader","Eject")]

" - var/obj/item/weapon/card/data/D = computer.cardslot.reader - for(var/datum/file/F in D.files) - dat += topic_link(src,"[linkop]=\ref[F]",F.name) + "
" - if(D.files.len == 0) - dat += "No files
" - return dat - -// You don't NEED to use this version of topic() for this, you can do it yourself if you prefer -// If you do, do the interactable() check first, please, I don't want to repeat it here. It's not hard. -/datum/file/program/Topic(var/href,var/list/href_list) - if(!computer) - return 0 - - // - // usage: eject_disk - // only functions if there is a removable drive - // - if("eject_disk" in href_list) - if(computer.floppy) - computer.floppy.eject_disk() - return 1 - // - // usage: eject_card | eject_card=reader | eject_card=writer - // only functions if there is a cardslot - // - if("eject_card" in href_list) - if(computer.cardslot) - if(computer.cardslot.dualslot && href_list["eject_card"] == "writer") - computer.cardslot.remove(computer.cardslot.writer) - else - computer.cardslot.remove(computer.cardslot.reader) - return 1 - // - // usage: runfile=\ref[file] - // executes the file - // - if("runfile" in href_list) - var/datum/file/F = locate(href_list["runfile"]) - if(istype(F) && F.computer == computer) - F.execute(src) - return 1 - - if("close" in href_list) - usr.unset_machine() - popup.close() - return 1 - // - // usage: quit - // unloads the program, returning control to the OS - // - if("quit" in href_list) - computer.program = null - usr << browse(null,"window=\ref[computer]") // ntos will need to resize the window - computer.update_icon() - computer.updateDialog() - return 1 - return 0 - - -/datum/file/program/RD - name = "R&D Manager" - image = 'icons/ntos/research.png' - desc = "A software suit for generic research and development machinery interaction. Comes pre-packaged with extensive cryptographic databanks for secure connections with external devices." - active_state = "rdcomp" - volume = 11000 - -/datum/file/program/RDserv - name = "R&D Server" - image = 'icons/ntos/server.png' - active_state = "rdcomp" - volume = 9000 - -/datum/file/program/SuitSensors - name = "Crew Monitoring" - image = 'icons/ntos/monitoring.png' - active_state = "crew" - volume = 3400 - -/datum/file/program/Genetics - name = "Genetics Suite" - image = 'icons/ntos/genetics.png' - desc = "A sophisticated software suite containing read-only genetics hardware specifications and a highly compressed genome databank." - active_state = "dna" - volume = 8000 - -/datum/file/program/Cloning - name = "Cloning Platform" - image = 'icons/ntos/cloning.png' - desc = "A software platform for accessing external cloning apparatus." - active_state = "dna" - volume = 7000 - -/datum/file/program/TCOMmonitor - name = "TComm Monitor" - image = 'icons/ntos/tcomms.png' - active_state = "comm_monitor" - volume = 5500 - -/datum/file/program/TCOMlogs - name = "TComm Log View" - image = 'icons/ntos/tcomms.png' - active_state = "comm_logs" - volume = 5230 - -/datum/file/program/TCOMtraffic - name = "TComm Traffic" - image = 'icons/ntos/tcomms.png' - active_state = "generic" - volume = 8080 - -/datum/file/program/securitycam - name = "Sec-Cam Viewport" - image = 'icons/ntos/camera.png' - drm = 1 - active_state = "cameras" - volume = 2190 - -/datum/file/program/securityrecords - name = "Security Records" - image = 'icons/ntos/records.png' - drm = 1 - active_state = "security" - volume = 2520 - -/datum/file/program/medicalrecords - name = "Medical Records" - image = 'icons/ntos/medical.png' - drm = 1 - active_state = "medcomp" - volume = 5000 - -/datum/file/program/SMSmonitor - name = "Messaging Monitor" - image = 'icons/ntos/pda.png' - active_state = "comm_monitor" - volume = 3070 - -/datum/file/program/OperationMonitor - name = "OR Monitor" - image = 'icons/ntos/operating.png' - active_state = "operating" - volume = 4750 - -/datum/file/program/PodLaunch - name = "Pod Launch" - active_state = "computer_generic" - volume = 520 - -/datum/file/program/powermon - name = "Power Grid" - image = 'icons/ntos/power.png' - active_state = "power" - volume = 7200 - -/datum/file/program/prisoner - name = "Prisoner Control" - image = 'icons/ntos/prison.png' - drm = 1 - active_state = "power" - volume = 5000 -/* -/datum/file/program/borg_control - name = "Cyborg Maint" - image = 'icons/ntos/borgcontrol.png' - active_state = "robot" - volume = 9050 */ - -/datum/file/program/AIupload - name = "AI Upload" - image = 'icons/ntos/aiupload.png' - active_state = "command" - volume = 5000 - -/datum/file/program/Cyborgupload - name = "Cyborg Upload" - image = 'icons/ntos/borgupload.png' - active_state = "command" - volume = 5000 - -/datum/file/program/Exosuit - name = "Exosuit Monitor" - image = 'icons/ntos/exocontrol.png' - active_state = "mecha" - volume = 7000 - -/datum/file/program/EmergencyShuttle - name = "Shuttle Console" - active_state = "shuttle" - volume = 10000 - -/datum/file/program/Stationalert - name = "Alert Monitor" - image = 'icons/ntos/alerts.png' - active_state = "computer_generic" - volume = 10150 - - - - - - diff --git a/code/modules/computer3/program_disks.dm b/code/modules/computer3/program_disks.dm deleted file mode 100644 index 64b592b06be..00000000000 --- a/code/modules/computer3/program_disks.dm +++ /dev/null @@ -1,30 +0,0 @@ -/obj/item/weapon/disk/file/arcade - name = "Arcade game grab pack" - desc = "A program install disk." - spawn_files = list(/datum/file/program/arcade,/datum/file/program/arcade,/datum/file/program/arcade,/datum/file/program/arcade) - -/*/obj/item/weapon/disk/file/aifixer - name = "AI System Integrity Restorer" - desc = "A program install disk." - spawn_files = list(/datum/file/program/aifixer)*/ - -/obj/item/weapon/disk/file/atmos_alert - name = "Atmospheric Alert Notifier" - desc = "A program install disk." - spawn_files = list(/datum/file/program/atmos_alert) - -/obj/item/weapon/disk/file/cameras - name = "Camera Viewer" - desc = "A program install disk." - spawn_files = list(/datum/file/program/security) - -/obj/item/weapon/disk/file/card - name = "ID Card Modifier" - desc = "A program install disk." - spawn_files = list(/datum/file/program/card_comp) -/* -/obj/item/weapon/disk/file/genetics - name = "Genetics & Cloning" - desc = "A program install disk." - spawn_files = list(/datum/file/program/cloning,/datum/file/program/dnascanner) -*/ diff --git a/code/modules/computer3/server.dm b/code/modules/computer3/server.dm deleted file mode 100644 index 9e32918feae..00000000000 --- a/code/modules/computer3/server.dm +++ /dev/null @@ -1,32 +0,0 @@ -/* - Todo: - I can probably get away with a global list on servers that contains database sort of stuff - (replacing the datacore probably) - with the justification that they loadbalance and duplicate data across each other. As long as - one server-type computer exists, the station will still have access to datacore-type info. - - I can doubtless use this for station alerts as well, which is good, because I was sort of - wondering how the hell I was going to port that. - - Also todo: Server computers should maybe generate heat the way the R&D server does? - At least the rack computer probably should. -*/ - -/obj/machinery/computer3/server - name = "server" - icon = 'icons/obj/computer3.dmi' - icon_state = "serverframe" - show_keyboard = 0 - -/obj/machinery/computer3/server/rack - name = "server rack" - icon_state = "rackframe" - - spawn_parts = list(/obj/item/part/computer/storage/hdd,/obj/item/part/computer/networking/radio/subspace) - - update_icon() - //overlays.Cut() - return - - attack_hand() // Racks have no screen, only AI can use them - return diff --git a/code/modules/computer3/storage.dm b/code/modules/computer3/storage.dm deleted file mode 100644 index acb569d3072..00000000000 --- a/code/modules/computer3/storage.dm +++ /dev/null @@ -1,185 +0,0 @@ -/* - Computer devices that can store programs, files, etc. -*/ - -/obj/item/part/computer/storage - name = "Storage Device" - desc = "A device used for storing and retrieving digital information." - - // storage capacity, kb - var/volume = 0 - var/max_volume = 64 // should be enough for anyone - - var/driveletter = null // drive letter according to the computer - - var/list/files = list() // a list of files in the memory (ALL files) - var/removeable = 0 // determinse if the storage device is a removable hard drive (ie floppy) - - - var/writeprotect = 0 // determines if the drive forbids writing. - // note that write-protect is hardware and does not respect emagging. - - var/list/spawnfiles = list()// For mappers, special drives, and data disks - - New() - ..() - if(islist(spawnfiles)) - if(removeable && spawnfiles.len) - var/obj/item/part/computer/storage/removable/R = src - R.inserted = new(src) - if(writeprotect) - R.inserted.writeprotect = 1 - for(var/typekey in spawnfiles) - addfile(new typekey(),1) - - // Add a file to the hard drive, returns 0 if failed - // forced is used when spawning files on a write-protect drive - proc/addfile(var/datum/file/F,var/forced = 0) - if(!F || crit_fail || (F in files)) - return 1 - if(writeprotect && !forced) - return 0 - if(volume + F.volume > max_volume) - if(!forced) - return 0 - max_volume = volume + F.volume - - files.Add(F) - volume += F.volume - F.computer = computer - F.device = src - return 1 - proc/removefile(var/datum/file/F,var/forced = 0) - if(!F || !(F in files)) - return 1 - if(writeprotect && !forced) - return 0 - - files -= F - volume -= F.volume - if(F.device == src) - F.device = null - F.computer = null - return 1 - - init(var/obj/machinery/computer/target) - computer = target - for(var/datum/file/F in files) - F.computer = computer - -/* - Standard hard drives for computers. Used in computer construction -*/ - -/obj/item/part/computer/storage/hdd - name = "Hard Drive" - max_volume = 25000 - icon_state = "hdd1" - - -/obj/item/part/computer/storage/hdd/big - name = "Big Hard Drive" - max_volume = 50000 - icon_state = "hdd2" - -/obj/item/part/computer/storage/hdd/gigantic - name = "Gigantic Hard Drive" - max_volume = 75000 - icon_state = "hdd3" - -/* - Removeable hard drives for portable storage -*/ - -/obj/item/part/computer/storage/removable - name = "Disk Drive" - max_volume = 3000 - removeable = 1 - - attackby_types = list(/obj/item/weapon/disk/file, /obj/item/weapon/pen) - var/obj/item/weapon/disk/file/inserted = null - - proc/eject_disk(var/forced = 0) - if(!forced) - return - files = list() - inserted.loc = computer.loc - if(usr) - if(!usr.get_active_hand()) - usr.put_in_active_hand(inserted) - else if(forced && !usr.get_inactive_hand()) - usr.put_in_inactive_hand(inserted) - for(var/datum/file/F in inserted.files) - F.computer = null - inserted = null - - - attackby(obj/O as obj, mob/user as mob, params) - if(inserted && istype(O,/obj/item/weapon/pen)) - to_chat(usr, "You use [O] to carefully pry [inserted] out of [src].") - eject_disk(forced = 1) - return - - if(istype(O,/obj/item/weapon/disk/file)) - if(inserted) - to_chat(usr, "There's already a disk in [src]!") - return - - to_chat(usr, "You insert [O] into [src].") - usr.drop_item() - O.loc = src - inserted = O - writeprotect = inserted.writeprotect - - files = inserted.files - for(var/datum/file/F in inserted.files) - F.computer = computer - - return - - ..() - - addfile(var/datum/file/F) - if(!F || !inserted) - return 0 - - if(F in inserted.files) - return 1 - - if(inserted.volume + F.volume > inserted.max_volume) - return 0 - - inserted.files.Add(F) - F.computer = computer - F.device = inserted - return 1 - -/* - Removable hard drive presents... - removeable disk! -*/ - -/obj/item/weapon/disk/file - //parent_type = /obj/item/part/computer/storage // todon't: do this - name = "Data Disk" - desc = "A device that can be inserted and removed into computers easily as a form of portable data storage. This one stores 1 Megabyte" - icon_state = "datadisk_arcade" - var/list/files - var/list/spawn_files = list() - var/writeprotect = 0 - var/volume = 0 - var/max_volume = 1028 - - - New() - ..() - icon_state = "datadisk[rand(0,6)]" - src.pixel_x = rand(-5, 5) - src.pixel_y = rand(-5, 5) - files = list() - if(istype(spawn_files)) - for(var/typekey in spawn_files) - var/datum/file/F = new typekey() - F.device = src - files += F - volume += F.volume diff --git a/code/modules/computer3/test_machines.dm b/code/modules/computer3/test_machines.dm deleted file mode 100644 index 53a96d6c057..00000000000 --- a/code/modules/computer3/test_machines.dm +++ /dev/null @@ -1,86 +0,0 @@ - -/obj/machinery/computer3/testing - spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert, - /datum/file/program/security,/datum/file/program/card_comp, - /datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications, - /datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon, - - /datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research, - /datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison) - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder, - /obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras, - /obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area) - New(var/L,var/built=0) - if(!built && !battery) - battery = new /obj/item/weapon/stock_parts/cell(src) - ..(L,built) - -/obj/machinery/computer3/laptop/testing - spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert, - /datum/file/program/security,/datum/file/program/card_comp, - /datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications, - /datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon, - - /datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research, - /datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison) - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder, - /obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras, - /obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area) - New(var/L,var/built=0) - if(!built && !battery) - battery = new /obj/item/weapon/stock_parts/cell/super(src) - ..(L,built) - -/obj/machinery/computer3/wall_comp/testing - spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert, - /datum/file/program/security,/datum/file/program/card_comp, - /datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications, - /datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon, - - /datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research, - /datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison) - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder, - /obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras, - /obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area) - New(var/L,var/built=0) - if(!built && !battery) - battery = new /obj/item/weapon/stock_parts/cell(src) - ..(L,built) - -/obj/machinery/computer3/server/testing - spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert, - /datum/file/program/security,/datum/file/program/card_comp, - /datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications, - /datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon, - - /datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research, - /datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison) - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder, - /obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras, - /obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area) - New(var/L,var/built=0) - if(!built && !battery) - battery = new /obj/item/weapon/stock_parts/cell(src) - ..(L,built) - -/obj/machinery/computer3/server/rack/testing - spawn_files = list(/datum/file/program/aifixer,/datum/file/program/arcade,/datum/file/program/atmos_alert, - /datum/file/program/security,/datum/file/program/card_comp, - /datum/file/program/borg_control,/datum/file/program/holodeck, /datum/file/program/communications, - /datum/file/program/crew,/datum/file/program/op_monitor, /datum/file/program/powermon, - - /datum/file/camnet_key,/datum/file/camnet_key/mining,/datum/file/camnet_key/entertainment,/datum/file/camnet_key/research, - /datum/file/camnet_key/bombrange,/datum/file/camnet_key/xeno,/datum/file/camnet_key/singulo,/datum/file/camnet_key/prison) - spawn_parts = list(/obj/item/part/computer/storage/hdd/big,/obj/item/part/computer/storage/removable,/obj/item/part/computer/ai_holder, - /obj/item/part/computer/networking/radio/subspace,/obj/item/part/computer/networking/cameras, - /obj/item/part/computer/cardslot/dual,/obj/item/part/computer/networking/area) - New(var/L,var/built=0) - if(!built && !battery) - battery = new /obj/item/weapon/stock_parts/cell(src) - ..(L,built) - -/obj/item/weapon/storage/box/testing_disks - New() - ..() - for(var/typekey in subtypesof(/obj/item/weapon/disk/file)) - new typekey(src) \ No newline at end of file diff --git a/code/modules/computer3/upload/lawfile.dm b/code/modules/computer3/upload/lawfile.dm deleted file mode 100644 index 7fcbac00663..00000000000 --- a/code/modules/computer3/upload/lawfile.dm +++ /dev/null @@ -1,29 +0,0 @@ -/* - Computer3 law changes: - - * Laws are a file type - * Connecting to the AI requires a network connection - * Connecting to a borg requires a radio or network. - -*/ - -/datum/file/ai_law - var/list/hacklaws = null - var/zerolaw = null - var/list/corelaws = null - var/list/auxlaws = null - - var/configurable = 0 - - // override this when you need to be able to alter the parameters of the lawset - proc/configure() - return - - execute(var/datum/file/program/source) - if(istype(usr,/mob/living/silicon)) - return - if(istype(source,/datum/file/program/ntos)) - if(configurable) - configure() - return - if(istype(source,/datum/file/program/upload/ai)) \ No newline at end of file diff --git a/code/modules/computer3/upload/programs.dm b/code/modules/computer3/upload/programs.dm deleted file mode 100644 index 34197f3bf69..00000000000 --- a/code/modules/computer3/upload/programs.dm +++ /dev/null @@ -1,13 +0,0 @@ -/* - Note that as with existing ai upload, this is not an interactive program. - That means that the work is done in execute() rather than interact() -*/ - -/datum/file/program/upload/ai - execute(var/datum/file/program/source) - if(!interactable() || istype(usr,/mob/living/silicon)) - return 0 - if(!computer.net) - to_chat(usr, "An indecipherable set of code flicks across the screen. Nothing else happens.") - return - var/list/results = computer.net.get_machines \ No newline at end of file diff --git a/icons/NTOS/airestore.png b/icons/NTOS/airestore.png deleted file mode 100644 index d8e5207bfbf..00000000000 Binary files a/icons/NTOS/airestore.png and /dev/null differ diff --git a/icons/NTOS/aiupload.png b/icons/NTOS/aiupload.png deleted file mode 100644 index 25a8d8694e3..00000000000 Binary files a/icons/NTOS/aiupload.png and /dev/null differ diff --git a/icons/NTOS/alerts.png b/icons/NTOS/alerts.png deleted file mode 100644 index d395428c7cd..00000000000 Binary files a/icons/NTOS/alerts.png and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_100.gif b/icons/NTOS/battery_icons/batt_100.gif deleted file mode 100644 index 72f04cff011..00000000000 Binary files a/icons/NTOS/battery_icons/batt_100.gif and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_20.gif b/icons/NTOS/battery_icons/batt_20.gif deleted file mode 100644 index cc56e28214f..00000000000 Binary files a/icons/NTOS/battery_icons/batt_20.gif and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_40.gif b/icons/NTOS/battery_icons/batt_40.gif deleted file mode 100644 index 5d03a30c18e..00000000000 Binary files a/icons/NTOS/battery_icons/batt_40.gif and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_5.gif b/icons/NTOS/battery_icons/batt_5.gif deleted file mode 100644 index eddcc6ae824..00000000000 Binary files a/icons/NTOS/battery_icons/batt_5.gif and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_60.gif b/icons/NTOS/battery_icons/batt_60.gif deleted file mode 100644 index 2a159b8e3c3..00000000000 Binary files a/icons/NTOS/battery_icons/batt_60.gif and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_80.gif b/icons/NTOS/battery_icons/batt_80.gif deleted file mode 100644 index 59efcb225e1..00000000000 Binary files a/icons/NTOS/battery_icons/batt_80.gif and /dev/null differ diff --git a/icons/NTOS/battery_icons/batt_none.gif b/icons/NTOS/battery_icons/batt_none.gif deleted file mode 100644 index 64aa24516b3..00000000000 Binary files a/icons/NTOS/battery_icons/batt_none.gif and /dev/null differ diff --git a/icons/NTOS/borgcontrol.png b/icons/NTOS/borgcontrol.png deleted file mode 100644 index 63e0815954c..00000000000 Binary files a/icons/NTOS/borgcontrol.png and /dev/null differ diff --git a/icons/NTOS/borgupload.png b/icons/NTOS/borgupload.png deleted file mode 100644 index dfb24cecfdb..00000000000 Binary files a/icons/NTOS/borgupload.png and /dev/null differ diff --git a/icons/NTOS/camera.png b/icons/NTOS/camera.png deleted file mode 100644 index a9a726b03d4..00000000000 Binary files a/icons/NTOS/camera.png and /dev/null differ diff --git a/icons/NTOS/cardcomp.png b/icons/NTOS/cardcomp.png deleted file mode 100644 index e7df0ab2071..00000000000 Binary files a/icons/NTOS/cardcomp.png and /dev/null differ diff --git a/icons/NTOS/cloning.png b/icons/NTOS/cloning.png deleted file mode 100644 index 6fa29425056..00000000000 Binary files a/icons/NTOS/cloning.png and /dev/null differ diff --git a/icons/NTOS/comms.png b/icons/NTOS/comms.png deleted file mode 100644 index e089889d930..00000000000 Binary files a/icons/NTOS/comms.png and /dev/null differ diff --git a/icons/NTOS/copyfile.png b/icons/NTOS/copyfile.png deleted file mode 100644 index 50c10b37578..00000000000 Binary files a/icons/NTOS/copyfile.png and /dev/null differ diff --git a/icons/NTOS/deletefile.png b/icons/NTOS/deletefile.png deleted file mode 100644 index ada175fad25..00000000000 Binary files a/icons/NTOS/deletefile.png and /dev/null differ diff --git a/icons/NTOS/drive.png b/icons/NTOS/drive.png deleted file mode 100644 index 69ca021f8b7..00000000000 Binary files a/icons/NTOS/drive.png and /dev/null differ diff --git a/icons/NTOS/exocontrol.png b/icons/NTOS/exocontrol.png deleted file mode 100644 index 101f32e44db..00000000000 Binary files a/icons/NTOS/exocontrol.png and /dev/null differ diff --git a/icons/NTOS/file.png b/icons/NTOS/file.png deleted file mode 100644 index 05556e01f80..00000000000 Binary files a/icons/NTOS/file.png and /dev/null differ diff --git a/icons/NTOS/folder.png b/icons/NTOS/folder.png deleted file mode 100644 index 05780bc651c..00000000000 Binary files a/icons/NTOS/folder.png and /dev/null differ diff --git a/icons/NTOS/foldermeta.png b/icons/NTOS/foldermeta.png deleted file mode 100644 index 0d7a26b943f..00000000000 Binary files a/icons/NTOS/foldermeta.png and /dev/null differ diff --git a/icons/NTOS/genetics.png b/icons/NTOS/genetics.png deleted file mode 100644 index 6f5b2320fc2..00000000000 Binary files a/icons/NTOS/genetics.png and /dev/null differ diff --git a/icons/NTOS/medical.png b/icons/NTOS/medical.png deleted file mode 100644 index a3b6a21b54b..00000000000 Binary files a/icons/NTOS/medical.png and /dev/null differ diff --git a/icons/NTOS/monitoring.png b/icons/NTOS/monitoring.png deleted file mode 100644 index a94910e48a0..00000000000 Binary files a/icons/NTOS/monitoring.png and /dev/null differ diff --git a/icons/NTOS/movefile.png b/icons/NTOS/movefile.png deleted file mode 100644 index 5b31c6c2a88..00000000000 Binary files a/icons/NTOS/movefile.png and /dev/null differ diff --git a/icons/NTOS/ntos.png b/icons/NTOS/ntos.png deleted file mode 100644 index 8b9d735cc99..00000000000 Binary files a/icons/NTOS/ntos.png and /dev/null differ diff --git a/icons/NTOS/operating.png b/icons/NTOS/operating.png deleted file mode 100644 index ab8f65ef7a8..00000000000 Binary files a/icons/NTOS/operating.png and /dev/null differ diff --git a/icons/NTOS/pda.png b/icons/NTOS/pda.png deleted file mode 100644 index c6b0bb00fb3..00000000000 Binary files a/icons/NTOS/pda.png and /dev/null differ diff --git a/icons/NTOS/power.png b/icons/NTOS/power.png deleted file mode 100644 index b2e4cc837f1..00000000000 Binary files a/icons/NTOS/power.png and /dev/null differ diff --git a/icons/NTOS/prison.png b/icons/NTOS/prison.png deleted file mode 100644 index a846fe00411..00000000000 Binary files a/icons/NTOS/prison.png and /dev/null differ diff --git a/icons/NTOS/program.png b/icons/NTOS/program.png deleted file mode 100644 index ac161287636..00000000000 Binary files a/icons/NTOS/program.png and /dev/null differ diff --git a/icons/NTOS/records.png b/icons/NTOS/records.png deleted file mode 100644 index eaaf68e50d1..00000000000 Binary files a/icons/NTOS/records.png and /dev/null differ diff --git a/icons/NTOS/research.png b/icons/NTOS/research.png deleted file mode 100644 index 5ebd63aafcc..00000000000 Binary files a/icons/NTOS/research.png and /dev/null differ diff --git a/icons/NTOS/server.png b/icons/NTOS/server.png deleted file mode 100644 index 6d96b114139..00000000000 Binary files a/icons/NTOS/server.png and /dev/null differ diff --git a/icons/NTOS/tb_close.png b/icons/NTOS/tb_close.png deleted file mode 100644 index b99a6d81542..00000000000 Binary files a/icons/NTOS/tb_close.png and /dev/null differ diff --git a/icons/NTOS/tcomms.png b/icons/NTOS/tcomms.png deleted file mode 100644 index a63b23c8dff..00000000000 Binary files a/icons/NTOS/tcomms.png and /dev/null differ diff --git a/paradise.dme b/paradise.dme index 90e484bf1e4..2b1a4cf4eda 100644 --- a/paradise.dme +++ b/paradise.dme @@ -1223,35 +1223,6 @@ #include "code\modules\clothing\under\jobs\engineering.dm" #include "code\modules\clothing\under\jobs\medsci.dm" #include "code\modules\clothing\under\jobs\security.dm" -#include "code\modules\computer3\bios.dm" -#include "code\modules\computer3\buildandrepair.dm" -#include "code\modules\computer3\component.dm" -#include "code\modules\computer3\computer.dm" -#include "code\modules\computer3\computer3_notes.dm" -#include "code\modules\computer3\file.dm" -#include "code\modules\computer3\laptop.dm" -#include "code\modules\computer3\networking.dm" -#include "code\modules\computer3\NTOS.dm" -#include "code\modules\computer3\program.dm" -#include "code\modules\computer3\program_disks.dm" -#include "code\modules\computer3\server.dm" -#include "code\modules\computer3\storage.dm" -#include "code\modules\computer3\computers\arcade.dm" -#include "code\modules\computer3\computers\atmos_alert.dm" -#include "code\modules\computer3\computers\camera.dm" -#include "code\modules\computer3\computers\card.dm" -#include "code\modules\computer3\computers\communications.dm" -#include "code\modules\computer3\computers\crew.dm" -#include "code\modules\computer3\computers\customs.dm" -#include "code\modules\computer3\computers\HolodeckControl.dm" -#include "code\modules\computer3\computers\law.dm" -#include "code\modules\computer3\computers\medical.dm" -#include "code\modules\computer3\computers\Operating.dm" -#include "code\modules\computer3\computers\power.dm" -#include "code\modules\computer3\computers\prisoner.dm" -#include "code\modules\computer3\computers\robot.dm" -#include "code\modules\computer3\computers\security.dm" -#include "code\modules\computer3\computers\welcome.dm" #include "code\modules\countdown\countdown.dm" #include "code\modules\crafting\craft.dm" #include "code\modules\crafting\guncrafting.dm"