diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index f532b5a57f5..2319f3b5ca7 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -2,6 +2,10 @@ // SUIT STORAGE UNIT ///////////////// ////////////////////////////////////// +#define REPAIR_NEEDS_WIRECUTTERS 1 +#define REPAIR_NEEDS_WIRES 2 +#define REPAIR_NEEDS_CROWBAR 3 +#define REPAIR_NEEDS_METAL 4 /obj/machinery/suit_storage_unit name = "suit storage unit" @@ -33,6 +37,24 @@ var/panelopen = 0 var/safetieson = 1 var/cycletime_left = 0 + var/repair_stage = 0 + +/obj/machinery/suit_storage_unit/examine(mob/user) + ..() + if(isbroken && isopen) + if(!panelopen) + user << "A small LED above the maintenance panel is flashing red." + return + if(in_range(user, src)) + switch(repair_stage) + if(REPAIR_NEEDS_WIRECUTTERS) + user << "The wires inside are charred and snapped." + if(REPAIR_NEEDS_WIRES) + user << "There are no wires inside." + if(REPAIR_NEEDS_CROWBAR) + user << "Some of the interior metal is burnt and broken." + if(REPAIR_NEEDS_METAL) + user << "It lacks interior plating." @@ -376,6 +398,7 @@ src.isbroken = 1 src.isopen = 1 src.islocked = 0 + repair_stage = REPAIR_NEEDS_WIRECUTTERS src.eject_occupant(OCCUPANT) src.isUV = 0 //Cycle ends src.update_icon() @@ -473,6 +496,12 @@ return return +/obj/machinery/suit_storage_unit/proc/fix() + audible_message("[src] beeps and comes back online!") + playsound(src, 'sound/machines/defib_ready.ogg', 50, 1) + repair_stage = 0 + isbroken = 0 + update_icon() /obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) if(!src.ispowered) @@ -484,10 +513,66 @@ return if(istype(I, /obj/item/weapon/screwdriver)) src.panelopen = !src.panelopen - playsound(src.loc, 'sound/items/Screwdriver.ogg', 100, 1) + playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) user << text("You [] the unit's maintenance panel.",(src.panelopen ? "open up" : "close") ) src.updateUsrDialog() return + if(isbroken && panelopen) + if(istype(I, /obj/item/weapon/wirecutters) && repair_stage == REPAIR_NEEDS_WIRECUTTERS) + user.visible_message("[user] starts removing [src]'s damaged wires.", \ + "You begin removing the damaged wires from [src]...") + playsound(src, 'sound/items/Wirecutter.ogg', 50, 1) + if(!do_after(user, 30, target = src)) + return + user.visible_message("[user] removes the damaged wires from [src].", \ + "You remove the damaged wiring from [src].") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + repair_stage = REPAIR_NEEDS_WIRES + return + if(istype(I, /obj/item/stack/cable_coil) && repair_stage == REPAIR_NEEDS_WIRES) + var/obj/item/stack/cable_coil/C = I + if(C.amount < 5) + user << "You need at least five cables to rewire [src]!" + return + user.visible_message("[user] begins replacing [src] wires.", \ + "You begin rewiring [src]...") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(!do_after(user, 30, target = src)) + return + user.visible_message("[user] adds wires to [src].", \ + "You rewire [src].") + C.amount -= 5 + if(C.amount <= 0) + user.drop_item() + qdel(C) + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + repair_stage = REPAIR_NEEDS_CROWBAR + return + if(istype(I, /obj/item/weapon/crowbar) && repair_stage == REPAIR_NEEDS_CROWBAR) + user.visible_message("[user] starts removing [src]'s broken interior plating.", \ + "You begin removing the damaged interior plating from [src]...") + playsound(src, 'sound/items/Crowbar.ogg', 50, 1) + if(!do_after(user, 30, target = src)) + return + user.visible_message("[user] removes the damaged interior plating from [src].", \ + "You remove the damaged interior plating from [src].") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + repair_stage = REPAIR_NEEDS_METAL + return + if(istype(I, /obj/item/stack/sheet/metal) && repair_stage == REPAIR_NEEDS_METAL) + var/obj/item/stack/sheet/metal/M = I + if(M.amount < 3) + user << "You need at least three sheets of metal to repair [src]!" + return + user.visible_message("[user] starts adding interior plating to [src].", \ + "You begin adding interior plating to [src]...") + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + if(!do_after(user, 30, target = src)) + return + user.visible_message("[user] adds interior plating to [src].", \ + "You add interior plating to [src].") + fix() + return if ( istype(I, /obj/item/weapon/grab) ) var/obj/item/weapon/grab/G = I store_mob(G.affecting, user) @@ -566,3 +651,7 @@ user << "The console controls are far too complicated for your tiny brain!" return +#undef REPAIR_NEEDS_WIRECUTTERS +#undef REPAIR_NEEDS_WIRES +#undef REPAIR_NEEDS_CROWBAR +#undef REPAIR_NEEDS_METAL diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index bfb9df96d7f..d81bda3467e 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -5,6 +5,11 @@ density = 0 layer = 3.5 +/obj/structure/sign/basic + name = "blank sign" + desc = "How can signs be real if our eyes aren't real?" + icon_state = "backing" + /obj/structure/sign/ex_act(severity, target) qdel(src) @@ -12,6 +17,38 @@ qdel(src) return +/obj/structure/sign/attackby(obj/item/O, mob/user, params) + if(istype(O, /obj/item/weapon/wrench)) + user.visible_message("[user] starts removing [src]...", \ + "You start unfastening [src].") + playsound(src, 'sound/items/Ratchet.ogg', 50, 1) + if(!do_after(user, 30, target = src)) + return + playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) + user.visible_message("[user] unfastens [src].", \ + "You unfasten [src].") + new /obj/item/wallframe/sign_backing(get_turf(user)) + qdel(src) + if(istype(O, /obj/item/weapon/pen)) + var/list/sign_types = list() + for(var/S in typesof(/obj/structure/sign)) + sign_types.Add(S) + sign_types.Remove(src.type) + var/sign_type + sign_type = input(user, "Select a sign type.", "Sign Customization") as null|anything in sign_types + if(!sign_type) + return + new sign_type(get_turf(src)) + qdel(src) + +/obj/item/wallframe/sign_backing + name = "sign backing" + desc = "A blank sign with adhesive backing." + icon = 'icons/obj/decals.dmi' + icon_state = "backing" + w_class = 3 + burn_state = 0 //Burnable, made of wood + result_path = /obj/structure/sign/basic /obj/structure/sign/map name = "station map" diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index 52703d3b74e..e553b3cf34c 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ