[MDB IGNORE] Removes tablet cartridges + reworks a ton more (#66505)

- All tablets who previously had apps in a cartridge now has them built-into their tablet instead. This means it costs space for it.
- Rebalances the sizes of several apps to help them fit on Command tablets (Cargo ordering costed 20!!)
- Removes tablet cartridges, they've been reworked into a regular old portable disk (the same you use for toxins/borgs)
- Removes Signaller (the module required to run the signaller app) from tablets (likely will remove more in the future)
- Refactors the health/chem scanning app to not be as bad
- Dehardcodes detomatix resistance
- Ability to send PDA's to all is now tied to your access rather than a cartridge
- Moves 'eject disk' button to the very top of the UI
This commit is contained in:
John Willard
2022-05-11 12:04:11 -04:00
committed by GitHub
parent 95e72851c8
commit cc57407c79
53 changed files with 9149 additions and 9165 deletions
@@ -1,30 +1,32 @@
/obj/proc/is_modular_computer()
return
return FALSE
//item
/obj/item/modular_computer/is_modular_computer()
return TRUE
//machine
/obj/machinery/modular_computer/is_modular_computer()
return TRUE
/obj/proc/get_modular_computer_part(part_type)
return null
/obj/item/modular_computer/is_modular_computer()
return TRUE
//item
/obj/item/modular_computer/get_modular_computer_part(part_type)
if(!part_type)
stack_trace("get_modular_computer_part() called without a valid part_type")
return null
return all_components[part_type]
/obj/machinery/modular_computer/is_modular_computer()
return TRUE
//machine
/obj/machinery/modular_computer/get_modular_computer_part(part_type)
if(!part_type)
stack_trace("get_modular_computer_part() called without a valid part_type")
return null
return cpu?.all_components[part_type]
/obj/proc/get_modular_computer_parts_examine(mob/user)
. = list()
if(!is_modular_computer())
@@ -303,7 +303,7 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
. = ..()
context[SCREENTIP_CONTEXT_ALT_LMB] = "Remove ID"
context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB] = "Remove Job Disk"
context[SCREENTIP_CONTEXT_CTRL_SHIFT_LMB] = "Remove Disk"
return CONTEXTUAL_SCREENTIP_SET
@@ -340,11 +340,12 @@ GLOBAL_LIST_EMPTY(TabletMessengers) // a list of all active messengers, similar
if(.)
return
var/obj/item/computer_hardware/hard_drive/role/ssd = all_components[MC_HDD_JOB]
var/obj/item/computer_hardware/hard_drive/ssd = all_components[MC_SDD]
if(!ssd)
return
if(uninstall_component(ssd, usr))
user.put_in_hands(ssd)
playsound(src, 'sound/machines/card_slide.ogg', 50)
/obj/item/modular_computer/proc/turn_on(mob/user)
var/issynth = issilicon(user) // Robots and AIs get different activation messages.
@@ -66,7 +66,6 @@
data["disk"] = null
var/obj/item/computer_hardware/card_slot/cardholder = all_components[MC_CARD]
var/obj/item/computer_hardware/hard_drive/role/ssd = all_components[MC_HDD_JOB]
data["cardholder"] = FALSE
if(cardholder)
@@ -87,20 +86,9 @@
IDJob = cardholder.current_job,
)
if(ssd)
data["disk"] = ssd
data["disk_name"] = ssd.name
for(var/datum/computer_file/program/prog in ssd.stored_files)
var/running = FALSE
if(prog in idle_threads)
running = TRUE
data["disk_programs"] += list(list("name" = prog.filename, "desc" = prog.filedesc, "running" = running, "icon" = prog.program_icon, "alert" = prog.alert_pending))
data["removable_media"] = list()
if(all_components[MC_SDD])
data["removable_media"] += "removable storage disk"
data["removable_media"] += "Eject Disk"
var/obj/item/computer_hardware/ai_slot/intelliholder = all_components[MC_AI]
if(intelliholder?.stored_card)
data["removable_media"] += "intelliCard"
@@ -168,13 +156,10 @@
var/prog = params["name"]
var/is_disk = params["is_disk"]
var/datum/computer_file/program/P = null
var/obj/item/computer_hardware/hard_drive/role/ssd = all_components[MC_HDD_JOB]
var/mob/user = usr
if(hard_drive && !is_disk)
P = hard_drive.find_file_by_name(prog)
if(ssd && is_disk)
P = ssd.find_file_by_name(prog)
if(!P || !istype(P)) // Program not found or it's not executable program.
to_chat(user, span_danger("\The [src]'s screen shows \"I/O ERROR - Unable to run program\" warning."))
@@ -228,20 +213,13 @@
var/param = params["name"]
var/mob/user = usr
switch(param)
if("removable storage disk")
if("Eject Disk")
var/obj/item/computer_hardware/hard_drive/portable/portable_drive = all_components[MC_SDD]
if(!portable_drive)
return
if(uninstall_component(portable_drive, usr))
user.put_in_hands(portable_drive)
playsound(src, 'sound/machines/card_slide.ogg', 50)
if("job disk")
var/obj/item/computer_hardware/hard_drive/role/ssd = all_components[MC_HDD_JOB]
if(!ssd)
return
if(uninstall_component(ssd, usr))
user.put_in_hands(ssd)
playsound(src, 'sound/machines/card_slide.ogg', 50)
if("intelliCard")
var/obj/item/computer_hardware/ai_slot/intelliholder = all_components[MC_AI]
if(!intelliholder)
@@ -1,85 +1,24 @@
/obj/item/modular_computer/tablet/pda/medical
name = "medical PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/medical
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#3F96CC"
/obj/item/modular_computer/tablet/pda/viro
name = "virology PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/medical
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#FAFAFA#355FAC#57C451"
/obj/item/modular_computer/tablet/pda/engineering
name = "engineering PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/engineering
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#D99A2E#69DBF3#E3DF3D"
/obj/item/modular_computer/tablet/pda/security
name = "security PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/security
greyscale_colors = "#EA3232#0000cc"
/obj/item/modular_computer/tablet/pda/detective
name = "detective PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/detective
greyscale_colors = "#805A2F#990202"
/obj/item/modular_computer/tablet/pda/warden
name = "warden PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/security
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#EA3232#0000CC#363636"
/obj/item/modular_computer/tablet/pda/janitor
name = "janitor PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/janitor
greyscale_colors = "#933ea8#235AB2"
/obj/item/modular_computer/tablet/pda/science
name = "scientist PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/signal/ordnance
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#B347BC"
/**
* Command
*/
/obj/item/modular_computer/tablet/pda/heads
default_disk = /obj/item/computer_hardware/hard_drive/role/head
greyscale_config = /datum/greyscale_config/tablet/head
greyscale_colors = "#67A364#a92323"
default_applications = list(
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
)
/obj/item/modular_computer/tablet/pda/heads/hop
name = "head of personnel PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/hop
/obj/item/modular_computer/tablet/pda/heads/Initialize(mapload)
. = ..()
install_component(new /obj/item/computer_hardware/card_slot/secondary)
/obj/item/modular_computer/tablet/pda/heads/hos
name = "head of security PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/hos
greyscale_config = /datum/greyscale_config/tablet/head
greyscale_colors = "#EA3232#0000CC"
/obj/item/modular_computer/tablet/pda/heads/ce
name = "chief engineer PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/ce
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#D99A2E#69DBF3#FAFAFA"
/obj/item/modular_computer/tablet/pda/heads/cmo
name = "chief medical officer PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/cmo
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#FAFAFA#000099#3F96CC"
/obj/item/modular_computer/tablet/pda/heads/rd
name = "research director PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/rd
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#FAFAFA#000099#B347BC"
insert_type = /obj/item/pen/fountain
/obj/item/modular_computer/tablet/pda/captain
/obj/item/modular_computer/tablet/pda/heads/captain
name = "captain PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/captain
greyscale_config = /datum/greyscale_config/tablet/captain
greyscale_colors = "#2C7CB2#FF0000#FFFFFF#FFD55B"
insert_type = /obj/item/pen/fountain
@@ -88,10 +27,205 @@
. = ..()
RegisterSignal(src, COMSIG_TABLET_CHECK_DETONATE, .proc/tab_no_detonate)
/obj/item/modular_computer/tablet/pda/heads/hop
name = "head of personnel PDA"
default_applications = list(
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/records/security,
/datum/computer_file/program/job_management,
)
/obj/item/modular_computer/tablet/pda/heads/hos
name = "head of security PDA"
greyscale_config = /datum/greyscale_config/tablet/head
greyscale_colors = "#EA3232#0000CC"
default_applications = list(
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/records/security,
)
/obj/item/modular_computer/tablet/pda/heads/ce
name = "chief engineer PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#D99A2E#69DBF3#FAFAFA"
default_applications = list(
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/alarm_monitor,
/datum/computer_file/program/power_monitor,
/datum/computer_file/program/supermatter_monitor,
)
/obj/item/modular_computer/tablet/pda/heads/cmo
name = "chief medical officer PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#FAFAFA#000099#3F96CC"
default_applications = list(
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/phys_scanner/all,
/datum/computer_file/program/records/medical,
)
/obj/item/modular_computer/tablet/pda/heads/rd
name = "research director PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick/head
greyscale_colors = "#FAFAFA#000099#B347BC"
insert_type = /obj/item/pen/fountain
default_applications = list(
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/status,
/datum/computer_file/program/science,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/phys_scanner/chemistry,
/datum/computer_file/program/signal_commander,
)
/**
* Security
*/
/obj/item/modular_computer/tablet/pda/security
name = "security PDA"
greyscale_colors = "#EA3232#0000cc"
default_applications = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/tablet/pda/detective
name = "detective PDA"
greyscale_colors = "#805A2F#990202"
default_applications = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/robocontrol,
/datum/computer_file/program/phys_scanner/medical,
)
/obj/item/modular_computer/tablet/pda/warden
name = "warden PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#EA3232#0000CC#363636"
default_applications = list(
/datum/computer_file/program/records/security,
/datum/computer_file/program/crew_manifest,
/datum/computer_file/program/robocontrol,
)
/**
* Engineering
*/
/obj/item/modular_computer/tablet/pda/engineering
name = "engineering PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#D99A2E#69DBF3#E3DF3D"
default_applications = list(
/datum/computer_file/program/power_monitor,
/datum/computer_file/program/supermatter_monitor,
)
/obj/item/modular_computer/tablet/pda/atmos
name = "atmospherics PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#EEDC43#00E5DA#727272"
default_applications = list(
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/alarm_monitor,
)
/**
* Science
*/
/obj/item/modular_computer/tablet/pda/science
name = "scientist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#B347BC"
default_applications = list(
/datum/computer_file/program/atmosscan,
/datum/computer_file/program/signal_commander,
)
/obj/item/modular_computer/tablet/pda/roboticist
name = "roboticist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#484848#0099CC#D94927"
default_applications = list(
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/tablet/pda/geneticist
name = "geneticist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#FAFAFA#000099#0097CA"
default_applications = list(
/datum/computer_file/program/phys_scanner/medical,
/datum/computer_file/program/records/medical,
)
/**
* Medical
*/
/obj/item/modular_computer/tablet/pda/medical
name = "medical PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#000099#3F96CC"
default_applications = list(
/datum/computer_file/program/phys_scanner/medical,
/datum/computer_file/program/records/medical,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/tablet/pda/viro
name = "virology PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#FAFAFA#355FAC#57C451"
default_applications = list(
/datum/computer_file/program/phys_scanner/medical,
/datum/computer_file/program/records/medical,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/tablet/pda/chemist
name = "chemist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#355FAC#EA6400"
default_applications = list(
/datum/computer_file/program/phys_scanner/chemistry,
)
/**
* Supply
*/
/obj/item/modular_computer/tablet/pda/cargo
name = "cargo technician PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/quartermaster
greyscale_colors = "#D6B328#6506CA"
default_applications = list(
/datum/computer_file/program/shipping,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/tablet/pda/quartermaster/Initialize(mapload)
. = ..()
@@ -99,9 +233,13 @@
/obj/item/modular_computer/tablet/pda/quartermaster
name = "quartermaster PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/quartermaster
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#D6B328#6506CA#927444"
default_applications = list(
/datum/computer_file/program/shipping,
/datum/computer_file/program/budgetorders,
/datum/computer_file/program/robocontrol,
)
/obj/item/modular_computer/tablet/pda/quartermaster/Initialize(mapload)
. = ..()
@@ -112,6 +250,17 @@
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#927444#D6B328#6C3BA1"
/**
* Service
*/
/obj/item/modular_computer/tablet/pda/janitor
name = "janitor PDA"
greyscale_colors = "#933ea8#235AB2"
default_applications = list(
/datum/computer_file/program/radar/custodial_locator,
)
/obj/item/modular_computer/tablet/pda/chaplain
name = "chaplain PDA"
greyscale_config = /datum/greyscale_config/tablet/chaplain
@@ -119,21 +268,17 @@
/obj/item/modular_computer/tablet/pda/lawyer
name = "lawyer PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/lawyer
greyscale_colors = "#4C76C8#FFE243"
insert_type = /obj/item/pen/fountain
default_applications = list(
/datum/computer_file/program/records/security,
)
/obj/item/modular_computer/tablet/pda/botanist
name = "botanist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#50E193#E26F41#71A7CA"
/obj/item/modular_computer/tablet/pda/roboticist
name = "roboticist PDA"
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#484848#0099CC#D94927"
default_disk = /obj/item/computer_hardware/hard_drive/role/roboticist
/obj/item/modular_computer/tablet/pda/cook
name = "cook PDA"
greyscale_colors = "#FAFAFA#A92323"
@@ -142,27 +287,9 @@
name = "bartender PDA"
greyscale_colors = "#333333#C7C7C7"
/obj/item/modular_computer/tablet/pda/atmos
name = "atmospherics PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/atmos
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#EEDC43#00E5DA#727272"
/obj/item/modular_computer/tablet/pda/chemist
name = "chemist PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/chemistry
greyscale_config = /datum/greyscale_config/tablet/stripe_thick
greyscale_colors = "#FAFAFA#355FAC#EA6400"
/obj/item/modular_computer/tablet/pda/geneticist
name = "geneticist PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/medical
greyscale_config = /datum/greyscale_config/tablet/stripe_split
greyscale_colors = "#FAFAFA#000099#0097CA"
/obj/item/modular_computer/tablet/pda/clown
name = "clown PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/virus/clown
loaded_cartridge = /obj/item/computer_hardware/hard_drive/portable/virus/clown
icon_state = "pda-clown"
greyscale_config = null
greyscale_colors = null
@@ -179,7 +306,7 @@
/obj/item/modular_computer/tablet/pda/clown/proc/AfterSlip(mob/living/carbon/human/M)
if (istype(M) && (M.real_name != saved_identification))
var/obj/item/computer_hardware/hard_drive/role/virus/clown/cart = all_components[MC_HDD_JOB]
var/obj/item/computer_hardware/hard_drive/portable/virus/clown/cart = all_components[MC_SDD]
if(istype(cart) && cart.charges < 5)
cart.charges++
playsound(src,'sound/machines/ping.ogg',30,TRUE)
@@ -189,7 +316,7 @@
/obj/item/modular_computer/tablet/pda/mime
name = "mime PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/virus/mime
loaded_cartridge = /obj/item/computer_hardware/hard_drive/portable/virus/mime
greyscale_config = /datum/greyscale_config/tablet/mime
greyscale_colors = "#FAFAFA#EA3232"
insert_type = /obj/item/toy/crayon/mime
@@ -205,11 +332,13 @@
/obj/item/modular_computer/tablet/pda/curator
name = "curator PDA"
default_disk = /obj/item/computer_hardware/hard_drive/role/curator
greyscale_config = null
greyscale_colors = null
icon_state = "pda-library"
insert_type = /obj/item/pen/fountain
default_applications = list(
/datum/computer_file/program/newscaster,
)
/obj/item/modular_computer/tablet/pda/curator/Initialize(mapload)
. = ..()
@@ -219,6 +348,10 @@
for(var/datum/computer_file/program/messenger/msg in hdd.stored_files)
msg.allow_emojis = TRUE
/**
* Non-roles
*/
/obj/item/modular_computer/tablet/pda/syndicate
name = "military PDA"
greyscale_colors = "#891417#80FF80"
@@ -80,6 +80,17 @@
remove_pen(user)
///Finds how hard it is to send a virus to this tablet, checking all programs downloaded.
/obj/item/modular_computer/tablet/proc/get_detomatix_difficulty()
var/detomatix_difficulty
var/obj/item/computer_hardware/hard_drive/hdd = all_components[MC_HDD]
if(hdd)
for(var/datum/computer_file/program/downloaded_apps as anything in hdd.stored_files)
detomatix_difficulty += downloaded_apps.detomatix_resistance
return detomatix_difficulty
/obj/item/modular_computer/tablet/proc/tab_no_detonate()
SIGNAL_HANDLER
return COMPONENT_TABLET_NO_DETONATE
@@ -118,7 +129,7 @@
if(T)
T.hotspot_expose(700,125)
if(istype(all_components[MC_HDD_JOB], /obj/item/computer_hardware/hard_drive/role/virus/deto))
if(istype(all_components[MC_SDD], /obj/item/computer_hardware/hard_drive/portable/virus/deto))
explosion(src, devastation_range = -1, heavy_impact_range = 1, light_impact_range = 3, flash_range = 4)
else
explosion(src, devastation_range = -1, heavy_impact_range = -1, light_impact_range = 2, flash_range = 3)
@@ -277,7 +288,10 @@
bypass_state = TRUE
allow_chunky = TRUE
var/default_disk = 0
///All applications this tablet has pre-installed
var/list/default_applications = list()
///The pre-installed cartridge that comes with the tablet
var/loaded_cartridge
/obj/item/modular_computer/tablet/pda/update_overlays()
. = ..()
@@ -305,8 +319,13 @@
install_component(new /obj/item/computer_hardware/identifier)
install_component(new /obj/item/computer_hardware/sensorpackage)
if(default_disk)
var/obj/item/computer_hardware/hard_drive/portable/disk = new default_disk(src)
if(!isnull(default_applications))
var/obj/item/computer_hardware/hard_drive/small/hard_drive = find_hardware_by_name("solid state drive")
for(var/datum/computer_file/program/default_programs as anything in default_applications)
hard_drive.store_file(new default_programs)
if(loaded_cartridge)
var/obj/item/computer_hardware/hard_drive/portable/disk = new loaded_cartridge(src)
install_component(disk)
if(insert_type)
@@ -28,8 +28,7 @@
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)
hard_drive.store_file(new /datum/computer_file/program/signal_commander)
/obj/item/modular_computer/tablet/preset/cargo/Initialize(mapload)
. = ..()
@@ -43,6 +43,8 @@
var/alert_silenced = FALSE
/// Whether to highlight our program in the main screen. Intended for alerts, but loosely available for any need to notify of changed conditions. Think Windows task bar highlighting. Available even if alerts are muted.
var/alert_pending = FALSE
/// How well this program will help combat detomatix viruses.
var/detomatix_resistance = NONE
/datum/computer_file/program/New(obj/item/modular_computer/comp = null)
..()
@@ -6,7 +6,7 @@
program_icon_state = "alert-green"
extended_desc = "This program provides visual interface for a station's alarm system."
requires_ntnet = 1
size = 5
size = 4
tgui_id = "NtosStationAlertConsole"
program_icon = "bell"
/// If there is any station alert
@@ -6,7 +6,7 @@
extended_desc = "Nanotrasen Internal Requisition Network interface for supply purchasing using a department budget account."
requires_ntnet = TRUE
usage_flags = PROGRAM_LAPTOP | PROGRAM_TABLET
size = 20
size = 10
tgui_id = "NtosCargo"
///Are you actually placing orders with it?
var/requestonly = TRUE
@@ -9,6 +9,7 @@
size = 4
tgui_id = "NtosCrewManifest"
program_icon = "clipboard-list"
detomatix_resistance = DETOMATIX_RESIST_MAJOR
/datum/computer_file/program/crew_manifest/ui_static_data(mob/user)
var/list/data = list()
@@ -158,7 +158,7 @@
to_chat(usr, span_notice("ERROR: Device has receiving disabled."))
return
if(sending_virus)
var/obj/item/computer_hardware/hard_drive/role/virus/disk = computer.all_components[MC_HDD_JOB]
var/obj/item/computer_hardware/hard_drive/portable/virus/disk = computer.all_components[MC_SDD]
if(istype(disk))
disk.send_virus(target, usr)
return(UI_UPDATE)
@@ -176,8 +176,6 @@
/datum/computer_file/program/messenger/ui_data(mob/user)
var/list/data = get_header_data()
var/obj/item/computer_hardware/hard_drive/role/disk = computer.all_components[MC_HDD_JOB]
data["owner"] = computer.saved_identification
data["messages"] = messages
data["ringer_status"] = ringer_status
@@ -188,9 +186,14 @@
data["isSilicon"] = is_silicon
data["photo"] = photo_path
var/obj/item/computer_hardware/card_slot/card_slot = computer.all_components[MC_CARD]
if(card_slot)
var/obj/item/card/id/id_card = card_slot ? card_slot.stored_card : ""
data["canSpam"] = (ACCESS_LAWYER in id_card?.access)
var/obj/item/computer_hardware/hard_drive/portable/virus/disk = computer.all_components[MC_SDD]
if(disk)
data["canSpam"] = disk.CanSpam()
data["virus_attach"] = istype(disk, /obj/item/computer_hardware/hard_drive/role/virus)
data["virus_attach"] = istype(disk, /obj/item/computer_hardware/hard_drive/portable/virus)
data["sending_virus"] = sending_virus
return data
@@ -332,7 +335,7 @@
L = get(holder.holder, /mob/living/silicon)
if(L && (L.stat == CONSCIOUS || L.stat == SOFT_CRIT))
var/reply = "(<a href='byond://?src=[REF(src)];choice=[signal.data["rigged"] ? "Mess_us_up" : "Message"];skiprefresh=1;target=[signal.data["ref"]]'>Reply</a>)"
var/reply = "(<a href='byond://?src=[REF(src)];choice=[signal.data["rigged"] ? "mess_us_up" : "Message"];skiprefresh=1;target=[signal.data["ref"]]'>Reply</a>)"
var/hrefstart
var/hrefend
if (isAI(L))
@@ -360,7 +363,7 @@
switch(href_list["choice"])
if("Message")
send_message(usr, list(locate(href_list["target"])))
if("Mess_us_up")
if("mess_us_up")
if(!HAS_TRAIT(src, TRAIT_PDA_CAN_EXPLODE))
var/obj/item/modular_computer/tablet/comp = computer
comp.explode(usr, from_message_menu = TRUE)
@@ -1,3 +1,6 @@
#define TABLET_MEDICAL_MODE (1<<0)
#define TABLET_CHEMISTRY_MODE (1<<1)
/datum/computer_file/program/phys_scanner
filename = "phys_scanner"
filedesc = "Physical Scanner"
@@ -10,32 +13,32 @@
program_icon = "barcode"
var/current_mode = 0
var/available_modes = 0
var/available_modes = NONE
var/last_record = ""
/datum/computer_file/program/phys_scanner/proc/ReadModes()
var/reads = list()
if(available_modes & DISK_CHEM)
if(available_modes & TABLET_CHEMISTRY_MODE)
reads += "Reagent"
if(available_modes & DISK_MED)
if(available_modes & TABLET_MEDICAL_MODE)
reads += "Health"
return reads
/datum/computer_file/program/phys_scanner/proc/ReadCurrent()
if(current_mode & DISK_CHEM)
if(current_mode & TABLET_CHEMISTRY_MODE)
return "Reagent"
if(current_mode & DISK_MED)
if(current_mode & TABLET_MEDICAL_MODE)
return "Health"
/datum/computer_file/program/phys_scanner/tap(atom/A, mob/living/user, params)
. = ..()
switch(current_mode)
if(DISK_CHEM)
if(TABLET_CHEMISTRY_MODE)
if(!isnull(A.reagents))
if(A.reagents.reagent_list.len > 0)
var/reagents_length = A.reagents.reagent_list.len
@@ -46,7 +49,7 @@
last_record = "No active chemical agents found in [A]."
else
last_record = "No significant chemical agents found in [A]."
if(DISK_MED)
if(TABLET_MEDICAL_MODE)
var/mob/living/carbon/carbon = A
if(istype(carbon))
carbon.visible_message(span_notice("[user] analyzes [A]'s vitals."))
@@ -61,9 +64,9 @@
if("selectMode")
switch(params["newMode"])
if("Reagent")
current_mode = DISK_CHEM
current_mode = TABLET_CHEMISTRY_MODE
if("Health")
current_mode = DISK_MED
current_mode = TABLET_MEDICAL_MODE
return UI_UPDATE
@@ -76,3 +79,15 @@
data["available_modes"] = ReadModes()
return data
/datum/computer_file/program/phys_scanner/medical
available_modes = TABLET_MEDICAL_MODE
/datum/computer_file/program/phys_scanner/chemistry
available_modes = TABLET_CHEMISTRY_MODE
/datum/computer_file/program/phys_scanner/all
available_modes = TABLET_MEDICAL_MODE | TABLET_CHEMISTRY_MODE
#undef TABLET_MEDICAL_MODE
#undef TABLET_CHEMISTRY_MODE
@@ -10,9 +10,10 @@
transfer_access = list(ACCESS_ENGINE)
usage_flags = PROGRAM_CONSOLE
requires_ntnet = 0
size = 9
size = 8
tgui_id = "NtosPowerMonitor"
program_icon = "plug"
detomatix_resistance = DETOMATIX_RESIST_MINOR
var/has_alert = 0
var/datum/weakref/attached_wire_ref
@@ -258,6 +258,7 @@
available_on_ntnet = TRUE
program_icon = "broom"
size = 2
detomatix_resistance = DETOMATIX_RESIST_MINOR
/datum/computer_file/program/radar/custodial_locator/find_atom()
return locate(selected) in GLOB.janitor_devices
@@ -9,6 +9,7 @@
size = 4
usage_flags = PROGRAM_TABLET | PROGRAM_LAPTOP
available_on_ntnet = FALSE
detomatix_resistance = DETOMATIX_RESIST_MINOR
var/mode
@@ -6,15 +6,14 @@
program_icon_state = "robot"
extended_desc = "A remote controller used for giving basic commands to non-sentient robots."
requires_ntnet = TRUE
size = 12
size = 6
tgui_id = "NtosRoboControl"
program_icon = "robot"
///Number of simple robots on-station.
var/botcount = 0
///Access granted by the used to summon robots.
var/list/current_access = list()
///Whether or not this is the cartridge program version.
var/cart_mode = FALSE
///List of all ping types you can annoy drones with.
var/list/drone_ping_types = list(
"Low",
"Medium",
@@ -29,23 +28,18 @@
var/list/botlist = list()
var/list/mulelist = list()
var/obj/item/computer_hardware/hard_drive/role/job_disk = computer ? computer.all_components[MC_HDD_JOB] : null
var/obj/item/computer_hardware/card_slot/card_slot = computer ? computer.all_components[MC_CARD] : null
data["have_id_slot"] = !!card_slot
if(computer)
var/obj/item/card/id/id_card = card_slot ? card_slot.stored_card : ""
data["id_owner"] = id_card
if(cart_mode && job_disk)
data["id_owner"] = "JOB DISK OVERRIDE"
botcount = 0
for(var/mob/living/simple_animal/bot/simple_bot as anything in GLOB.bots_list)
if(simple_bot.z != zlevel || !(simple_bot.bot_mode_flags & BOT_MODE_REMOTE_ENABLED)) //Only non-emagged bots on the same Z-level are detected!
continue
if(computer && !simple_bot.check_access(user) && !cart_mode) // Only check Bots we can access)
continue
if(!(simple_bot.bot_type in job_disk.bot_access) && cart_mode)
if(computer && !simple_bot.check_access(user)) // Only check Bots we can access)
continue
var/list/newbot = list(
"name" = simple_bot.name,
@@ -1,4 +1,4 @@
/datum/computer_file/program/signaler
/datum/computer_file/program/signal_commander
filename = "signaler"
filedesc = "SignalCommander"
category = PROGRAM_CATEGORY_MISC
@@ -15,35 +15,18 @@
/// Radio connection datum used by signalers.
var/datum/radio_frequency/radio_connection
/datum/computer_file/program/signaler/run_program(mob/living/user)
. = ..()
if (!.)
return
var/obj/item/computer_hardware/hard_drive/role/signal/disk = computer?.get_modular_computer_part(MC_HDD_JOB)
if(!(computer?.get_modular_computer_part(MC_SIGNALER) || istype(disk))) //Giving a clue to users why the program is spitting out zeros.
to_chat(user, span_warning("\The [computer] flashes an error: \"hardware\\signal_hardware\\startup.bin -- file not found\"."))
/datum/computer_file/program/signaler/ui_data(mob/user)
/datum/computer_file/program/signal_commander/ui_data(mob/user)
var/list/data = get_header_data()
var/obj/item/computer_hardware/radio_card/sensor = computer?.get_modular_computer_part(MC_SIGNALER)
var/obj/item/computer_hardware/hard_drive/role/signal/disk = computer?.get_modular_computer_part(MC_HDD_JOB)
if(sensor?.check_functionality() || istype(disk))
data["frequency"] = signal_frequency
data["code"] = signal_code
data["minFrequency"] = MIN_FREE_FREQ
data["maxFrequency"] = MAX_FREE_FREQ
data["frequency"] = signal_frequency
data["code"] = signal_code
data["minFrequency"] = MIN_FREE_FREQ
data["maxFrequency"] = MAX_FREE_FREQ
return data
/datum/computer_file/program/signaler/ui_act(action, list/params)
/datum/computer_file/program/signal_commander/ui_act(action, list/params)
. = ..()
if(.)
return
var/obj/item/computer_hardware/radio_card/sensor = computer?.get_modular_computer_part(MC_SIGNALER)
var/obj/item/computer_hardware/hard_drive/role/signal/disk = computer?.get_modular_computer_part(MC_HDD_JOB)
if(!(sensor?.check_functionality() || istype(disk)))
playsound(src, 'sound/machines/scanbuzz.ogg', 100, FALSE)
return
switch(action)
if("signal")
INVOKE_ASYNC(src, .proc/signal)
@@ -63,7 +46,7 @@
signal_code = initial(signal_code)
. = TRUE
/datum/computer_file/program/signaler/proc/signal()
/datum/computer_file/program/signal_commander/proc/signal()
if(!radio_connection)
return
@@ -78,7 +61,7 @@
var/datum/signal/signal = new(list("code" = signal_code), logging_data = logging_data)
radio_connection.post_signal(computer, signal)
/datum/computer_file/program/signaler/proc/set_frequency(new_frequency)
/datum/computer_file/program/signal_commander/proc/set_frequency(new_frequency)
SSradio.remove_object(computer, signal_frequency)
signal_frequency = new_frequency
radio_connection = SSradio.add_object(computer, signal_frequency, RADIO_SIGNALER)
@@ -4,7 +4,7 @@
program_icon = "signal"
program_icon_state = "generic"
requires_ntnet = TRUE
size = 4
size = 1
extended_desc = "An app used to change the message on the station status displays."
tgui_id = "NtosStatus"
@@ -5,7 +5,7 @@
program_icon_state = "research"
extended_desc = "Connect to the internal science server in order to assist in station research efforts."
requires_ntnet = TRUE
size = 16
size = 10
tgui_id = "NtosTechweb"
program_icon = "atom"
required_access = list(ACCESS_HEADS, ACCESS_RND)
@@ -191,7 +191,7 @@
store_file(messenger)
// Syndicate variant - very slight better
/obj/item/computer_hardware/hard_drive/small/syndicate
/obj/item/computer_hardware/hard_drive/portable/syndicate
desc = "An efficient SSD for portable devices developed by a rival organisation."
power_usage = 8
max_capacity = 70
@@ -1,256 +0,0 @@
/obj/item/computer_hardware/hard_drive/role
name = "job data disk"
desc = "A disk meant to give a worker the needed programs to work."
power_usage = 0
icon_state = "datadisk6"
w_class = WEIGHT_CLASS_TINY
critical = FALSE
max_capacity = 500
device_type = MC_HDD_JOB
default_installs = FALSE
var/disk_flags = 0 // bit flag for the programs
var/can_spam = FALSE
var/list/bot_access = list()
/obj/item/computer_hardware/hard_drive/role/on_remove(obj/item/modular_computer/remove_from, mob/user)
return
/obj/item/computer_hardware/hard_drive/role/Initialize(mapload)
. = ..()
var/list/progs_to_store = list()
if(disk_flags & DISK_POWER)
progs_to_store += new /datum/computer_file/program/power_monitor(src)
progs_to_store += new /datum/computer_file/program/supermatter_monitor(src)
if(disk_flags & DISK_ATMOS)
progs_to_store += new /datum/computer_file/program/atmosscan(src)
if(disk_flags & DISK_MANIFEST)
progs_to_store += new /datum/computer_file/program/crew_manifest(src)
if(disk_flags & DISK_SEC)
progs_to_store += new /datum/computer_file/program/records/security(src)
if(disk_flags & DISK_JANI)
progs_to_store += new /datum/computer_file/program/radar/custodial_locator(src)
if((disk_flags & DISK_CHEM) || (disk_flags & DISK_MED))
var/datum/computer_file/program/phys_scanner/scanner = new(src)
if(disk_flags & DISK_CHEM)
scanner.available_modes += DISK_CHEM
if(disk_flags & DISK_MED)
progs_to_store += new /datum/computer_file/program/records/medical(src)
scanner.available_modes += DISK_MED
progs_to_store += scanner
if(disk_flags & DISK_ROBOS)
var/datum/computer_file/program/robocontrol/robo = new(src)
robo.cart_mode = TRUE
progs_to_store += robo
if(disk_flags & DISK_CARGO)
progs_to_store += new /datum/computer_file/program/shipping(src)
if(disk_flags & DISK_SIGNAL)
progs_to_store += new /datum/computer_file/program/signaler(src)
if(disk_flags & DISK_NEWS)
progs_to_store += new /datum/computer_file/program/newscaster(src)
if(disk_flags & DISK_BUDGET)
progs_to_store += new /datum/computer_file/program/budgetorders(src)
if(disk_flags & DISK_STATUS)
progs_to_store += new /datum/computer_file/program/status(src)
if(disk_flags & DISK_SCI)
progs_to_store += new /datum/computer_file/program/science(src)
for (var/datum/computer_file/program/prog in progs_to_store)
prog.usage_flags = PROGRAM_ALL
prog.required_access = list()
prog.transfer_access = list()
store_file(prog)
/obj/item/computer_hardware/hard_drive/role/proc/CanSpam()
return can_spam
// Disk Definitions
/obj/item/computer_hardware/hard_drive/role/engineering
name = "Power-ON disk"
desc = "Engineers ignoring station power-draw since 2400."
icon_state = "datadisk2"
disk_flags = DISK_POWER
/obj/item/computer_hardware/hard_drive/role/atmos
name = "\improper BreatheDeep disk"
icon_state = "datadisk2"
disk_flags = DISK_ATMOS | DISK_ROBOS
bot_access = list(
FLOOR_BOT,
FIRE_BOT,
)
/obj/item/computer_hardware/hard_drive/role/medical
name = "\improper Med-U disk"
icon_state = "datadisk7"
disk_flags = DISK_MED | DISK_ROBOS
bot_access = list(
MED_BOT,
)
/obj/item/computer_hardware/hard_drive/role/chemistry
name = "\improper ChemWhiz disk"
icon_state = "datadisk7"
disk_flags = DISK_CHEM
/obj/item/computer_hardware/hard_drive/role/security
name = "\improper R.O.B.U.S.T. disk"
icon_state = "datadisk9"
disk_flags = DISK_SEC | DISK_MANIFEST | DISK_ROBOS
bot_access = list(
SEC_BOT,
ADVANCED_SEC_BOT,
)
/obj/item/computer_hardware/hard_drive/role/detective
name = "\improper D.E.T.E.C.T. disk"
icon_state = "datadisk9"
disk_flags = DISK_MED | DISK_SEC | DISK_MANIFEST | DISK_ROBOS
bot_access = list(
SEC_BOT,
ADVANCED_SEC_BOT,
)
/obj/item/computer_hardware/hard_drive/role/janitor
name = "\improper CustodiPRO disk"
icon_state = "datadisk5"
desc = "The ultimate in clean-room design."
disk_flags = DISK_JANI | DISK_ROBOS
bot_access = list(
CLEAN_BOT,
)
/obj/item/computer_hardware/hard_drive/role/lawyer
name = "\improper P.R.O.V.E. disk"
icon_state = "datadisk9"
disk_flags = DISK_SEC
can_spam = TRUE
/obj/item/computer_hardware/hard_drive/role/curator
name = "\improper Lib-Tweet disk"
icon_state = "datadisk2"
disk_flags = DISK_NEWS
/obj/item/computer_hardware/hard_drive/role/roboticist
name = "\improper B.O.O.P. Remote Control disk"
icon_state = "datadisk5"
desc = "Packed with heavy duty quad-bot interlink!"
disk_flags = DISK_ROBOS
bot_access = list(
FLOOR_BOT,
CLEAN_BOT,
MED_BOT,
FIRE_BOT,
VIBE_BOT,
)
/obj/item/computer_hardware/hard_drive/role/signal
name = "generic signaler disk"
icon_state = "datadisk5"
desc = "A data disk with an integrated radio signaler module."
disk_flags = DISK_SIGNAL
/obj/item/computer_hardware/hard_drive/role/signal/ordnance
name = "\improper Signal Ace 2 disk"
icon_state = "datadisk5"
desc = "Complete with integrated radio signaler!"
disk_flags = DISK_ATMOS | DISK_SIGNAL | DISK_CHEM
/obj/item/computer_hardware/hard_drive/role/quartermaster
name = "space parts & space vendors disk"
icon_state = "datadisk0"
desc = "Perfect for the Quartermaster on the go!"
disk_flags = DISK_CARGO | DISK_ROBOS | DISK_BUDGET
bot_access = list(
MULE_BOT,
)
/obj/item/computer_hardware/hard_drive/role/head
name = "\improper Easy-Record DELUXE disk"
icon_state = "datadisk7"
disk_flags = DISK_MANIFEST | DISK_STATUS | DISK_BUDGET | DISK_SCI
/obj/item/computer_hardware/hard_drive/role/hop
name = "\improper HumanResources9001 disk"
icon_state = "datadisk7"
disk_flags = DISK_MANIFEST | DISK_STATUS | DISK_JANI | DISK_SEC | DISK_NEWS | DISK_CARGO | DISK_ROBOS | DISK_BUDGET | DISK_SCI
bot_access = list(
MULE_BOT,
CLEAN_BOT,
VIBE_BOT,
)
/obj/item/computer_hardware/hard_drive/role/hos
name = "\improper R.O.B.U.S.T. DELUXE disk"
icon_state = "datadisk7"
disk_flags = DISK_MANIFEST | DISK_STATUS | DISK_SEC | DISK_ROBOS | DISK_BUDGET | DISK_SCI
bot_access = list(
SEC_BOT,
ADVANCED_SEC_BOT,
)
/obj/item/computer_hardware/hard_drive/role/ce
name = "\improper Power-On DELUXE disk"
icon_state = "datadisk7"
disk_flags = DISK_POWER | DISK_ATMOS | DISK_MANIFEST | DISK_STATUS | DISK_ROBOS | DISK_BUDGET | DISK_SCI
bot_access = list(
FLOOR_BOT,
FIRE_BOT,
)
/obj/item/computer_hardware/hard_drive/role/cmo
name = "\improper Med-U DELUXE disk"
icon_state = "datadisk7"
disk_flags = DISK_MANIFEST | DISK_STATUS | DISK_CHEM | DISK_ROBOS | DISK_BUDGET | DISK_SCI
bot_access = list(
MED_BOT,
)
/obj/item/computer_hardware/hard_drive/role/rd
name = "\improper Signal Ace DELUXE disk"
icon_state = "rndmajordisk"
disk_flags = DISK_ATMOS | DISK_MANIFEST | DISK_STATUS | DISK_CHEM | DISK_ROBOS | DISK_BUDGET | DISK_SIGNAL | DISK_SCI
bot_access = list(
FLOOR_BOT,
CLEAN_BOT,
MED_BOT,
FIRE_BOT,
VIBE_BOT,
)
/obj/item/computer_hardware/hard_drive/role/captain
name = "\improper Value-PAK disk"
icon_state = "datadisk8"
desc = "Now with 350% more value!" //Give the Captain...EVERYTHING! (Except Mime, Clown, and Syndie)
disk_flags = ~0
can_spam = TRUE
bot_access = list(
SEC_BOT,
ADVANCED_SEC_BOT,
MULE_BOT,
FLOOR_BOT,
CLEAN_BOT,
MED_BOT,
FIRE_BOT,
VIBE_BOT,
)
@@ -0,0 +1,154 @@
/**
* Command
*/
/obj/item/computer_hardware/hard_drive/portable/command
icon_state = "datadisk7"
/obj/item/computer_hardware/hard_drive/portable/command/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/crew_manifest(src))
store_file(new /datum/computer_file/program/science(src))
store_file(new /datum/computer_file/program/status(src))
/obj/item/computer_hardware/hard_drive/portable/command/captain
name = "captain data disk"
desc = "Removable disk used to download essential Captain tablet apps."
icon_state = "datadisk10"
/obj/item/computer_hardware/hard_drive/portable/command/captain/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/records/security(src))
store_file(new /datum/computer_file/program/records/medical(src))
store_file(new /datum/computer_file/program/phys_scanner/all(src))
/obj/item/computer_hardware/hard_drive/portable/command/cmo
name = "chief medical officer data disk"
desc = "Removable disk used to download essential CMO tablet apps."
/obj/item/computer_hardware/hard_drive/portable/command/cmo/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/phys_scanner/all(src))
store_file(new /datum/computer_file/program/records/medical(src))
/obj/item/computer_hardware/hard_drive/portable/command/rd
name = "research director data disk"
desc = "Removable disk used to download essential RD tablet apps."
/obj/item/computer_hardware/hard_drive/portable/command/rd/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/signal_commander(src))
store_file(new /datum/computer_file/program/phys_scanner/chemistry(src))
/obj/item/computer_hardware/hard_drive/portable/command/hos
name = "head of security data disk"
desc = "Removable disk used to download essential HoS tablet apps."
icon_state = "datadisk9"
/obj/item/computer_hardware/hard_drive/portable/command/hos/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/records/security(src))
/obj/item/computer_hardware/hard_drive/portable/command/hop
name = "head of personnel data disk"
desc = "Removable disk used to download essential HoP tablet apps."
/obj/item/computer_hardware/hard_drive/portable/command/hop/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/records/security(src))
store_file(new /datum/computer_file/program/job_management(src))
/obj/item/computer_hardware/hard_drive/portable/command/ce
name = "chief engineer data disk"
desc = "Removable disk used to download essential CE tablet apps."
/obj/item/computer_hardware/hard_drive/portable/command/ce/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/power_monitor(src))
store_file(new /datum/computer_file/program/supermatter_monitor(src))
store_file(new /datum/computer_file/program/atmosscan(src))
store_file(new /datum/computer_file/program/alarm_monitor(src))
/**
* Security
*/
/obj/item/computer_hardware/hard_drive/portable/security
name = "security officer data disk"
desc = "Removable disk used to download security-related tablet apps."
icon_state = "datadisk9"
/obj/item/computer_hardware/hard_drive/portable/security/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/records/security(src))
store_file(new /datum/computer_file/program/crew_manifest(src))
/**
* Medical
*/
/obj/item/computer_hardware/hard_drive/portable/medical
name = "medical doctor data disk"
desc = "Removable disk used to download medical-related tablet apps."
icon_state = "datadisk7"
/obj/item/computer_hardware/hard_drive/portable/medical/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/phys_scanner/medical(src))
store_file(new /datum/computer_file/program/records/medical(src))
/obj/item/computer_hardware/hard_drive/portable/chemistry
name = "chemistry data disk"
desc = "Removable disk used to download chemistry-related tablet apps."
icon_state = "datadisk5"
/obj/item/computer_hardware/hard_drive/portable/chemistry/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/phys_scanner/chemistry(src))
/**
* Supply
*/
/obj/item/computer_hardware/hard_drive/portable/quartermaster
name = "cargo data disk"
desc = "Removable disk used to download cargo-related tablet apps."
icon_state = "cargodisk"
/obj/item/computer_hardware/hard_drive/portable/quartermaster/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/shipping(src))
store_file(new /datum/computer_file/program/budgetorders(src))
/**
* Science
*/
/obj/item/computer_hardware/hard_drive/portable/ordnance
name = "ordnance data disk"
desc = "Removable disk used to download ordnance-related tablet apps."
icon_state = "datadisk5"
/obj/item/computer_hardware/hard_drive/portable/ordnance/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/signal_commander(src))
/**
* Engineering
*/
/obj/item/computer_hardware/hard_drive/portable/engineering
name = "station engineer data disk"
desc = "Removable disk used to download engineering-related tablet apps."
icon_state = "datadisk6"
/obj/item/computer_hardware/hard_drive/portable/engineering/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/power_monitor(src))
store_file(new /datum/computer_file/program/supermatter_monitor(src))
/obj/item/computer_hardware/hard_drive/portable/atmos
name = "atmospheric technician data disk"
desc = "Removable disk used to download atmos-related tablet apps."
icon_state = "datadisk6"
/obj/item/computer_hardware/hard_drive/portable/atmos/install_default_programs()
. = ..()
store_file(new /datum/computer_file/program/atmosscan(src))
store_file(new /datum/computer_file/program/alarm_monitor(src))
@@ -6,12 +6,3 @@
w_class = WEIGHT_CLASS_TINY
device_type = MC_SENSORS
expansion_hw = TRUE
/obj/item/computer_hardware/radio_card
name = "integrated radio card"
desc = "An integrated signaling assembly for computers to send an outgoing frequency signal. Required by certain programs."
icon_state = "signal_card"
w_class = WEIGHT_CLASS_TINY
device_type = MC_SIGNALER
expansion_hw = TRUE
power_usage = 10
@@ -1,15 +1,15 @@
/obj/item/computer_hardware/hard_drive/role/virus
/obj/item/computer_hardware/hard_drive/portable/virus
name = "\improper generic virus disk"
icon_state = "virusdisk"
var/charges = 5
/obj/item/computer_hardware/hard_drive/role/virus/proc/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
/obj/item/computer_hardware/hard_drive/portable/virus/proc/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
return
/obj/item/computer_hardware/hard_drive/role/virus/clown
/obj/item/computer_hardware/hard_drive/portable/virus/clown
name = "\improper H.O.N.K. disk"
/obj/item/computer_hardware/hard_drive/role/virus/clown/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
/obj/item/computer_hardware/hard_drive/portable/virus/clown/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
if(charges <= 0)
to_chat(user, span_notice("ERROR: Out of charges."))
return
@@ -21,10 +21,10 @@
else
to_chat(user, span_notice("ERROR: Could not find device."))
/obj/item/computer_hardware/hard_drive/role/virus/mime
/obj/item/computer_hardware/hard_drive/portable/virus/mime
name = "\improper sound of silence disk"
/obj/item/computer_hardware/hard_drive/role/virus/mime/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
/obj/item/computer_hardware/hard_drive/portable/virus/mime/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
if(charges <= 0)
to_chat(user, span_notice("ERROR: Out of charges."))
return
@@ -41,22 +41,16 @@
else
to_chat(user, span_notice("ERROR: Could not find device."))
/obj/item/computer_hardware/hard_drive/role/virus/deto
/obj/item/computer_hardware/hard_drive/portable/virus/deto
name = "\improper D.E.T.O.M.A.T.I.X. disk"
charges = 6
/obj/item/computer_hardware/hard_drive/role/virus/deto/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
/obj/item/computer_hardware/hard_drive/portable/virus/deto/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
if(charges <= 0)
to_chat(user, span_notice("ERROR: Out of charges."))
return
var/difficulty = 0
var/obj/item/computer_hardware/hard_drive/role/disk = target.all_components[MC_HDD_JOB]
if(disk)
difficulty += bit_count(disk.disk_flags & (DISK_MED | DISK_SEC | DISK_POWER | DISK_MANIFEST))
if(disk.disk_flags & DISK_MANIFEST)
difficulty++ //if cartridge has manifest access it has extra snowflake difficulty
var/difficulty = target.get_detomatix_difficulty()
if(SEND_SIGNAL(target, COMSIG_TABLET_CHECK_DETONATE) & COMPONENT_TABLET_NO_DETONATE || prob(difficulty * 15))
user.show_message(span_danger("ERROR: Target could not be bombed."), MSG_VISUAL)
charges--
@@ -81,13 +75,13 @@
ADD_TRAIT(target, TRAIT_PDA_MESSAGE_MENU_RIGGED, reference)
addtimer(TRAIT_CALLBACK_REMOVE(target, TRAIT_PDA_MESSAGE_MENU_RIGGED, reference), 10 SECONDS)
/obj/item/computer_hardware/hard_drive/role/virus/frame
/obj/item/computer_hardware/hard_drive/portable/virus/frame
name = "\improper F.R.A.M.E. disk"
var/telecrystals = 0
var/current_progression = 0
/obj/item/computer_hardware/hard_drive/role/virus/frame/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
/obj/item/computer_hardware/hard_drive/portable/virus/frame/send_virus(obj/item/modular_computer/tablet/target, mob/living/user)
if(charges <= 0)
to_chat(user, span_notice("ERROR: Out of charges."))
return
@@ -126,7 +120,7 @@
else
to_chat(user, span_notice("ERROR: Could not find device."))
/obj/item/computer_hardware/hard_drive/role/virus/frame/attackby(obj/item/I, mob/user, params)
/obj/item/computer_hardware/hard_drive/portable/virus/frame/attackby(obj/item/I, mob/user, params)
. = ..()
if(istype(I, /obj/item/stack/telecrystal))
if(!charges)