Fixes modsuit charging and sphere transformation in 0 gravity (#64857)

Handles modsuit borg recharging on the standard core itself instead of the modsuit modsuit, as it should.
This commit is contained in:
Fikou
2022-02-13 17:09:50 -06:00
committed by GitHub
parent 3dafc7dce5
commit b272f1aa74
4 changed files with 34 additions and 12 deletions
+3 -11
View File
@@ -439,8 +439,8 @@
/obj/item/mod/control/proc/set_wearer(mob/user)
wearer = user
SEND_SIGNAL(src, COMSIG_MOD_WEARER_SET, wearer)
RegisterSignal(wearer, COMSIG_ATOM_EXITED, .proc/on_exit)
RegisterSignal(wearer, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, .proc/on_borg_charge)
RegisterSignal(src, COMSIG_ITEM_PRE_UNEQUIP, .proc/on_unequip)
update_charge_alert()
for(var/obj/item/mod/module/module as anything in modules)
@@ -452,6 +452,7 @@
UnregisterSignal(wearer, list(COMSIG_ATOM_EXITED, COMSIG_PROCESS_BORGCHARGER_OCCUPANT))
UnregisterSignal(src, COMSIG_ITEM_PRE_UNEQUIP)
wearer.clear_alert("mod_charge")
SEND_SIGNAL(src, COMSIG_MOD_WEARER_UNSET, wearer)
wearer = null
/obj/item/mod/control/proc/on_unequip()
@@ -536,7 +537,7 @@
return FALSE
do_sparks(5, TRUE, src)
var/check_range = TRUE
return electrocute_mob(user, get_cell(), src, 0.7, check_range)
return electrocute_mob(user, get_charge_source(), src, 0.7, check_range)
/obj/item/mod/control/proc/install(module, mob/user)
var/obj/item/mod/module/new_module = module
@@ -652,15 +653,6 @@
INVOKE_ASYNC(src, .proc/toggle_activate, wearer, TRUE)
return
/obj/item/mod/control/proc/on_borg_charge(datum/source, amount)
SIGNAL_HANDLER
update_charge_alert()
var/obj/item/stock_parts/cell/cell = get_cell()
if(!cell)
return
cell.give(amount)
/obj/item/mod/control/proc/on_potion(atom/movable/source, obj/item/slimepotion/speed/speed_potion, mob/living/user)
SIGNAL_HANDLER
+24 -1
View File
@@ -85,11 +85,16 @@
RegisterSignal(mod, COMSIG_PARENT_EXAMINE, .proc/on_examine)
RegisterSignal(mod, COMSIG_ATOM_ATTACK_HAND, .proc/on_attack_hand)
RegisterSignal(mod, COMSIG_PARENT_ATTACKBY, .proc/on_attackby)
RegisterSignal(mod, COMSIG_MOD_WEARER_SET, .proc/on_wearer_set)
if(mod.wearer)
on_wearer_set(mod, mod.wearer)
/obj/item/mod/core/standard/uninstall()
if(!QDELETED(cell))
cell.forceMove(drop_location())
UnregisterSignal(mod, list(COMSIG_PARENT_EXAMINE, COMSIG_ATOM_ATTACK_HAND, COMSIG_PARENT_ATTACKBY))
UnregisterSignal(mod, list(COMSIG_PARENT_EXAMINE, COMSIG_ATOM_ATTACK_HAND, COMSIG_PARENT_ATTACKBY, COMSIG_MOD_WEARER_SET))
if(mod.wearer)
on_wearer_unset(mod, mod.wearer)
return ..()
/obj/item/mod/core/standard/charge_source()
@@ -202,6 +207,24 @@
return COMPONENT_NO_AFTERATTACK
return NONE
/obj/item/mod/core/standard/proc/on_wearer_set(datum/source, mob/user)
SIGNAL_HANDLER
RegisterSignal(mod.wearer, COMSIG_PROCESS_BORGCHARGER_OCCUPANT, .proc/on_borg_charge)
RegisterSignal(mod, COMSIG_MOD_WEARER_UNSET, .proc/on_wearer_unset)
/obj/item/mod/core/standard/proc/on_wearer_unset(datum/source, mob/user)
SIGNAL_HANDLER
UnregisterSignal(mod.wearer, COMSIG_PROCESS_BORGCHARGER_OCCUPANT)
UnregisterSignal(mod, COMSIG_MOD_WEARER_UNSET)
/obj/item/mod/core/standard/proc/on_borg_charge(datum/source, amount)
SIGNAL_HANDLER
add_charge(amount)
mod.update_charge_alert()
/obj/item/mod/core/ethereal
name = "MOD ethereal core"
icon_state = "mod-core-ethereal"
@@ -457,6 +457,9 @@
var/animate_time = 0.25 SECONDS
/obj/item/mod/module/sphere_transform/on_activation()
if(!mod.wearer.has_gravity())
balloon_alert(mod.wearer, "no gravity!")
return FALSE
. = ..()
if(!.)
return