diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 9493efa1e..cfbfc3e4e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -1,7 +1,7 @@ /obj/structure/displaycase name = "display case" icon = 'icons/obj/stationobjs.dmi' - icon_state = "glassbox0" + icon_state = "glassbox" desc = "A display case for prized possessions." density = TRUE anchored = TRUE @@ -13,6 +13,7 @@ var/alert = TRUE var/open = FALSE var/openable = TRUE + var/custom_glass_overlay = FALSE ///If we have a custom glass overlay to use. var/obj/item/electronics/airlock/electronics var/start_showpiece_type = null //add type for items on display var/list/start_showpieces = list() //Takes sublists in the form of list("type" = /obj/item/bikehorn, "trophy_message" = "henk") @@ -30,6 +31,19 @@ showpiece = new start_showpiece_type (src) update_icon() +/obj/structure/displaycase/vv_edit_var(vname, vval) + . = ..() + if(vname in list(NAMEOF(src, open), NAMEOF(src, showpiece), NAMEOF(src, custom_glass_overlay))) + update_icon() + +/obj/structure/displaycase/handle_atom_del(atom/A) + if(A == electronics) + electronics = null + if(A == showpiece) + showpiece = null + update_icon() + return ..() + /obj/structure/displaycase/Destroy() if(electronics) QDEL_NULL(electronics) @@ -42,62 +56,68 @@ if(alert) . += "Hooked up with an anti-theft system." if(showpiece) - . += "There's [showpiece] inside." + . += "There's \a [showpiece] inside." if(trophy_message) . += "The plaque reads:" . += trophy_message /obj/structure/displaycase/proc/dump() - if (showpiece) - showpiece.forceMove(loc) - showpiece = null + if(QDELETED(showpiece)) + return + showpiece.forceMove(drop_location()) + showpiece = null + update_icon() /obj/structure/displaycase/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) switch(damage_type) if(BRUTE) - playsound(src.loc, 'sound/effects/glasshit.ogg', 75, 1) + playsound(src, 'sound/effects/glasshit.ogg', 75, 1) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, 1) + playsound(src, 'sound/items/welder.ogg', 100, 1) /obj/structure/displaycase/deconstruct(disassembled = TRUE) - if(!(flags_1 & NODECONSTRUCT_1)) - dump() - if(!disassembled) - new /obj/item/shard( src.loc ) - trigger_alarm() - qdel(src) + dump() + if(!broken && !(flags_1 & NODECONSTRUCT_1) && !disassembled) + density = FALSE + broken = TRUE + new /obj/item/shard(drop_location()) + playsound(src, "shatter", 70, 1) + update_icon() + trigger_alarm() + else + qdel(src) /obj/structure/displaycase/obj_break(damage_flag) + . = ..() if(!broken && !(flags_1 & NODECONSTRUCT_1)) density = FALSE - broken = 1 - new /obj/item/shard( src.loc ) + broken = TRUE + new /obj/item/shard(drop_location()) playsound(src, "shatter", 70, 1) update_icon() trigger_alarm() /obj/structure/displaycase/proc/trigger_alarm() - //Activate Anti-theft - if(alert) - var/area/alarmed = get_area(src) - alarmed.burglaralert(src) - playsound(src, 'sound/effects/alert.ogg', 50, 1) + if(!alert) + return + var/area/alarmed = get_area(src) + alarmed.burglaralert(src) + playsound(src, 'sound/effects/alert.ogg', 50, TRUE) -/obj/structure/displaycase/update_icon() - var/icon/I - if(open) - I = icon('icons/obj/stationobjs.dmi',"glassbox_open") - else - I = icon('icons/obj/stationobjs.dmi',"glassbox0") - if(broken) - I = icon('icons/obj/stationobjs.dmi',"glassboxb0") +/obj/structure/displaycase/update_overlays() + . = ..() if(showpiece) - var/icon/S = getFlatIcon(showpiece) - S.Scale(17,17) - I.Blend(S,ICON_UNDERLAY,8,8) - src.icon = I - return + var/mutable_appearance/showpiece_overlay = mutable_appearance(showpiece.icon, showpiece.icon_state) + showpiece_overlay.copy_overlays(showpiece) + showpiece_overlay.transform *= 0.6 + . += showpiece_overlay + if(custom_glass_overlay) + return + if(broken) + . += "[initial(icon_state)]_broken" + else if(!open) + . += "[initial(icon_state)]_closed" /obj/structure/displaycase/attackby(obj/item/W, mob/user, params) if(W.GetID() && !broken && openable) @@ -144,7 +164,7 @@ to_chat(user, "You start fixing [src]...") if(do_after(user, 20, target = src)) G.use(2) - broken = 0 + broken = FALSE obj_integrity = max_integrity update_icon() else @@ -166,7 +186,7 @@ to_chat(user, "You deactivate the hover field built into the case.") log_combat(user, src, "deactivates the hover field of") dump() - src.add_fingerprint(user) + add_fingerprint(user) update_icon() return else @@ -326,7 +346,7 @@ new /obj/effect/decal/cleanable/ash(loc) QDEL_NULL(showpiece) else - ..() + return ..() /obj/item/key/displaycase name = "display case key" diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index f7a26f807..64b631f18 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ