Fixes some stupid behavior in computer hardware code. (#61350)

This commit is contained in:
LemonInTheDark
2021-09-13 18:30:28 -07:00
committed by GitHub
parent 2635258d0a
commit a3dfa16a98
9 changed files with 76 additions and 74 deletions
@@ -12,8 +12,8 @@
var/max_idle_programs = 2 // 2 idle, + 1 active = 3 as said in description.
device_type = MC_CPU
/obj/item/computer_hardware/processor_unit/on_remove(obj/item/modular_computer/MC, mob/user)
MC.shutdown_computer()
/obj/item/computer_hardware/processor_unit/on_remove(obj/item/modular_computer/remove_from, mob/user)
remove_from.shutdown_computer()
/obj/item/computer_hardware/processor_unit/small
name = "microprocessor"
@@ -9,29 +9,29 @@
var/obj/item/modular_computer/holder = null
// Computer that holds this hardware, if any.
// If the hardware uses extra power, change this.
/// If the hardware uses extra power, change this.
var/power_usage = 0
// If the hardware is turned off set this to 0.
/// If the hardware is turned off set this to 0.
var/enabled = TRUE
// Prevent disabling for important component, like the CPU.
/// Prevent disabling for important component, like the CPU.
var/critical = FALSE
// Prevents direct installation of removable media.
/// Prevents direct installation of removable media.
var/can_install = TRUE
// Hardware that fits into expansion bays.
/// Hardware that fits into expansion bays.
var/expansion_hw = FALSE
// Whether the hardware is removable or not.
/// Whether the hardware is removable or not.
var/removable = TRUE
// Current damage level
/// Current damage level
var/damage = 0
// Maximal damage level.
// Maximal damage level.
var/max_damage = 100
// "Malfunction" threshold. When damage exceeds this value the hardware piece will semi-randomly fail and do !!FUN!! things
/// "Malfunction" threshold. When damage exceeds this value the hardware piece will semi-randomly fail and do !!FUN!! things
var/damage_malfunction = 20
// "Failure" threshold. When damage exceeds this value the hardware piece will not work at all.
/// "Failure" threshold. When damage exceeds this value the hardware piece will not work at all.
var/damage_failure = 50
// Chance of malfunction when the component is damaged
/// Chance of malfunction when the component is damaged
var/malfunction_probability = 10
// What define is used to qualify this piece of hardware? Important for upgraded versions of the same hardware.
/// What define is used to qualify this piece of hardware? Important for upgraded versions of the same hardware.
var/device_type
/obj/item/computer_hardware/New(obj/L)
@@ -41,7 +41,7 @@
/obj/item/computer_hardware/Destroy()
if(holder)
holder.uninstall_component(src)
holder.forget_component(src)
return ..()
@@ -69,11 +69,11 @@
to_chat(user, "******************************")
return TRUE
// Called on multitool click, prints diagnostic information to the user.
/// Called on multitool click, prints diagnostic information to the user.
/obj/item/computer_hardware/proc/diagnostics(mob/user)
to_chat(user, "Hardware Integrity Test... (Corruption: [damage]/[max_damage]) [damage > damage_failure ? "FAIL" : damage > damage_malfunction ? "WARN" : "PASS"]")
// Handles damage checks
/// Handles damage checks
/obj/item/computer_hardware/proc/check_functionality()
if(!enabled) // Disabled.
return FALSE
@@ -96,20 +96,20 @@
else if(damage)
. += span_notice("It seems to be slightly damaged.")
// Component-side compatibility check.
/obj/item/computer_hardware/proc/can_install(obj/item/modular_computer/M, mob/living/user = null)
/// Component-side compatibility check.
/obj/item/computer_hardware/proc/can_install(obj/item/modular_computer/install_into, mob/living/user = null)
return can_install
// Called when component is installed into PC.
/obj/item/computer_hardware/proc/on_install(obj/item/modular_computer/M, mob/living/user = null)
/// Called when component is installed into PC.
/obj/item/computer_hardware/proc/on_install(obj/item/modular_computer/install_into, mob/living/user = null)
return
// Called when component is removed from PC.
/obj/item/computer_hardware/proc/on_remove(obj/item/modular_computer/M, mob/living/user)
if(M.physical || !QDELETED(M))
/// Called when component is removed from PC.
/obj/item/computer_hardware/proc/on_remove(obj/item/modular_computer/remove_from, mob/living/user)
if(remove_from.physical && !QDELETED(remove_from) && !QDELETED(src))
try_eject(forced = TRUE)
// Called when someone tries to insert something in it - paper in printer, card in card reader, etc.
/// Called when someone tries to insert something in it - paper in printer, card in card reader, etc.
/obj/item/computer_hardware/proc/try_insert(obj/item/I, mob/living/user = null)
return FALSE
@@ -16,7 +16,8 @@
battery = new battery_type(src)
/obj/item/computer_hardware/battery/Destroy()
battery = null
if(battery)
QDEL_NULL(battery)
return ..()
///What happens when the battery is removed (or deleted) from the module, through try_eject() or not.
@@ -28,7 +28,8 @@
return ..()
/obj/item/computer_hardware/card_slot/Destroy()
try_eject(forced = TRUE)
if(stored_card) //If you didn't expect this behavior for some dumb reason, do something different instead of directly destroying the slot
QDEL_NULL(stored_card)
return ..()
/obj/item/computer_hardware/card_slot/GetAccess()
@@ -10,8 +10,8 @@
var/used_capacity = 0
var/list/stored_files = list() // List of stored files on this drive. DO NOT MODIFY DIRECTLY!
/obj/item/computer_hardware/hard_drive/on_remove(obj/item/modular_computer/MC, mob/user)
MC.shutdown_computer()
/obj/item/computer_hardware/hard_drive/on_remove(obj/item/modular_computer/remove_from, mob/user)
remove_from.shutdown_computer()
/obj/item/computer_hardware/hard_drive/proc/install_default_programs()
store_file(new/datum/computer_file/program/computerconfig(src)) // Computer configuration utility, allows hardware control and displays more info than status bar
@@ -8,7 +8,7 @@
max_capacity = 16
device_type = MC_SDD
/obj/item/computer_hardware/hard_drive/portable/on_remove(obj/item/modular_computer/MC, mob/user)
/obj/item/computer_hardware/hard_drive/portable/on_remove(obj/item/modular_computer/remove_from, mob/user)
return //this is a floppy disk, let's not shut the computer down when it gets pulled out.
/obj/item/computer_hardware/hard_drive/portable/install_default_programs()
@@ -52,8 +52,8 @@
icon_state = "charger_wire"
w_class = WEIGHT_CLASS_NORMAL
/obj/item/computer_hardware/recharger/wired/can_install(obj/item/modular_computer/M, mob/living/user = null)
if(ismachinery(M.physical) && M.physical.anchored)
/obj/item/computer_hardware/recharger/wired/can_install(obj/item/modular_computer/install_into, mob/living/user = null)
if(ismachinery(install_into.physical) && install_into.physical.anchored)
return ..()
to_chat(user, span_warning("\The [src] is incompatible with portable computers!"))
return FALSE