frontend
This commit is contained in:
@@ -39,7 +39,7 @@
|
||||
. += "It has a slot installed for an intelliCard which contains: [ai_slot.stored_card.name]"
|
||||
else
|
||||
. += "It has a slot installed for an intelliCard, which appears to be occupied."
|
||||
. += "<span class='info'>Alt-click to eject the intelliCard.</span>"
|
||||
. += span_info("Alt-click to eject the intelliCard.")
|
||||
else
|
||||
. += "It has a slot installed for an intelliCard."
|
||||
|
||||
@@ -55,7 +55,7 @@
|
||||
. += "It has [multiple_slots ? "two slots" : "a slot"] for identification cards installed[multiple_cards ? " which contain [first_ID] and [second_ID]" : ", one of which contains [first_ID ? first_ID : second_ID]"]."
|
||||
else
|
||||
. += "It has [multiple_slots ? "two slots" : "a slot"] for identification cards installed, [multiple_cards ? "both of which appear" : "and one of them appears"] to be occupied."
|
||||
. += "<span class='info'>Alt-click [src] to eject the identification card[multiple_cards ? "s":""].</span>"
|
||||
. += span_info("Alt-click [src] to eject the identification card[multiple_cards ? "s":""].")
|
||||
else
|
||||
. += "It has [multiple_slots ? "two slots" : "a slot"] installed for identification cards."
|
||||
|
||||
@@ -63,4 +63,4 @@
|
||||
if(printer_slot)
|
||||
. += "It has a printer installed."
|
||||
if(user_is_adjacent)
|
||||
. += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper].</span>"
|
||||
. += "The printer's paper levels are at: [printer_slot.stored_paper]/[printer_slot.max_paper].</span>]"
|
||||
|
||||
@@ -3,19 +3,19 @@
|
||||
return FALSE
|
||||
|
||||
if(H.w_class > max_hardware_size)
|
||||
to_chat(user, "<span class='warning'>This component is too large for \the [src]!</span>")
|
||||
to_chat(user, span_warning("This component is too large for \the [src]!"))
|
||||
return FALSE
|
||||
|
||||
if(H.expansion_hw)
|
||||
if(LAZYLEN(expansion_bays) >= max_bays)
|
||||
to_chat(user, "<span class='warning'>All of the computer's expansion bays are filled.</span>")
|
||||
to_chat(user, span_warning("All of the computer's expansion bays are filled."))
|
||||
return FALSE
|
||||
if(LAZYACCESS(expansion_bays, H.device_type))
|
||||
to_chat(user, "<span class='warning'>The computer immediately ejects /the [H] and flashes an error: \"Hardware Address Conflict\".</span>")
|
||||
to_chat(user, span_warning("The computer immediately ejects /the [H] and flashes an error: \"Hardware Address Conflict\"."))
|
||||
return FALSE
|
||||
|
||||
if(all_components[H.device_type])
|
||||
to_chat(user, "<span class='warning'>This computer's hardware slot is already occupied by \the [all_components[H.device_type]].</span>")
|
||||
to_chat(user, span_warning("This computer's hardware slot is already occupied by \the [all_components[H.device_type]]."))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
@@ -32,7 +32,7 @@
|
||||
LAZYSET(expansion_bays, H.device_type, H)
|
||||
all_components[H.device_type] = H
|
||||
|
||||
to_chat(user, "<span class='notice'>You install \the [H] into \the [src].</span>")
|
||||
to_chat(user, span_notice("You install \the [H] into \the [src]."))
|
||||
H.holder = src
|
||||
H.forceMove(src)
|
||||
H.on_install(src, user)
|
||||
@@ -47,14 +47,14 @@
|
||||
LAZYREMOVE(expansion_bays, H.device_type)
|
||||
all_components.Remove(H.device_type)
|
||||
|
||||
to_chat(user, "<span class='notice'>You remove \the [H] from \the [src].</span>")
|
||||
to_chat(user, span_notice("You remove \the [H] from \the [src]."))
|
||||
|
||||
H.forceMove(get_turf(src))
|
||||
H.holder = null
|
||||
H.on_remove(src, user)
|
||||
if(enabled && !use_power())
|
||||
shutdown_computer()
|
||||
update_icon()
|
||||
update_appearance()
|
||||
return TRUE
|
||||
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
/obj/item/modular_computer/proc/break_apart()
|
||||
if(!(flags_1 & NODECONSTRUCT_1))
|
||||
physical.visible_message("<span class='notice'>\The [src] breaks apart!</span>")
|
||||
physical.visible_message(span_notice("\The [src] breaks apart!"))
|
||||
var/turf/newloc = get_turf(src)
|
||||
new /obj/item/stack/sheet/metal(newloc, round(steel_sheet_cost/2))
|
||||
for(var/C in all_components)
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
if(cell.use(amount * GLOB.CELLRATE))
|
||||
return TRUE
|
||||
else // Discharge the cell anyway.
|
||||
cell.use(min(amount*GLOB.CELLRATE, cell.charge))
|
||||
cell.use(min(amount * GLOB.CELLRATE, cell.charge))
|
||||
return FALSE
|
||||
return FALSE
|
||||
|
||||
|
||||
@@ -13,6 +13,10 @@
|
||||
ui.close()
|
||||
return
|
||||
|
||||
// if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS))
|
||||
// to_chat(user, span_warning("Your fingers are too big to use this right now!"))
|
||||
// return
|
||||
|
||||
// Robots don't really need to see the screen, their wireless connection works as long as computer is on.
|
||||
if(!screen_on && !issilicon(user))
|
||||
if(ui)
|
||||
@@ -30,7 +34,7 @@
|
||||
// This screen simply lists available programs and user may select them.
|
||||
var/obj/item/computer_hardware/hard_drive/hard_drive = all_components[MC_HDD]
|
||||
if(!hard_drive || !hard_drive.stored_files || !hard_drive.stored_files.len)
|
||||
to_chat(user, "<span class='danger'>\The [src] beeps three times, it's screen displaying a \"DISK ERROR\" warning.</span>")
|
||||
to_chat(user, span_danger("\The [src] beeps three times, it's screen displaying a \"DISK ERROR\" warning."))
|
||||
return // No HDD, No HDD files list or no stored files. Something is very broken.
|
||||
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
@@ -111,7 +115,7 @@
|
||||
active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs
|
||||
|
||||
active_program = null
|
||||
update_icon()
|
||||
update_appearance()
|
||||
if(user && istype(user))
|
||||
ui_interact(user) // Re-open the UI on this computer. It should show the main screen now.
|
||||
if("eject_pen")
|
||||
@@ -132,7 +136,7 @@
|
||||
return
|
||||
|
||||
P.kill_program(forced = TRUE)
|
||||
to_chat(user, "<span class='notice'>Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed.</span>")
|
||||
to_chat(user, span_notice("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed."))
|
||||
|
||||
if("PC_runprogram")
|
||||
var/prog = params["name"]
|
||||
@@ -142,7 +146,7 @@
|
||||
P = hard_drive.find_file_by_name(prog)
|
||||
|
||||
if(!P || !istype(P)) // Program not found or it's not executable program.
|
||||
to_chat(user, "<span class='danger'>\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning.</span>")
|
||||
to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning."))
|
||||
return
|
||||
|
||||
P.computer = src
|
||||
@@ -156,22 +160,22 @@
|
||||
active_program = P
|
||||
P.alert_pending = FALSE
|
||||
idle_threads.Remove(P)
|
||||
update_icon()
|
||||
update_appearance()
|
||||
return
|
||||
|
||||
var/obj/item/computer_hardware/processor_unit/PU = all_components[MC_CPU]
|
||||
|
||||
if(idle_threads.len > PU.max_idle_programs)
|
||||
to_chat(user, "<span class='danger'>\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error.</span>")
|
||||
to_chat(user, span_danger("\The [src] displays a \"Maximal CPU load reached. Unable to run another program.\" error."))
|
||||
return
|
||||
|
||||
if(P.requires_ntnet && !get_ntnet_status(P.requires_ntnet_feature)) // The program requires NTNet connection, but we are not connected to NTNet.
|
||||
to_chat(user, "<span class='danger'>\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning.</span>")
|
||||
to_chat(user, span_danger("\The [src]'s screen shows \"Unable to connect to NTNet. Please retry. If problem persists contact your system administrator.\" warning."))
|
||||
return
|
||||
if(P.run_program(user))
|
||||
active_program = P
|
||||
P.alert_pending = FALSE
|
||||
update_icon()
|
||||
update_appearance()
|
||||
return 1
|
||||
|
||||
if("PC_toggle_light")
|
||||
@@ -185,7 +189,7 @@
|
||||
if(!new_color)
|
||||
return
|
||||
if(color_hex2num(new_color) < 200) //Colors too dark are rejected
|
||||
to_chat(user, "<span class='warning'>That color is too dark! Choose a lighter one.</span>")
|
||||
to_chat(user, span_warning("That color is too dark! Choose a lighter one."))
|
||||
new_color = null
|
||||
return set_flashlight_color(new_color)
|
||||
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
// No running around with open laptops in hands.
|
||||
item_flags = SLOWS_WHILE_IN_HAND
|
||||
|
||||
screen_on = FALSE // Starts closed
|
||||
var/start_open = TRUE // unless this var is set to 1
|
||||
screen_on = FALSE // Starts closed
|
||||
var/start_open = TRUE // unless this var is set to 1
|
||||
var/icon_state_closed = "laptop-closed"
|
||||
var/w_class_open = WEIGHT_CLASS_BULKY
|
||||
var/slowdown_open = TRUE
|
||||
@@ -44,15 +44,14 @@
|
||||
/obj/item/modular_computer/laptop/update_icon_state()
|
||||
if(!screen_on)
|
||||
icon_state = icon_state_closed
|
||||
else
|
||||
. = ..()
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/laptop/update_overlays()
|
||||
if(screen_on)
|
||||
return ..()
|
||||
else
|
||||
if(!screen_on)
|
||||
cut_overlays()
|
||||
icon_state = icon_state_closed
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/laptop/attack_self(mob/user)
|
||||
if(!screen_on)
|
||||
@@ -68,7 +67,8 @@
|
||||
try_toggle_open(usr)
|
||||
|
||||
/obj/item/modular_computer/laptop/MouseDrop(obj/over_object, src_location, over_location)
|
||||
if(istype(over_object, /atom/movable/screen/inventory/hand) || over_object == usr)
|
||||
. = ..()
|
||||
if(istype(over_object, /atom/movable/screen/inventory/hand))
|
||||
var/atom/movable/screen/inventory/hand/H = over_object
|
||||
var/mob/M = usr
|
||||
|
||||
@@ -103,17 +103,17 @@
|
||||
|
||||
/obj/item/modular_computer/laptop/proc/toggle_open(mob/living/user=null)
|
||||
if(screen_on)
|
||||
to_chat(user, "<span class='notice'>You close \the [src].</span>")
|
||||
to_chat(user, span_notice("You close \the [src]."))
|
||||
slowdown = initial(slowdown)
|
||||
w_class = initial(w_class)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You open \the [src].</span>")
|
||||
to_chat(user, span_notice("You open \the [src]."))
|
||||
slowdown = slowdown_open
|
||||
w_class = w_class_open
|
||||
|
||||
screen_on = !screen_on
|
||||
display_overlays = screen_on
|
||||
update_icon()
|
||||
update_appearance()
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
integrity_failure = machinery_computer.integrity_failure
|
||||
base_active_power_usage = machinery_computer.base_active_power_usage
|
||||
base_idle_power_usage = machinery_computer.base_idle_power_usage
|
||||
machinery_computer.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, /atom/proc/update_icon) //when we update_icon, also update the computer
|
||||
machinery_computer.RegisterSignal(src, COMSIG_ATOM_UPDATED_ICON, /obj/machinery/modular_computer/proc/relay_icon_update) //when we update_icon, also update the computer
|
||||
|
||||
/obj/item/modular_computer/processor/relay_qdel()
|
||||
qdel(machinery_computer)
|
||||
@@ -47,7 +47,7 @@
|
||||
if(!machinery_computer)
|
||||
return
|
||||
..()
|
||||
machinery_computer.update_icon()
|
||||
machinery_computer.update_appearance()
|
||||
return
|
||||
|
||||
/obj/item/modular_computer/processor/attack_ghost(mob/user)
|
||||
@@ -57,4 +57,4 @@
|
||||
if(!caller || !caller.alert_able || caller.alert_silenced || !alerttext)
|
||||
return
|
||||
playsound(src, 'sound/machines/twobeep_high.ogg', 50, TRUE)
|
||||
machinery_computer.visible_message("<span class='notice'>The [src] displays a [caller.filedesc] notification: [alerttext]</span>")
|
||||
machinery_computer.visible_message(span_notice("The [src] displays a [caller.filedesc] notification: [alerttext]"))
|
||||
|
||||
@@ -2,9 +2,10 @@
|
||||
name = "tablet computer"
|
||||
icon = 'icons/obj/modular_tablet.dmi'
|
||||
icon_state = "tablet-red"
|
||||
icon_state_unpowered = "tablet"
|
||||
icon_state_powered = "tablet"
|
||||
icon_state_unpowered = "tablet-red"
|
||||
icon_state_powered = "tablet-red"
|
||||
icon_state_menu = "menu"
|
||||
base_icon_state = "tablet"
|
||||
// worn_icon_state = "tablet"
|
||||
hardware_flag = PROGRAM_TABLET
|
||||
max_hardware_size = 1
|
||||
@@ -80,12 +81,12 @@
|
||||
/obj/item/modular_computer/tablet/ui_data(mob/user)
|
||||
. = ..()
|
||||
.["PC_showpeneject"] = inserted_item ? 1 : 0
|
||||
|
||||
/obj/item/modular_computer/tablet/update_icon_state()
|
||||
if(has_variants)
|
||||
if(!finish_color)
|
||||
finish_color = pick("red","blue","brown","green","black")
|
||||
icon_state = icon_state_powered = icon_state_unpowered = "tablet-[finish_color]"
|
||||
finish_color = pick("red", "blue", "brown", "green", "black")
|
||||
icon_state = icon_state_powered = icon_state_unpowered = "[base_icon_state]-[finish_color]"
|
||||
return ..()
|
||||
|
||||
/obj/item/modular_computer/tablet/syndicate_contract_uplink
|
||||
name = "contractor tablet"
|
||||
@@ -102,6 +103,8 @@
|
||||
/// Given to Nuke Ops members.
|
||||
/obj/item/modular_computer/tablet/nukeops
|
||||
icon_state = "tablet-syndicate"
|
||||
icon_state_powered = "tablet-syndicate"
|
||||
icon_state_unpowered = "tablet-syndicate"
|
||||
comp_light_luminosity = 6.3
|
||||
has_variants = FALSE
|
||||
device_theme = "syndicate"
|
||||
@@ -109,15 +112,18 @@
|
||||
|
||||
/obj/item/modular_computer/tablet/nukeops/emag_act(mob/user)
|
||||
if(!enabled)
|
||||
to_chat(user, "<span class='warning'>You'd need to turn the [src] on first.</span>")
|
||||
to_chat(user, span_warning("You'd need to turn the [src] on first."))
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You swipe \the [src]. It's screen briefly shows a message reading \"MEMORY CODE INJECTION DETECTED AND SUCCESSFULLY QUARANTINED\".</span>")
|
||||
to_chat(user, span_notice("You swipe \the [src]. It's screen briefly shows a message reading \"MEMORY CODE INJECTION DETECTED AND SUCCESSFULLY QUARANTINED\"."))
|
||||
return FALSE
|
||||
|
||||
/// Borg Built-in tablet interface
|
||||
/obj/item/modular_computer/tablet/integrated
|
||||
name = "modular interface"
|
||||
icon_state = "tablet-silicon"
|
||||
icon_state_powered = "tablet-silicon"
|
||||
icon_state_unpowered = "tablet-silicon"
|
||||
base_icon_state = "tablet-silicon"
|
||||
has_light = FALSE //tablet light button actually enables/disables the borg lamp
|
||||
comp_light_luminosity = 0
|
||||
has_variants = FALSE
|
||||
@@ -198,11 +204,13 @@
|
||||
if(!caller || !caller.alert_able || caller.alert_silenced || !alerttext) //Yeah, we're checking alert_able. No, you don't get to make alerts that the user can't silence.
|
||||
return
|
||||
borgo.playsound_local(src, sound, 50, TRUE)
|
||||
to_chat(borgo, "<span class='notice'>The [src] displays a [caller.filedesc] notification: [alerttext]</span>")
|
||||
to_chat(borgo, span_notice("The [src] displays a [caller.filedesc] notification: [alerttext]"))
|
||||
|
||||
|
||||
/obj/item/modular_computer/tablet/integrated/syndicate
|
||||
icon_state = "tablet-silicon-syndicate"
|
||||
icon_state_powered = "tablet-silicon-syndicate"
|
||||
icon_state_unpowered = "tablet-silicon-syndicate"
|
||||
device_theme = "syndicate"
|
||||
|
||||
|
||||
|
||||
@@ -20,6 +20,17 @@
|
||||
install_component(new /obj/item/computer_hardware/card_slot)
|
||||
install_component(new /obj/item/computer_hardware/printer/mini)
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/science/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/computer_hardware/hard_drive/small/hard_drive = new
|
||||
install_component(new /obj/item/computer_hardware/processor_unit/small)
|
||||
install_component(new /obj/item/computer_hardware/battery(src, /obj/item/stock_parts/cell/computer))
|
||||
install_component(hard_drive)
|
||||
install_component(new /obj/item/computer_hardware/card_slot)
|
||||
install_component(new /obj/item/computer_hardware/network_card)
|
||||
install_component(new /obj/item/computer_hardware/radio_card)
|
||||
hard_drive.store_file(new /datum/computer_file/program/signaler)
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/cargo/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/computer_hardware/hard_drive/small/hard_drive = new
|
||||
@@ -30,17 +41,38 @@
|
||||
install_component(new /obj/item/computer_hardware/network_card)
|
||||
install_component(new /obj/item/computer_hardware/printer/mini)
|
||||
// hard_drive.store_file(new /datum/computer_file/program/shipping)
|
||||
var/datum/computer_file/program/chatclient/chatprogram
|
||||
chatprogram = new
|
||||
hard_drive.store_file(chatprogram)
|
||||
chatprogram.username = get_cargochat_username()
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/cargo/proc/get_cargochat_username()
|
||||
return "cargonian_[rand(1,999)]"
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/cargo/quartermaster/get_cargochat_username()
|
||||
return "quartermaster"
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/advanced/atmos/Initialize() //This will be defunct and will be replaced when NtOS PDAs are done
|
||||
. = ..()
|
||||
install_component(new /obj/item/computer_hardware/sensorpackage)
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/advanced/engineering/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
|
||||
hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/advanced/command/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
|
||||
install_component(new /obj/item/computer_hardware/sensorpackage)
|
||||
install_component(new /obj/item/computer_hardware/card_slot/secondary)
|
||||
hard_drive.store_file(new /datum/computer_file/program/budgetorders)
|
||||
// hard_drive.store_file(new /datum/computer_file/program/science)
|
||||
|
||||
/obj/item/modular_computer/tablet/preset/advanced/command/engineering/Initialize()
|
||||
. = ..()
|
||||
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
|
||||
hard_drive.store_file(new /datum/computer_file/program/supermatter_monitor)
|
||||
|
||||
/// Given by the syndicate as part of the contract uplink bundle - loads in the Contractor Uplink.
|
||||
/obj/item/modular_computer/tablet/syndicate_contract_uplink/preset/uplink/Initialize()
|
||||
|
||||
@@ -26,8 +26,6 @@
|
||||
/obj/machinery/modular_computer/console/preset/proc/install_programs()
|
||||
return
|
||||
|
||||
|
||||
|
||||
// ===== ENGINEERING CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/engineering
|
||||
console_department = "Engineering"
|
||||
@@ -45,6 +43,7 @@
|
||||
console_department = "Research"
|
||||
name = "research director's console"
|
||||
desc = "A stationary computer. This one comes preloaded with research programs."
|
||||
_has_second_id_slot = TRUE
|
||||
_has_ai = TRUE
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/research/install_programs()
|
||||
@@ -84,6 +83,18 @@
|
||||
hard_drive.store_file(new/datum/computer_file/program/job_management())
|
||||
hard_drive.store_file(new/datum/computer_file/program/crew_manifest())
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/id/centcom
|
||||
desc = "A stationary computer. This one comes preloaded with CentCom identification modification programs."
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/id/centcom/install_programs()
|
||||
var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
var/datum/computer_file/program/card_mod/card_mod_centcom = new /datum/computer_file/program/card_mod()
|
||||
card_mod_centcom.is_centcom = TRUE
|
||||
hard_drive.store_file(new /datum/computer_file/program/chatclient())
|
||||
hard_drive.store_file(card_mod_centcom)
|
||||
hard_drive.store_file(new /datum/computer_file/program/job_management())
|
||||
hard_drive.store_file(new /datum/computer_file/program/crew_manifest())
|
||||
|
||||
// ===== CIVILIAN CONSOLE =====
|
||||
/obj/machinery/modular_computer/console/preset/civilian
|
||||
console_department = "Civilian"
|
||||
@@ -94,3 +105,79 @@
|
||||
var/obj/item/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/arcade())
|
||||
|
||||
// curator
|
||||
/obj/machinery/modular_computer/console/preset/curator
|
||||
console_department = "Civilian"
|
||||
name = "curator console"
|
||||
desc = "A stationary computer. This one comes preloaded with art programs."
|
||||
_has_printer = TRUE
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/curator/install_programs()
|
||||
var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
hard_drive.store_file(new/datum/computer_file/program/portrait_printer())
|
||||
|
||||
// ===== CARGO CHAT CONSOLES =====
|
||||
/obj/machinery/modular_computer/console/preset/cargochat
|
||||
name = "cargo chatroom console"
|
||||
desc = "A stationary computer. This one comes preloaded with a chatroom for your cargo requests."
|
||||
///chat client installed on this computer, just helpful for linking all the computers
|
||||
var/datum/computer_file/program/chatclient/chatprogram
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/install_programs()
|
||||
var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
chatprogram = new
|
||||
chatprogram.computer = cpu
|
||||
hard_drive.store_file(chatprogram)
|
||||
chatprogram.username = "[lowertext(console_department)]_department"
|
||||
chatprogram.program_state = PROGRAM_STATE_ACTIVE
|
||||
cpu.active_program = chatprogram
|
||||
|
||||
//ONE PER MAP PLEASE, IT MAKES A CARGOBUS FOR EACH ONE OF THESE
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/cargo
|
||||
console_department = "Cargo"
|
||||
name = "department chatroom console"
|
||||
desc = "A stationary computer. This one comes preloaded with a chatroom for incoming cargo requests. You may moderate it from this computer."
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/cargo/install_programs()
|
||||
var/obj/item/computer_hardware/hard_drive/hard_drive = cpu.all_components[MC_HDD]
|
||||
|
||||
//adding chat, setting it as the active window immediately
|
||||
chatprogram = new
|
||||
chatprogram.computer = cpu
|
||||
hard_drive.store_file(chatprogram)
|
||||
chatprogram.program_state = PROGRAM_STATE_ACTIVE
|
||||
cpu.active_program = chatprogram
|
||||
|
||||
//setting up chat
|
||||
chatprogram.username = "cargo_requests_operator"
|
||||
var/datum/ntnet_conversation/cargochat = new
|
||||
cargochat.operator = chatprogram //adding operator before joining the chat prevents an unnecessary message about switching op from showing
|
||||
cargochat.add_client(chatprogram)
|
||||
cargochat.title = "#cargobus"
|
||||
cargochat.strong = TRUE
|
||||
chatprogram.active_channel = cargochat.id
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/cargo/LateInitialize()
|
||||
. = ..()
|
||||
var/datum/ntnet_conversation/cargochat = SSnetworks.station_network.get_chat_channel_by_id(chatprogram.active_channel)
|
||||
for(var/obj/machinery/modular_computer/console/preset/cargochat/cargochat_console in GLOB.machines)
|
||||
if(cargochat_console == src)
|
||||
continue
|
||||
cargochat_console.chatprogram.active_channel = chatprogram.active_channel
|
||||
cargochat.add_client(cargochat_console.chatprogram, silent = TRUE)
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/service
|
||||
console_department = "Service"
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/engineering
|
||||
console_department = "Engineering"
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/science
|
||||
console_department = "Science"
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/security
|
||||
console_department = "Security"
|
||||
|
||||
/obj/machinery/modular_computer/console/preset/cargochat/medical
|
||||
console_department = "Medical"
|
||||
|
||||
@@ -4,28 +4,41 @@
|
||||
name = "modular computer"
|
||||
desc = "An advanced computer."
|
||||
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 5
|
||||
var/hardware_flag = 0 // A flag that describes this device type
|
||||
var/last_power_usage = 0 // Power usage during last tick
|
||||
|
||||
// Modular computers can run on various devices. Each DEVICE (Laptop, Console, Tablet,..)
|
||||
// must have it's own DMI file. Icon states must be called exactly the same in all files, but may look differently
|
||||
// If you create a program which is limited to Laptops and Consoles you don't have to add it's icon_state overlay for Tablets too, for example.
|
||||
|
||||
icon = null
|
||||
icon_state = null
|
||||
var/icon_state_unpowered = null // Icon state when the computer is turned off.
|
||||
var/icon_state_powered = null // Icon state when the computer is turned on.
|
||||
var/screen_icon_state_menu = "menu" // Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.
|
||||
var/screen_icon_screensaver = "standby" // Icon state overlay when the computer is powered, but not 'switched on'.
|
||||
var/max_hardware_size = 0 // Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed.
|
||||
var/steel_sheet_cost = 10 // Amount of steel sheets refunded when disassembling an empty frame of this computer.
|
||||
var/light_strength = 0 // Light luminosity when turned on
|
||||
var/base_active_power_usage = 100 // Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too.
|
||||
var/base_idle_power_usage = 10 // Power usage when the computer is idle and screen is off (currently only applies to laptops)
|
||||
|
||||
var/obj/item/modular_computer/processor/cpu = null // CPU that handles most logic while this type only handles power and other specific things.
|
||||
use_power = IDLE_POWER_USE
|
||||
idle_power_usage = 5
|
||||
///A flag that describes this device type
|
||||
var/hardware_flag = 0
|
||||
///Power usage during last tick
|
||||
var/last_power_usage = 0
|
||||
|
||||
|
||||
///Icon state when the computer is turned off.
|
||||
var/icon_state_unpowered = null
|
||||
///Icon state when the computer is turned on.
|
||||
var/icon_state_powered = null
|
||||
///Icon state overlay when the computer is turned on, but no program is loaded that would override the screen.
|
||||
var/screen_icon_state_menu = "menu"
|
||||
///Icon state overlay when the computer is powered, but not 'switched on'.
|
||||
var/screen_icon_screensaver = "standby"
|
||||
///Maximal hardware size. Currently, tablets have 1, laptops 2 and consoles 3. Limits what hardware types can be installed.
|
||||
var/max_hardware_size = 0
|
||||
///Amount of steel sheets refunded when disassembling an empty frame of this computer.
|
||||
var/steel_sheet_cost = 10
|
||||
///Light luminosity when turned on
|
||||
var/light_strength = 0
|
||||
///Power usage when the computer is open (screen is active) and can be interacted with. Remember hardware can use power too.
|
||||
var/base_active_power_usage = 100
|
||||
///Power usage when the computer is idle and screen is off (currently only applies to laptops)
|
||||
var/base_idle_power_usage = 10
|
||||
|
||||
///CPU that handles most logic while this type only handles power and other specific things.
|
||||
var/obj/item/modular_computer/processor/cpu = null
|
||||
|
||||
/obj/machinery/modular_computer/Initialize()
|
||||
. = ..()
|
||||
@@ -48,32 +61,35 @@
|
||||
cpu.attack_ghost(user)
|
||||
|
||||
/obj/machinery/modular_computer/emag_act(mob/user)
|
||||
. = ..()
|
||||
if(!cpu)
|
||||
to_chat(user, "<span class='warning'>You'd need to turn the [src] on first.</span>")
|
||||
to_chat(user, span_warning("You'd need to turn the [src] on first."))
|
||||
return FALSE
|
||||
return (cpu.emag_act(user))
|
||||
|
||||
/obj/machinery/modular_computer/update_icon()
|
||||
cut_overlays()
|
||||
icon_state = icon_state_powered
|
||||
/obj/machinery/modular_computer/update_appearance(updates)
|
||||
. = ..()
|
||||
set_light(cpu?.enabled ? light_strength : 0)
|
||||
|
||||
if(!cpu || !cpu.enabled)
|
||||
/obj/machinery/modular_computer/update_icon_state()
|
||||
icon_state = (cpu?.enabled || (!(stat & NOPOWER) && cpu?.use_power())) ? icon_state_powered : icon_state_unpowered
|
||||
return ..()
|
||||
|
||||
/obj/machinery/modular_computer/update_overlays()
|
||||
. = ..()
|
||||
if(!cpu?.enabled)
|
||||
if (!(stat & NOPOWER) && (cpu?.use_power()))
|
||||
add_overlay(screen_icon_screensaver)
|
||||
else
|
||||
icon_state = icon_state_unpowered
|
||||
set_light(0)
|
||||
. += screen_icon_screensaver
|
||||
else
|
||||
set_light(light_strength)
|
||||
if(cpu.active_program)
|
||||
add_overlay(cpu.active_program.program_icon_state ? cpu.active_program.program_icon_state : screen_icon_state_menu)
|
||||
else
|
||||
add_overlay(screen_icon_state_menu)
|
||||
. += cpu.active_program?.program_icon_state || screen_icon_state_menu
|
||||
|
||||
if(cpu && cpu.obj_integrity <= cpu.integrity_failure * cpu.max_integrity)
|
||||
add_overlay("bsod")
|
||||
add_overlay("broken")
|
||||
. += "bsod"
|
||||
. += "broken"
|
||||
|
||||
/// Eats the "source" arg because update_icon actually expects args now.
|
||||
/obj/machinery/modular_computer/proc/relay_icon_update(datum/source, updates, updated)
|
||||
SIGNAL_HANDLER
|
||||
return update_icon(updates)
|
||||
|
||||
/obj/machinery/modular_computer/AltClick(mob/user)
|
||||
if(cpu)
|
||||
@@ -98,17 +114,17 @@
|
||||
/obj/machinery/modular_computer/proc/power_failure(malfunction = 0)
|
||||
var/obj/item/computer_hardware/battery/battery_module = cpu.all_components[MC_CELL]
|
||||
if(cpu?.enabled) // Shut down the computer
|
||||
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>")
|
||||
visible_message(span_danger("\The [src]'s screen flickers [battery_module ? "\"BATTERY [malfunction ? "MALFUNCTION" : "CRITICAL"]\"" : "\"EXTERNAL POWER LOSS\""] warning as it shuts down unexpectedly."))
|
||||
if(cpu)
|
||||
cpu.shutdown_computer(0)
|
||||
stat |= NOPOWER
|
||||
update_icon()
|
||||
set_machine_stat(stat | NOPOWER)
|
||||
update_appearance()
|
||||
|
||||
// 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?.use_power()) // If MC_CPU still has a power source, PC wouldn't go offline.
|
||||
stat &= ~NOPOWER
|
||||
update_icon()
|
||||
set_machine_stat(stat & ~NOPOWER)
|
||||
update_appearance()
|
||||
return
|
||||
. = ..()
|
||||
|
||||
@@ -116,7 +132,7 @@
|
||||
if(cpu)
|
||||
return cpu.screwdriver_act(user, tool)
|
||||
|
||||
/obj/machinery/modular_computer/attackby(obj/item/W as obj, mob/user)
|
||||
/obj/machinery/modular_computer/attackby(obj/item/W as obj, mob/living/user)
|
||||
if (user.a_intent == INTENT_HELP && cpu && !(flags_1 & NODECONSTRUCT_1))
|
||||
return cpu.attackby(W, user)
|
||||
return ..()
|
||||
@@ -126,15 +142,16 @@
|
||||
// Minor explosions are mostly mitigitated by casing.
|
||||
/obj/machinery/modular_computer/ex_act(severity)
|
||||
if(cpu)
|
||||
cpu.ex_act(severity)
|
||||
// switch(severity)
|
||||
// if(EXPLODE_DEVASTATE)
|
||||
// SSexplosions.high_mov_atom += cpu
|
||||
// if(EXPLODE_HEAVY)
|
||||
// SSexplosions.med_mov_atom += cpu
|
||||
// if(EXPLODE_LIGHT)
|
||||
// SSexplosions.low_mov_atom += cpu
|
||||
..()
|
||||
return cpu.ex_act(severity)
|
||||
|
||||
// switch(severity)
|
||||
// if(EXPLODE_DEVASTATE)
|
||||
// SSexplosions.high_mov_atom += cpu
|
||||
// if(EXPLODE_HEAVY)
|
||||
// SSexplosions.med_mov_atom += cpu
|
||||
// if(EXPLODE_LIGHT)
|
||||
// SSexplosions.low_mov_atom += cpu
|
||||
return ..()
|
||||
|
||||
// EMPs are similar to explosions, but don't cause physical damage to the casing. Instead they screw up the components
|
||||
/obj/machinery/modular_computer/emp_act(severity)
|
||||
|
||||
@@ -16,7 +16,8 @@
|
||||
light_strength = 2
|
||||
max_integrity = 300
|
||||
integrity_failure = 0.5
|
||||
var/console_department = "" // Used in New() to set network tag according to our area.
|
||||
///Used in New() to set network tag according to our area.
|
||||
var/console_department = ""
|
||||
|
||||
/obj/machinery/modular_computer/console/buildable/Initialize()
|
||||
. = ..()
|
||||
@@ -52,4 +53,4 @@
|
||||
network_card.identification_string = "Unknown Console"
|
||||
if(cpu)
|
||||
cpu.screen_on = 1
|
||||
update_icon()
|
||||
update_appearance()
|
||||
|
||||
Reference in New Issue
Block a user