diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 9271a048521..0254a3caa13 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 @@ -14,6 +14,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") @@ -32,11 +33,22 @@ 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) - if(showpiece) - QDEL_NULL(showpiece) + QDEL_NULL(electronics) + QDEL_NULL(showpiece) return ..() /obj/structure/displaycase/examine(mob/user) @@ -44,61 +56,62 @@ 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:\n [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, TRUE) + playsound(src, 'sound/effects/glasshit.ogg', 75, TRUE) if(BURN) - playsound(src.loc, 'sound/items/welder.ogg', 100, TRUE) + playsound(src, 'sound/items/welder.ogg', 100, TRUE) /obj/structure/displaycase/deconstruct(disassembled = TRUE) if(!(flags_1 & NODECONSTRUCT_1)) dump() if(!disassembled) - new /obj/item/shard( src.loc ) + new /obj/item/shard(drop_location()) trigger_alarm() 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, TRUE) update_icon() trigger_alarm() +///Anti-theft alarm triggered when broken. /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, TRUE) + 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) @@ -148,7 +161,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 @@ -170,8 +183,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) - update_icon() + add_fingerprint(user) return else //prevents remote "kicks" with TK @@ -347,7 +359,7 @@ new /obj/effect/decal/cleanable/ash(loc) QDEL_NULL(showpiece) else - ..() + return ..() /obj/item/key/displaycase name = "display case key" @@ -365,8 +377,8 @@ /obj/structure/displaycase/forsale name = "vend-a-tray" - icon = 'icons/obj/stationobjs.dmi' - icon_state = "laserbox0" + icon_state = "laserbox" + custom_glass_overlay = TRUE desc = "A display case with an ID-card swiper. Use your ID to purchase the contents." density = FALSE max_integrity = 100 @@ -381,22 +393,13 @@ ///We're using the same trick as paper does in order to cache the image, and only load the UI when messed with. var/list/viewing_ui = list() -/obj/structure/displaycase/forsale/update_icon() //remind me to fix my shitcode later - var/icon/I - if(open) - I = icon('icons/obj/stationobjs.dmi',"laserboxb0") - else - I = icon('icons/obj/stationobjs.dmi',"laserbox0") - if(!showpiece && !open) - I = icon('icons/obj/stationobjs.dmi',"laserbox_open") - if(broken) - I = icon('icons/obj/stationobjs.dmi',"laserbox_broken") - if(showpiece) - var/icon/S = getFlatIcon(showpiece) - S.Scale(17,17) - I.Blend(S,ICON_UNDERLAY,8,12) - src.icon = I - return +/obj/structure/displaycase/forsale/update_icon_state() + icon_state = "[initial(icon_state)][broken ? "_broken" : (open ? "_open" : (!showpiece ? "_empty" : null))]" + +/obj/structure/displaycase/forsale/update_overlays() + . = ..() + if(!broken && !open) + . += "[initial(icon_state)]_overlay" /obj/structure/displaycase/forsale/ui_interact(mob/user, datum/tgui/ui) ui = SStgui.try_update_ui(user, src, ui) @@ -455,8 +458,7 @@ usr.put_in_hands(showpiece) to_chat(usr, "You purchase [showpiece] for [sale_price] credits.") playsound(src, 'sound/effects/cashregister.ogg', 40, TRUE) - icon = 'icons/obj/stationobjs.dmi' - flick("laserbox_vend", src) + flick("[initial(icon_state)]_vend", src) showpiece = null update_icon() SStgui.update_uis(src) @@ -522,7 +524,7 @@ if(obj_integrity <= (integrity_failure * max_integrity)) to_chat(user, "You start recalibrating [src]'s hover field...") if(do_after(user, 20, target = src)) - broken = 0 + broken = FALSE obj_integrity = max_integrity update_icon() return TRUE diff --git a/icons/obj/stationobjs.dmi b/icons/obj/stationobjs.dmi index 7cedd608b7e..5b59e357d78 100644 Binary files a/icons/obj/stationobjs.dmi and b/icons/obj/stationobjs.dmi differ