mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-25 09:01:40 +00:00
Title. The issue being hardware/on_remove() calling /try_eject() even if the holder is being destroyed, which is quirky. I also replaced an instance of /New() with /Initialize() and deleted a troublesome /Destroy(). handle_atom_del() is awful. Nearly every (minus the storage component; it's a tangled trial of mental gymnastic) behavior implemented there can pretty much be moved to Exited() and it'll work just as fine, if not better against edge cases such as recall spells. But that's not the scope of this PR. I'm here to fix #57161.
98 lines
2.9 KiB
Plaintext
98 lines
2.9 KiB
Plaintext
/obj/item/computer_hardware/battery
|
|
name = "power cell controller"
|
|
desc = "A charge controller for standard power cells, used in all kinds of modular computers."
|
|
icon_state = "cell_con"
|
|
critical = 1
|
|
malfunction_probability = 1
|
|
var/obj/item/stock_parts/cell/battery
|
|
device_type = MC_CELL
|
|
|
|
/obj/item/computer_hardware/battery/get_cell()
|
|
return battery
|
|
|
|
/obj/item/computer_hardware/battery/Initialize(mapload, battery_type)
|
|
. = ..()
|
|
if(battery_type)
|
|
battery = new battery_type(src)
|
|
|
|
/obj/item/computer_hardware/battery/Destroy()
|
|
battery = null
|
|
return ..()
|
|
|
|
///What happens when the battery is removed (or deleted) from the module, through try_eject() or not.
|
|
/obj/item/computer_hardware/battery/Exited(atom/A, atom/newloc)
|
|
if(A == battery)
|
|
battery = null
|
|
if(holder?.enabled && !holder.use_power())
|
|
holder.shutdown_computer()
|
|
return ..()
|
|
|
|
/obj/item/computer_hardware/battery/try_insert(obj/item/I, mob/living/user = null)
|
|
if(!holder)
|
|
return FALSE
|
|
|
|
if(!istype(I, /obj/item/stock_parts/cell))
|
|
return FALSE
|
|
|
|
if(battery)
|
|
to_chat(user, "<span class='warning'>You try to connect \the [I] to \the [src], but its connectors are occupied.</span>")
|
|
return FALSE
|
|
|
|
if(I.w_class > holder.max_hardware_size)
|
|
to_chat(user, "<span class='warning'>This power cell is too large for \the [holder]!</span>")
|
|
return FALSE
|
|
|
|
if(user && !user.transferItemToLoc(I, src))
|
|
return FALSE
|
|
|
|
battery = I
|
|
to_chat(user, "<span class='notice'>You connect \the [I] to \the [src].</span>")
|
|
|
|
return TRUE
|
|
|
|
/obj/item/computer_hardware/battery/try_eject(mob/living/user, forced = FALSE)
|
|
if(!battery)
|
|
to_chat(user, "<span class='warning'>There is no power cell connected to \the [src].</span>")
|
|
return FALSE
|
|
else
|
|
if(user)
|
|
user.put_in_hands(battery)
|
|
to_chat(user, "<span class='notice'>You detach \the [battery] from \the [src].</span>")
|
|
else
|
|
battery.forceMove(drop_location())
|
|
return TRUE
|
|
|
|
/obj/item/stock_parts/cell/computer
|
|
name = "standard battery"
|
|
desc = "A standard power cell, commonly seen in high-end portable microcomputers or low-end laptops."
|
|
icon = 'icons/obj/module.dmi'
|
|
icon_state = "cell_mini"
|
|
w_class = WEIGHT_CLASS_TINY
|
|
maxcharge = 750
|
|
|
|
/obj/item/stock_parts/cell/computer/advanced
|
|
name = "advanced battery"
|
|
desc = "An advanced power cell, often used in most laptops. It is too large to be fitted into smaller devices."
|
|
icon_state = "cell"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
maxcharge = 1500
|
|
|
|
/obj/item/stock_parts/cell/computer/super
|
|
name = "super battery"
|
|
desc = "An advanced power cell, often used in high-end laptops."
|
|
icon_state = "cell"
|
|
w_class = WEIGHT_CLASS_SMALL
|
|
maxcharge = 2000
|
|
|
|
/obj/item/stock_parts/cell/computer/micro
|
|
name = "micro battery"
|
|
desc = "A small power cell, commonly seen in most portable microcomputers."
|
|
icon_state = "cell_micro"
|
|
maxcharge = 500
|
|
|
|
/obj/item/stock_parts/cell/computer/nano
|
|
name = "nano battery"
|
|
desc = "A tiny power cell, commonly seen in low-end portable microcomputers."
|
|
icon_state = "cell_micro"
|
|
maxcharge = 300
|