From e7b5d07c9bfa0eb3cb53bba9db6a0305c37d77df Mon Sep 17 00:00:00 2001 From: DATAxPUNGED <44149906+DATA-xPUNGED@users.noreply.github.com> Date: Mon, 19 Aug 2024 20:48:16 -0300 Subject: [PATCH] Extinguisher cabinet resprite (#85961) ## About The Pull Request Extinguisher cabinets are now Extinguisher racks, which serve the same function but are much, much easier to see. ![image](https://github.com/user-attachments/assets/f27d2e04-22ab-4088-b02e-81fa2d722f89) ![image](https://github.com/user-attachments/assets/10b97b44-2928-4fc9-9c76-f68204cd787c) ## Why It's Good For The Game Visual clarity is nice, a featureless grey box, is not. ## Changelog :cl: sprite: Extinguisher cabinets are now extinguisher racks, which are much easier to see. /:cl: --------- Co-authored-by: ZephyrTFA --- .../items/stacks/sheets/sheet_types.dm | 2 +- code/game/objects/structures/extinguisher.dm | 60 ++++-------------- icons/obj/structures/cabinet.dmi | Bin 5827 -> 6069 bytes 3 files changed, 13 insertions(+), 49 deletions(-) diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 38f8580c348..ba0c10bc9f5 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -125,7 +125,7 @@ GLOBAL_LIST_INIT(metal_recipes, list ( \ new/datum/stack_recipe("apc frame", /obj/item/wallframe/apc, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("air alarm frame", /obj/item/wallframe/airalarm, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("fire alarm frame", /obj/item/wallframe/firealarm, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ - new/datum/stack_recipe("extinguisher cabinet frame", /obj/item/wallframe/extinguisher_cabinet, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ + new/datum/stack_recipe("extinguisher rack frame", /obj/item/wallframe/extinguisher_cabinet, 2, crafting_flags = NONE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("button frame", /obj/item/wallframe/button, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("light switch frame", /obj/item/wallframe/light_switch, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ new/datum/stack_recipe("sparker frame", /obj/item/wallframe/sparker, 1, crafting_flags = NONE, category = CAT_STRUCTURE), \ diff --git a/code/game/objects/structures/extinguisher.dm b/code/game/objects/structures/extinguisher.dm index 6d56cd95c0a..72188fe6eca 100644 --- a/code/game/objects/structures/extinguisher.dm +++ b/code/game/objects/structures/extinguisher.dm @@ -1,22 +1,19 @@ /obj/structure/extinguisher_cabinet - name = "extinguisher cabinet" - desc = "A small wall mounted cabinet designed to hold a fire extinguisher." + name = "extinguisher rack" + desc = "A small wall mounted rack designed to hold a fire extinguisher." icon = 'icons/obj/structures/cabinet.dmi' - icon_state = "cabinet" + icon_state = "rack" anchored = TRUE density = FALSE max_integrity = 200 integrity_failure = 0.25 var/obj/item/extinguisher/stored_extinguisher - var/opened = FALSE WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) /obj/structure/extinguisher_cabinet/Initialize(mapload, ndir, building) . = ..() - if(building) - opened = TRUE - else + if(!building) stored_extinguisher = new /obj/item/extinguisher(src) update_appearance(UPDATE_ICON) register_context() @@ -27,9 +24,8 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) . = ..() if(isnull(held_item)) - context[SCREENTIP_CONTEXT_RMB] = opened ? "Close" : "Open" if(stored_extinguisher) - context[SCREENTIP_CONTEXT_LMB] = "Take extinguisher" //Yes, this shows whether or not it's open! Extinguishers are taken immediately on LMB click when closed + context[SCREENTIP_CONTEXT_LMB] = "Take extinguisher" return CONTEXTUAL_SCREENTIP_SET if(stored_extinguisher) @@ -38,10 +34,9 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) if(held_item.tool_behaviour == TOOL_WRENCH) context[SCREENTIP_CONTEXT_LMB] = "Disassemble cabinet" return CONTEXTUAL_SCREENTIP_SET - if(istype(held_item, /obj/item/extinguisher) && opened) + if(istype(held_item, /obj/item/extinguisher)) context[SCREENTIP_CONTEXT_LMB] = "Insert extinguisher" return CONTEXTUAL_SCREENTIP_SET - return . /obj/structure/extinguisher_cabinet/Destroy() @@ -68,18 +63,18 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) /obj/structure/extinguisher_cabinet/attackby(obj/item/used_item, mob/living/user, params) if(used_item.tool_behaviour == TOOL_WRENCH && !stored_extinguisher) - user.balloon_alert(user, "deconstructing cabinet...") + user.balloon_alert(user, "deconstructing rack...") used_item.play_tool_sound(src) if(used_item.use_tool(src, user, 60)) playsound(loc, 'sound/items/deconstruct.ogg', 50, TRUE) - user.balloon_alert(user, "cabinet deconstructed") + user.balloon_alert(user, "rack deconstructed") deconstruct(TRUE) return if(iscyborg(user) || isalien(user)) return if(istype(used_item, /obj/item/extinguisher)) - if(!stored_extinguisher && opened) + if(!stored_extinguisher) if(!user.transferItemToLoc(used_item, src)) return stored_extinguisher = used_item @@ -87,9 +82,7 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) update_appearance(UPDATE_ICON) return TRUE else - toggle_cabinet(user) - else if(!user.combat_mode) - toggle_cabinet(user) + return else return ..() @@ -103,18 +96,6 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) if(stored_extinguisher) user.put_in_hands(stored_extinguisher) user.balloon_alert(user, "extinguisher removed") - if(!opened) - opened = 1 - playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) - update_appearance(UPDATE_ICON) - else - toggle_cabinet(user) - -/obj/structure/extinguisher_cabinet/attack_hand_secondary(mob/living/user) - if(!user.can_perform_action(src, NEED_DEXTERITY|NEED_HANDS|ALLOW_RESTING)) - return ..() - toggle_cabinet(user) - return SECONDARY_ATTACK_CANCEL_ATTACK_CHAIN /obj/structure/extinguisher_cabinet/attack_tk(mob/user) . = COMPONENT_CANCEL_ATTACK_CHAIN @@ -122,29 +103,16 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) stored_extinguisher.forceMove(loc) to_chat(user, span_notice("You telekinetically remove [stored_extinguisher] from [src].")) stored_extinguisher = null - opened = TRUE - playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) update_appearance(UPDATE_ICON) return - toggle_cabinet(user) - /obj/structure/extinguisher_cabinet/attack_paw(mob/user, list/modifiers) return attack_hand(user, modifiers) -/obj/structure/extinguisher_cabinet/proc/toggle_cabinet(mob/user) - if(opened && broken) - user.balloon_alert(user, "it's broken!") - else - playsound(loc, 'sound/machines/click.ogg', 15, TRUE, -3) - opened = !opened - update_appearance(UPDATE_ICON) - /obj/structure/extinguisher_cabinet/atom_break(damage_flag) . = ..() if(!broken) broken = 1 - opened = 1 if(stored_extinguisher) stored_extinguisher.forceMove(loc) stored_extinguisher = null @@ -163,14 +131,10 @@ WALL_MOUNT_DIRECTIONAL_HELPERS(/obj/structure/extinguisher_cabinet) . = ..() if(stored_extinguisher) . += stored_extinguisher.cabinet_icon_state - if(opened) - . += "cabinet_door_open" - else - . += "cabinet_door_closed" /obj/item/wallframe/extinguisher_cabinet - name = "extinguisher cabinet frame" + name = "extinguisher rack frame" desc = "Used for building wall-mounted extinguisher cabinets." icon = 'icons/obj/structures/cabinet.dmi' - icon_state = "cabinet" + icon_state = "rack" result_path = /obj/structure/extinguisher_cabinet diff --git a/icons/obj/structures/cabinet.dmi b/icons/obj/structures/cabinet.dmi index 3dfb7fe2ef8c1b35aecb173b02404702bd9766cb..aa1b6b2953a2e2a03c3d46b89a109ff61607f5a1 100644 GIT binary patch literal 6069 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