diff --git a/code/__DEFINES/dcs/signals/signals_mod.dm b/code/__DEFINES/dcs/signals/signals_mod.dm index 58fd8ca689e..c08377d50db 100644 --- a/code/__DEFINES/dcs/signals/signals_mod.dm +++ b/code/__DEFINES/dcs/signals/signals_mod.dm @@ -45,3 +45,5 @@ #define COMSIG_MOD_TETHER_SNAP "mod_tether_snap" /// Called when a MOD module generats its worn overlay #define COMSIG_MODULE_GENERATE_WORN_OVERLAY "mod_module_generate_worn_overlay" +/// Called when the MOD control unit fetches its visor icon +#define COMSIG_MOD_GET_VISOR_OVERLAY "mod_get_visor_overlay" diff --git a/code/modules/mod/mod_control.dm b/code/modules/mod/mod_control.dm index 8d5c5c20954..3b1f2a648bc 100644 --- a/code/modules/mod/mod_control.dm +++ b/code/modules/mod/mod_control.dm @@ -771,3 +771,10 @@ mod_link.end_call() mod_link.frequency = null + +/obj/item/mod/control/proc/get_visor_overlay(mutable_appearance/standing) + var/list/overrides = list() + SEND_SIGNAL(src, COMSIG_MOD_GET_VISOR_OVERLAY, standing, overrides) + if (length(overrides)) + return overrides[1] + return mutable_appearance(worn_icon, "[skin]-helmet-visor", layer = standing.layer + 0.1) diff --git a/code/modules/mod/modules/modules_antag.dm b/code/modules/mod/modules/modules_antag.dm index 3eef7d47f15..ba5e1711fcb 100644 --- a/code/modules/mod/modules/modules_antag.dm +++ b/code/modules/mod/modules/modules_antag.dm @@ -102,6 +102,17 @@ else REMOVE_TRAIT(mod.wearer, TRAIT_HEAD_INJURY_BLOCKED, REF(src)) +/obj/item/mod/module/armor_booster/on_install() + RegisterSignal(mod, COMSIG_MOD_GET_VISOR_OVERLAY, PROC_REF(on_visor_overlay)) + +/obj/item/mod/module/armor_booster/on_uninstall(deleting) + UnregisterSignal(mod, COMSIG_MOD_GET_VISOR_OVERLAY) + +/obj/item/mod/module/armor_booster/proc/on_visor_overlay(datum/source, mutable_appearance/standing, list/overrides) + SIGNAL_HANDLER + if (active) + overrides += mutable_appearance(overlay_icon_file, "module_armorbooster_visor-[mod.skin]", layer = standing.layer + 0.1) + ///Energy Shield - Gives you a rechargeable energy shield that nullifies attacks. /obj/item/mod/module/energy_shield name = "MOD energy shield module" diff --git a/code/modules/mod/modules/modules_general.dm b/code/modules/mod/modules/modules_general.dm index 3f4dfe405f7..a766e3f6e4d 100644 --- a/code/modules/mod/modules/modules_general.dm +++ b/code/modules/mod/modules/modules_general.dm @@ -664,13 +664,15 @@ complexity = 1 idle_power_cost = DEFAULT_CHARGE_DRAIN * 0.3 incompatible_modules = list(/obj/item/mod/module/plasma_stabilizer) - overlay_state_inactive = "module_plasma" required_slots = list(ITEM_SLOT_HEAD) -/obj/item/mod/module/plasma_stabilizer/generate_worn_overlay() - if(locate(/obj/item/mod/module/infiltrator) in mod.modules) +/obj/item/mod/module/plasma_stabilizer/generate_worn_overlay(mutable_appearance/standing) + if (!active) return list() - return ..() + var/mutable_appearance/visor_overlay = mod.get_visor_overlay(standing) + visor_overlay.appearance_flags |= RESET_COLOR + visor_overlay.color = COLOR_VOID_PURPLE + return list(visor_overlay) /obj/item/mod/module/plasma_stabilizer/on_equip() ADD_TRAIT(mod.wearer, TRAIT_HEAD_ATMOS_SEALED, REF(src)) diff --git a/code/modules/mod/modules/modules_maint.dm b/code/modules/mod/modules/modules_maint.dm index 48089b0125c..7344993802c 100644 --- a/code/modules/mod/modules/modules_maint.dm +++ b/code/modules/mod/modules/modules_maint.dm @@ -87,7 +87,6 @@ desc = "A Super Cool Awesome Visor (SCAV), intended for modular suits." icon_state = "rave_visor" complexity = 1 - overlay_state_inactive = "module_rave" required_slots = list(ITEM_SLOT_HEAD|ITEM_SLOT_MASK) /// The client colors applied to the wearer. var/datum/client_colour/rave_screen @@ -132,9 +131,13 @@ SEND_SOUND(mod.wearer, sound('sound/machines/terminal/terminal_off.ogg', volume = 50, channel = CHANNEL_JUKEBOX)) /obj/item/mod/module/visor/rave/generate_worn_overlay(mutable_appearance/standing) - . = ..() - for(var/mutable_appearance/appearance as anything in .) - appearance.color = isnull(music_player.active_song_sound) ? null : rainbow_order[rave_number] + if (!active) + return list() + var/mutable_appearance/visor_overlay = mod.get_visor_overlay(standing) + visor_overlay.appearance_flags |= RESET_COLOR + if (!isnull(music_player.active_song_sound)) + visor_overlay.color = rainbow_order[rave_number] + return list(visor_overlay) /obj/item/mod/module/visor/rave/on_active_process(seconds_per_tick) rave_number++ diff --git a/icons/mob/clothing/modsuit/mod_clothing.dmi b/icons/mob/clothing/modsuit/mod_clothing.dmi index 815983f7094..8a39f37bf0b 100644 Binary files a/icons/mob/clothing/modsuit/mod_clothing.dmi and b/icons/mob/clothing/modsuit/mod_clothing.dmi differ diff --git a/icons/mob/clothing/modsuit/mod_modules.dmi b/icons/mob/clothing/modsuit/mod_modules.dmi index 3c68a87d549..d6dfa4c50a2 100644 Binary files a/icons/mob/clothing/modsuit/mod_modules.dmi and b/icons/mob/clothing/modsuit/mod_modules.dmi differ