mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 12:41:09 +01:00
Modular computers now use list of components (#20557)
* Bringing computers to the light side Bringing computers to the light side * Lighter and lighter Lighter and lighter * Missed some lists Missed some lists * Text to defines Text to defines * Last commit Last commit * How did this even get here How did this even get here * Removing bad stuff Removing bad stuff * Fixes verb adding and idle check Fixes verb adding and idle check
This commit is contained in:
@@ -36,22 +36,12 @@
|
||||
var/max_damage = 100 // Damage level at which the computer breaks apart.
|
||||
|
||||
// Important hardware (must be installed for computer to work)
|
||||
var/obj/item/weapon/computer_hardware/processor_unit/processor_unit // CPU. Without it the computer won't run. Better CPUs can run more programs at once.
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive // Hard Drive component of this computer. Stores programs and files.
|
||||
|
||||
var/obj/item/weapon/computer_hardware/battery/battery_module // Power cell connector. Power cell can be recharged.
|
||||
// OR
|
||||
var/obj/item/weapon/computer_hardware/recharger/recharger // Recharger. Can be used to recharge power cell or power the PC without it.
|
||||
|
||||
// Optional hardware (improves functionality, but is not critical for computer to work)
|
||||
var/obj/item/weapon/computer_hardware/network_card/network_card // Network Card component of this computer. Allows connection to NTNet.
|
||||
var/obj/item/weapon/computer_hardware/card_slot/card_slot // ID Card slot component of this computer.
|
||||
var/obj/item/weapon/computer_hardware/printer/printer // Printer component of this computer, for your everyday paperwork needs.
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/portable/portable_drive // Portable data storage
|
||||
|
||||
var/list/all_components = list()
|
||||
var/list/all_components // List of "connection ports" in this computer and the components with which they are plugged
|
||||
|
||||
var/list/idle_threads = list() // Idle programs on background. They still receive process calls but can't be interacted with.
|
||||
var/list/idle_threads // Idle programs on background. They still receive process calls but can't be interacted with.
|
||||
var/obj/physical = null // Object that represents our computer. It's used for Adjacent() and UI visibility checks.
|
||||
|
||||
|
||||
@@ -63,30 +53,48 @@
|
||||
physical = src
|
||||
..()
|
||||
|
||||
all_components = list()
|
||||
idle_threads = list()
|
||||
|
||||
/obj/item/device/modular_computer/Destroy()
|
||||
kill_program(forced = TRUE)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
for(var/H in all_components)
|
||||
var/obj/item/weapon/computer_hardware/CH = H
|
||||
var/obj/item/weapon/computer_hardware/CH = all_components[H]
|
||||
if(CH.holder == src)
|
||||
CH.holder = null
|
||||
qdel(CH)
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/device/modular_computer/proc/add_verb(var/path)
|
||||
switch(path)
|
||||
if(MC_CARD)
|
||||
verbs += /obj/item/device/modular_computer/proc/eject_id
|
||||
if(MC_SDD)
|
||||
verbs += /obj/item/device/modular_computer/proc/eject_disk
|
||||
|
||||
/obj/item/device/modular_computer/proc/remove_verb(path)
|
||||
switch(path)
|
||||
if(MC_CARD)
|
||||
verbs -= /obj/item/device/modular_computer/proc/eject_id
|
||||
if(MC_SDD)
|
||||
verbs -= /obj/item/device/modular_computer/proc/eject_disk
|
||||
|
||||
// Eject ID card from computer, if it has ID slot with card inside.
|
||||
/obj/item/device/modular_computer/verb/eject_id()
|
||||
/obj/item/device/modular_computer/proc/eject_id()
|
||||
set name = "Eject ID"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
if (usr.canUseTopic(src))
|
||||
proc_eject_id(usr)
|
||||
var/obj/item/weapon/computer_hardware/card_slot/card_slot = all_components[MC_CARD]
|
||||
if(usr.canUseTopic(src))
|
||||
card_slot.try_eject(, usr)
|
||||
|
||||
// Eject ID card from computer, if it has ID slot with card inside.
|
||||
/obj/item/device/modular_computer/verb/eject_disk()
|
||||
/obj/item/device/modular_computer/proc/eject_disk()
|
||||
set name = "Eject Data Disk"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
@@ -94,30 +102,10 @@
|
||||
if(issilicon(usr))
|
||||
return
|
||||
|
||||
if (usr.canUseTopic(src))
|
||||
proc_eject_disk(usr)
|
||||
|
||||
/obj/item/device/modular_computer/proc/proc_eject_id(mob/user, slot)
|
||||
if(!user)
|
||||
user = usr
|
||||
|
||||
if(!card_slot)
|
||||
user << "<span class='warning'>\The [src] does not have an ID card slot!</span>"
|
||||
return
|
||||
|
||||
card_slot.try_eject(slot, user)
|
||||
|
||||
/obj/item/device/modular_computer/proc/proc_eject_disk(mob/user)
|
||||
if(!user)
|
||||
user = usr
|
||||
|
||||
if(!portable_drive)
|
||||
user << "<span class='warning'>There is no data disk in \the [src]!</span>"
|
||||
return
|
||||
|
||||
var/obj/item/I = portable_drive
|
||||
if(uninstall_component(portable_drive, user))
|
||||
I.verb_pickup()
|
||||
if(usr.canUseTopic(src))
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/portable/portable_drive = all_components[MC_SDD]
|
||||
if(uninstall_component(portable_drive, usr))
|
||||
portable_drive.verb_pickup()
|
||||
|
||||
/obj/item/device/modular_computer/AltClick(mob/user)
|
||||
..()
|
||||
@@ -125,19 +113,24 @@
|
||||
return
|
||||
|
||||
if(user.canUseTopic(src))
|
||||
var/obj/item/weapon/computer_hardware/card_slot/card_slot = all_components[MC_CARD]
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/portable/portable_drive = all_components[MC_SDD]
|
||||
if(portable_drive)
|
||||
proc_eject_disk(user)
|
||||
if(uninstall_component(portable_drive, user))
|
||||
portable_drive.verb_pickup()
|
||||
else if(card_slot)
|
||||
proc_eject_id(user)
|
||||
card_slot.try_eject(, user)
|
||||
|
||||
|
||||
// Gets IDs/access levels from card slot. Would be useful when/if PDAs would become modular PCs.
|
||||
/obj/item/device/modular_computer/GetAccess()
|
||||
var/obj/item/weapon/computer_hardware/card_slot/card_slot = all_components[MC_CARD]
|
||||
if(card_slot)
|
||||
return card_slot.GetAccess()
|
||||
return ..()
|
||||
|
||||
/obj/item/device/modular_computer/GetID()
|
||||
var/obj/item/weapon/computer_hardware/card_slot/card_slot = all_components[MC_CARD]
|
||||
if(card_slot)
|
||||
return card_slot.GetID()
|
||||
return ..()
|
||||
@@ -208,10 +201,11 @@
|
||||
return
|
||||
|
||||
// If we have a recharger, enable it automatically. Lets computer without a battery work.
|
||||
var/obj/item/weapon/computer_hardware/recharger/recharger = all_components[MC_CHARGE]
|
||||
if(recharger)
|
||||
recharger.enabled = 1
|
||||
|
||||
if(processor_unit && use_power()) // use_power() checks if the PC is powered
|
||||
if(all_components[MC_CPU] && use_power()) // use_power() checks if the PC is powered
|
||||
if(issynth)
|
||||
user << "<span class='notice'>You send an activation signal to \the [src], turning it on.</span>"
|
||||
else
|
||||
@@ -265,6 +259,9 @@
|
||||
/obj/item/device/modular_computer/proc/get_header_data()
|
||||
var/list/data = list()
|
||||
|
||||
var/obj/item/weapon/computer_hardware/battery/battery_module = all_components[MC_CELL]
|
||||
var/obj/item/weapon/computer_hardware/recharger/recharger = all_components[MC_CHARGE]
|
||||
|
||||
if(battery_module && battery_module.battery)
|
||||
switch(battery_module.battery.percent())
|
||||
if(80 to 200) // 100 should be maximal but just in case..
|
||||
@@ -328,6 +325,7 @@
|
||||
|
||||
// Returns 0 for No Signal, 1 for Low Signal and 2 for Good Signal. 3 is for wired connection (always-on)
|
||||
/obj/item/device/modular_computer/proc/get_ntnet_status(specific_action = 0)
|
||||
var/obj/item/weapon/computer_hardware/network_card/network_card = all_components[MC_NET]
|
||||
if(network_card)
|
||||
return network_card.get_signal(specific_action)
|
||||
else
|
||||
@@ -336,6 +334,7 @@
|
||||
/obj/item/device/modular_computer/proc/add_log(text)
|
||||
if(!get_ntnet_status())
|
||||
return FALSE
|
||||
var/obj/item/weapon/computer_hardware/network_card/network_card = all_components[MC_NET]
|
||||
return ntnet_global.add_log(text, network_card)
|
||||
|
||||
/obj/item/device/modular_computer/proc/shutdown_computer(loud = 1)
|
||||
@@ -352,7 +351,7 @@
|
||||
/obj/item/device/modular_computer/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// Insert items into the components
|
||||
for(var/h in all_components)
|
||||
var/obj/item/weapon/computer_hardware/H = h
|
||||
var/obj/item/weapon/computer_hardware/H = all_components[h]
|
||||
if(H.try_insert(W, user))
|
||||
return
|
||||
|
||||
|
||||
@@ -6,32 +6,8 @@
|
||||
user << "<span class='warning'>This component is too large for \the [src]!</span>"
|
||||
return FALSE
|
||||
|
||||
if(istype(H, /obj/item/weapon/computer_hardware/hard_drive/portable) && portable_drive)
|
||||
user << "<span class='warning'>This computer's FDD is already occupied by \the [portable_drive].</span>"
|
||||
return FALSE
|
||||
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/processor_unit) && processor_unit)
|
||||
user << "<span class='warning'>This computer's CPU slot is already occupied by \the [processor_unit].</span>"
|
||||
return FALSE
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/hard_drive) && hard_drive)
|
||||
user << "<span class='warning'>This computer's data port is already occupied by \the [hard_drive].</span>"
|
||||
return FALSE
|
||||
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/battery) && battery_module)
|
||||
user << "<span class='warning'>This computer's power converter slot is already occupied by \the [battery_module].</span>"
|
||||
return FALSE
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/recharger) && recharger)
|
||||
user << "<span class='warning'>This computer's recharger slot is already occupied by \the [recharger].</span>"
|
||||
return FALSE
|
||||
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/card_slot) && card_slot)
|
||||
user << "<span class='warning'>This computer's card reader slot is already occupied by \the [card_slot].</span>"
|
||||
return FALSE
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/network_card) && network_card)
|
||||
user << "<span class='warning'>This computer's network card is already occupied by \the [network_card].</span>"
|
||||
return FALSE
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/printer) && printer)
|
||||
user << "<span class='warning'>This computer's printer slot is already occupied by \the [printer].</span>"
|
||||
if(all_components[H.device_type])
|
||||
user << "<span class='warning'>This computer's hardware slot is already occupied by \the [all_components[H.device_type]].</span>"
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -44,32 +20,12 @@
|
||||
if(user && !user.unEquip(H))
|
||||
return FALSE
|
||||
|
||||
if(istype(H, /obj/item/weapon/computer_hardware/hard_drive/portable))
|
||||
portable_drive = H
|
||||
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/processor_unit))
|
||||
processor_unit = H
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/hard_drive))
|
||||
hard_drive = H
|
||||
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/battery))
|
||||
battery_module = H
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/recharger))
|
||||
recharger = H
|
||||
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/card_slot))
|
||||
card_slot = H
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/network_card))
|
||||
network_card = H
|
||||
else if(istype(H, /obj/item/weapon/computer_hardware/printer))
|
||||
printer = H
|
||||
all_components[H.device_type] = H
|
||||
|
||||
user << "<span class='notice'>You install \the [H] into \the [src].</span>"
|
||||
H.forceMove(src)
|
||||
H.holder = src
|
||||
all_components |= H
|
||||
H.on_install(src, user)
|
||||
return TRUE
|
||||
|
||||
|
||||
// Uninstalls component.
|
||||
@@ -77,41 +33,22 @@
|
||||
if(H.holder != src) // Not our component at all.
|
||||
return FALSE
|
||||
|
||||
if(processor_unit == H)
|
||||
processor_unit = null
|
||||
if(hard_drive == H)
|
||||
hard_drive = null
|
||||
|
||||
if(battery_module == H)
|
||||
battery_module = null
|
||||
if(recharger == H)
|
||||
recharger = null
|
||||
|
||||
if(card_slot == H)
|
||||
card_slot = null
|
||||
if(network_card == H)
|
||||
network_card = null
|
||||
if(printer == H)
|
||||
printer = null
|
||||
if(portable_drive == H)
|
||||
portable_drive = null
|
||||
all_components.Remove(H.device_type)
|
||||
|
||||
user << "<span class='notice'>You remove \the [H] from \the [src].</span>"
|
||||
|
||||
H.forceMove(get_turf(src))
|
||||
H.holder = null
|
||||
all_components -= H
|
||||
H.on_remove(src, user)
|
||||
if(enabled && (!processor_unit || !hard_drive || !use_power()))
|
||||
if(enabled && !use_power())
|
||||
shutdown_computer()
|
||||
update_icon()
|
||||
return TRUE
|
||||
|
||||
|
||||
// Checks all hardware pieces to determine if name matches, if yes, returns the hardware piece, otherwise returns null
|
||||
/obj/item/device/modular_computer/proc/find_hardware_by_name(name)
|
||||
for(var/i in all_components)
|
||||
var/obj/O = i
|
||||
var/obj/O = all_components[i]
|
||||
if(O.name == name)
|
||||
return O
|
||||
return null
|
||||
|
||||
@@ -3,10 +3,14 @@
|
||||
if(check_power_override())
|
||||
return TRUE
|
||||
|
||||
var/obj/item/weapon/computer_hardware/recharger/recharger = all_components[MC_CHARGE]
|
||||
|
||||
if(recharger && recharger.check_functionality())
|
||||
if(recharger.use_power(amount))
|
||||
return TRUE
|
||||
|
||||
var/obj/item/weapon/computer_hardware/battery/battery_module = all_components[MC_CELL]
|
||||
|
||||
if(battery_module && battery_module.battery && battery_module.battery.charge)
|
||||
var/obj/item/weapon/stock_parts/cell/cell = battery_module.battery
|
||||
if(cell.use(amount * CELLRATE))
|
||||
@@ -17,6 +21,7 @@
|
||||
return FALSE
|
||||
|
||||
/obj/item/device/modular_computer/proc/give_power(amount)
|
||||
var/obj/item/weapon/computer_hardware/battery/battery_module = all_components[MC_CELL]
|
||||
if(battery_module && battery_module.battery)
|
||||
return battery_module.battery.give(amount)
|
||||
return 0
|
||||
@@ -34,6 +39,7 @@
|
||||
|
||||
// Handles power-related things, such as battery interaction, recharging, shutdown when it's discharged
|
||||
/obj/item/device/modular_computer/proc/handle_power()
|
||||
var/obj/item/weapon/computer_hardware/recharger/recharger = all_components[MC_CHARGE]
|
||||
if(recharger)
|
||||
recharger.process()
|
||||
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
|
||||
// We are still here, that means there is no program loaded. Load the BIOS/ROM/OS/whatever you want to call it.
|
||||
// This screen simply lists available programs and user may select them.
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD]
|
||||
if(!hard_drive || !hard_drive.stored_files || !hard_drive.stored_files.len)
|
||||
physical.visible_message("<span class='danger'>\The [src] beeps three times, it's screen displaying \"DISK ERROR\" warning.</span>")
|
||||
return // No HDD, No HDD files list or no stored files. Something is very broken.
|
||||
@@ -41,6 +42,7 @@
|
||||
/obj/item/device/modular_computer/ui_data(mob/user)
|
||||
var/list/data = get_header_data()
|
||||
data["programs"] = list()
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD]
|
||||
for(var/datum/computer_file/program/P in hard_drive.stored_files)
|
||||
var/running = 0
|
||||
if(P in idle_threads)
|
||||
@@ -55,6 +57,7 @@
|
||||
/obj/item/device/modular_computer/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD]
|
||||
switch(action)
|
||||
if("PC_exit")
|
||||
kill_program()
|
||||
@@ -64,7 +67,7 @@
|
||||
return 1
|
||||
if("PC_minimize")
|
||||
var/mob/user = usr
|
||||
if(!active_program || !processor_unit)
|
||||
if(!active_program || !all_components[MC_CPU])
|
||||
return
|
||||
|
||||
idle_threads.Add(active_program)
|
||||
@@ -112,7 +115,9 @@
|
||||
update_icon()
|
||||
return
|
||||
|
||||
if(idle_threads.len >= processor_unit.max_idle_programs+1)
|
||||
var/obj/item/weapon/computer_hardware/processor_unit/PU = all_components[MC_CPU]
|
||||
|
||||
if(idle_threads.len > PU.max_idle_programs)
|
||||
user << "<span class='danger'>\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error.</span>"
|
||||
return
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@
|
||||
CRASH("Inapropriate type passed to obj/item/device/modular_computer/processor/New()! Aborting.")
|
||||
return
|
||||
// Obtain reference to machinery computer
|
||||
all_components = list()
|
||||
idle_threads = list()
|
||||
machinery_computer = comp
|
||||
machinery_computer.cpu = src
|
||||
hardware_flag = machinery_computer.hardware_flag
|
||||
@@ -53,3 +55,17 @@
|
||||
..()
|
||||
machinery_computer.update_icon()
|
||||
return
|
||||
|
||||
/obj/item/device/modular_computer/processor/add_verb(path)
|
||||
switch(path)
|
||||
if(MC_CARD)
|
||||
machinery_computer.verbs += /obj/machinery/modular_computer/proc/eject_id
|
||||
if(MC_SDD)
|
||||
machinery_computer.verbs += /obj/machinery/modular_computer/proc/eject_disk
|
||||
|
||||
/obj/item/device/modular_computer/processor/remove_verb(path)
|
||||
switch(path)
|
||||
if(MC_CARD)
|
||||
machinery_computer.verbs -= /obj/machinery/modular_computer/proc/eject_id
|
||||
if(MC_SDD)
|
||||
machinery_computer.verbs -= /obj/machinery/modular_computer/proc/eject_disk
|
||||
@@ -1,4 +1,4 @@
|
||||
/obj/item/device/modular_computer/tablet
|
||||
/obj/item/device/modular_computer/tablet //Its called tablet for theme of 90ies but actually its a "big smartphone" sized
|
||||
name = "tablet computer"
|
||||
icon = 'icons/obj/modular_tablet.dmi'
|
||||
icon_state = "tablet"
|
||||
@@ -9,3 +9,4 @@
|
||||
max_hardware_size = 1
|
||||
w_class = 2
|
||||
steel_sheet_cost = 1
|
||||
slot_flags = SLOT_ID | SLOT_BELT
|
||||
@@ -30,8 +30,9 @@
|
||||
desc = "A stationary computer. This one comes preloaded with engineering programs."
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/engineering/install_programs()
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/power_monitor())
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/alarm_monitor())
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
hard_drive.store_file(new/datum/computer_file/program/power_monitor())
|
||||
hard_drive.store_file(new/datum/computer_file/program/alarm_monitor())
|
||||
|
||||
// ===== RESEARCH CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/research
|
||||
@@ -39,9 +40,10 @@
|
||||
desc = "A stationary computer. This one comes preloaded with research programs."
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/research/install_programs()
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/ntnetmonitor())
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer())
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
hard_drive.store_file(new/datum/computer_file/program/ntnetmonitor())
|
||||
hard_drive.store_file(new/datum/computer_file/program/nttransfer())
|
||||
hard_drive.store_file(new/datum/computer_file/program/chatclient())
|
||||
|
||||
|
||||
// ===== COMMAND CONSOLE =====
|
||||
@@ -52,8 +54,9 @@
|
||||
_has_printer = 1
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/command/install_programs()
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/card_mod())
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
hard_drive.store_file(new/datum/computer_file/program/chatclient())
|
||||
hard_drive.store_file(new/datum/computer_file/program/card_mod())
|
||||
|
||||
// ===== CIVILIAN CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/civilian
|
||||
@@ -61,6 +64,6 @@
|
||||
desc = "A stationary computer. This one comes preloaded with generic programs."
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/civilian/install_programs()
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/chatclient())
|
||||
cpu.hard_drive.store_file(new/datum/computer_file/program/nttransfer())
|
||||
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
hard_drive.store_file(new/datum/computer_file/program/chatclient())
|
||||
hard_drive.store_file(new/datum/computer_file/program/nttransfer())
|
||||
@@ -74,7 +74,7 @@ var/list/global_modular_computers = list()
|
||||
add_overlay("broken")
|
||||
|
||||
// Eject ID card from computer, if it has ID slot with card inside.
|
||||
/obj/machinery/modular_computer/verb/eject_id()
|
||||
/obj/machinery/modular_computer/proc/eject_id()
|
||||
set name = "Eject ID"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
@@ -83,7 +83,7 @@ var/list/global_modular_computers = list()
|
||||
cpu.eject_id()
|
||||
|
||||
// Eject ID card from computer, if it has ID slot with card inside.
|
||||
/obj/machinery/modular_computer/verb/eject_disk()
|
||||
/obj/machinery/modular_computer/proc/eject_disk()
|
||||
set name = "Eject Data Disk"
|
||||
set category = "Object"
|
||||
set src in view(1)
|
||||
@@ -109,8 +109,9 @@ var/list/global_modular_computers = list()
|
||||
|
||||
// Used in following function to reduce copypaste
|
||||
/obj/machinery/modular_computer/proc/power_failure(malfunction = 0)
|
||||
var/obj/item/weapon/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL]
|
||||
if(cpu && cpu.enabled) // Shut down the computer
|
||||
visible_message("<span class='danger'>\The [src]'s screen flickers [cpu.battery_module ? "\"BATTERY [malfunction ? "MALFUNCTION" : "CRITICAL"]\"" : "\"EXTERNAL POWER LOSS\""] warning as it shuts down unexpectedly.</span>")
|
||||
visible_message("<span class='danger'>\The [src]'s screen flickers [battery_module ? "\"BATTERY [malfunction ? "MALFUNCTION" : "CRITICAL"]\"" : "\"EXTERNAL POWER LOSS\""] warning as it shuts down unexpectedly.</span>")
|
||||
if(cpu)
|
||||
cpu.shutdown_computer(0)
|
||||
stat |= NOPOWER
|
||||
@@ -119,7 +120,7 @@ var/list/global_modular_computers = list()
|
||||
|
||||
// Modular computers can have battery in them, we handle power in previous proc, so prevent this from messing it up for us.
|
||||
/obj/machinery/modular_computer/power_change()
|
||||
if(cpu && cpu.use_power()) // If "CPU" still has a power source, PC wouldn't go offline.
|
||||
if(cpu && cpu.use_power()) // If MC_CPU still has a power source, PC wouldn't go offline.
|
||||
stat &= ~NOPOWER
|
||||
update_icon()
|
||||
return
|
||||
|
||||
@@ -22,29 +22,35 @@
|
||||
/obj/machinery/modular_computer/console/buildable/New()
|
||||
..()
|
||||
// User-built consoles start as empty frames.
|
||||
qdel(cpu.recharger)
|
||||
qdel(cpu.network_card)
|
||||
qdel(cpu.hard_drive)
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/network_card = cpu.all_components[MC_NET]
|
||||
var/obj/item/weapon/computer_hardware/hard_drive/recharger = cpu.all_components[MC_CHARGE]
|
||||
qdel(recharger)
|
||||
qdel(network_card)
|
||||
qdel(hard_drive)
|
||||
|
||||
/obj/machinery/modular_computer/console/New()
|
||||
..()
|
||||
if(cpu.battery_module)
|
||||
qdel(cpu.battery_module)
|
||||
var/obj/item/weapon/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL]
|
||||
if(battery_module)
|
||||
qdel(battery_module)
|
||||
|
||||
cpu.install_component(new /obj/item/weapon/computer_hardware/network_card/wired)
|
||||
var/obj/item/weapon/computer_hardware/network_card/wired/network_card = new()
|
||||
|
||||
cpu.install_component(network_card)
|
||||
cpu.install_component(new /obj/item/weapon/computer_hardware/recharger/APC)
|
||||
cpu.install_component(new /obj/item/weapon/computer_hardware/hard_drive/super) // Consoles generally have better HDDs due to lower space limitations
|
||||
|
||||
var/area/A = get_area(src)
|
||||
// Attempts to set this console's tag according to our area. Since some areas have stuff like "XX - YY" in their names we try to remove that too.
|
||||
if(A && console_department)
|
||||
cpu.network_card.identification_string = replacetext(replacetext(replacetext("[A.name] [console_department] Console", " ", "_"), "-", ""), "__", "_") // Replace spaces with "_"
|
||||
network_card.identification_string = replacetext(replacetext(replacetext("[A.name] [console_department] Console", " ", "_"), "-", ""), "__", "_") // Replace spaces with "_"
|
||||
else if(A)
|
||||
cpu.network_card.identification_string = replacetext(replacetext(replacetext("[A.name] Console", " ", "_"), "-", ""), "__", "_")
|
||||
network_card.identification_string = replacetext(replacetext(replacetext("[A.name] Console", " ", "_"), "-", ""), "__", "_")
|
||||
else if(console_department)
|
||||
cpu.network_card.identification_string = replacetext(replacetext(replacetext("[console_department] Console", " ", "_"), "-", ""), "__", "_")
|
||||
network_card.identification_string = replacetext(replacetext(replacetext("[console_department] Console", " ", "_"), "-", ""), "__", "_")
|
||||
else
|
||||
cpu.network_card.identification_string = "Unknown Console"
|
||||
network_card.identification_string = "Unknown Console"
|
||||
if(cpu)
|
||||
cpu.screen_on = 1
|
||||
update_icon()
|
||||
Reference in New Issue
Block a user