diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index c3c718966d..1e9c5729e3 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -72,6 +72,7 @@ var/hasShocked = 0 //Prevents multiple shocks from happening autoclose = 1 var/obj/item/device/doorCharge/charge = null //If applied, causes an explosion upon opening the door + var/obj/item/weapon/note //Any papers pinned to the airlock var/detonated = 0 var/doorOpen = 'sound/machines/airlock.ogg' var/doorClose = 'sound/machines/AirlockClose.ogg' @@ -82,6 +83,7 @@ var/airlock_material = null //material of inner filling; if its an airlock with glass, this should be set to "glass" var/overlays_file = 'icons/obj/doors/airlocks/station/overlays.dmi' + var/note_overlay_file = 'icons/obj/doors/airlocks/station/overlays.dmi' //Used for papers and photos pinned to the airlock var/cyclelinkeddir = 0 var/obj/machinery/door/airlock/cyclelinkedairlock @@ -213,8 +215,14 @@ if(id_tag) for(var/obj/machinery/doorButtons/D in GLOB.machines) D.removeMe(src) + qdel(note) return ..() +/obj/machinery/door/airlock/handle_atom_del(atom/A) + if(A == note) + note = null + update_icon() + /obj/machinery/door/airlock/bumpopen(mob/living/user) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite if(!issilicon(usr)) if(src.isElectrified()) @@ -369,6 +377,8 @@ var/mutable_appearance/weld_overlay var/mutable_appearance/damag_overlay var/mutable_appearance/sparks_overlay + var/mutable_appearance/note_overlay + var/notetype = note_type() switch(state) if(AIRLOCK_CLOSED) @@ -393,6 +403,8 @@ lights_overlay = get_airlock_overlay("lights_bolts", overlays_file) else if(emergency) lights_overlay = get_airlock_overlay("lights_emergency", overlays_file) + if(note) + note_overlay = get_airlock_overlay(notetype, note_overlay_file) if(AIRLOCK_DENY) if(!hasPower()) @@ -414,6 +426,8 @@ if(welded) weld_overlay = get_airlock_overlay("welded", overlays_file) lights_overlay = get_airlock_overlay("lights_denied", overlays_file) + if(note) + note_overlay = get_airlock_overlay(notetype, note_overlay_file) if(AIRLOCK_EMAG) frame_overlay = get_airlock_overlay("closed", icon) @@ -433,6 +447,8 @@ damag_overlay = get_airlock_overlay("sparks_damaged", overlays_file) if(welded) weld_overlay = get_airlock_overlay("welded", overlays_file) + if(note) + note_overlay = get_airlock_overlay(notetype, note_overlay_file) if(AIRLOCK_CLOSING) frame_overlay = get_airlock_overlay("closing", icon) @@ -447,6 +463,8 @@ panel_overlay = get_airlock_overlay("panel_closing_protected", overlays_file) else panel_overlay = get_airlock_overlay("panel_closing", overlays_file) + if(note) + note_overlay = get_airlock_overlay("[notetype]_closing", note_overlay_file) if(AIRLOCK_OPEN) frame_overlay = get_airlock_overlay("open", icon) @@ -461,6 +479,8 @@ panel_overlay = get_airlock_overlay("panel_open", overlays_file) if(obj_integrity < (0.75 * max_integrity)) damag_overlay = get_airlock_overlay("sparks_open", overlays_file) + if(note) + note_overlay = get_airlock_overlay("[notetype]_open", note_overlay_file) if(AIRLOCK_OPENING) frame_overlay = get_airlock_overlay("opening", icon) @@ -475,6 +495,8 @@ panel_overlay = get_airlock_overlay("panel_opening_protected", overlays_file) else panel_overlay = get_airlock_overlay("panel_opening", overlays_file) + if(note) + note_overlay = get_airlock_overlay("[notetype]_opening", note_overlay_file) cut_overlays() add_overlay(frame_overlay) @@ -484,6 +506,7 @@ add_overlay(weld_overlay) add_overlay(sparks_overlay) add_overlay(damag_overlay) + add_overlay(note_overlay) /proc/get_airlock_overlay(icon_state, icon_file) var/obj/machinery/door/airlock/A @@ -512,6 +535,12 @@ to_chat(user, "The maintenance panel seems haphazardly fastened.") if(charge && panel_open) to_chat(user, "Something is wired up to the airlock's electronics!") + if(note) + if(!in_range(user, src)) + to_chat(user, "There's a [note.name] pinned to the front. You can't read it from here.") + else + to_chat(user, "There's a [note.name] pinned to the front...") + note.examine(user) if(panel_open) switch(security_level) @@ -1094,6 +1123,12 @@ to_chat(user, "You [panel_open ? "open":"close"] the maintenance panel of the airlock.") playsound(src.loc, C.usesound, 50, 1) src.update_icon() + else if(istype(C, /obj/item/weapon/wirecutters) && note) + user.visible_message("[user] cuts down [note] from [src].", "You remove [note] from [src].") + playsound(src, 'sound/items/Wirecutter.ogg', 50, 1) + note.forceMove(get_turf(user)) + note = null + update_icon() else if(is_wire_tool(C)) return attack_hand(user) else if(istype(C, /obj/item/weapon/pai_cable)) @@ -1119,6 +1154,16 @@ update_icon() C.forceMove(src) charge = C + else if(istype(C, /obj/item/weapon/paper) || istype(C, /obj/item/weapon/photo)) + if(note) + to_chat(user, "There's already something pinned to this airlock! Use wirecutters to remove it.") + return + if(!user.transferItemToLoc(C, src)) + to_chat(user, "For some reason, you can't attach [C]!") + return + user.visible_message("[user] pins [C] to [src].", "You pin [C] to [src].") + note = C + update_icon() else return ..() @@ -1550,6 +1595,14 @@ return TRUE return FALSE +/obj/machinery/door/airlock/proc/note_type() //Returns a string representing the type of note pinned to this airlock + if(!note) + return + else if(istype(note, /obj/item/weapon/paper)) + return "note" + else if(istype(note, /obj/item/weapon/photo)) + return "photo" + #undef AIRLOCK_CLOSED #undef AIRLOCK_CLOSING #undef AIRLOCK_OPEN diff --git a/code/game/machinery/doors/airlock_types.dm b/code/game/machinery/doors/airlock_types.dm index 7f914971b2..4d8861c45b 100644 --- a/code/game/machinery/doors/airlock_types.dm +++ b/code/game/machinery/doors/airlock_types.dm @@ -252,6 +252,7 @@ name = "external airlock" icon = 'icons/obj/doors/airlocks/external/external.dmi' overlays_file = 'icons/obj/doors/airlocks/external/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/external/overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_ext explosion_block = 1 @@ -271,6 +272,7 @@ /obj/machinery/door/airlock/centcom icon = 'icons/obj/doors/airlocks/centcom/centcom.dmi' overlays_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/centcom/overlays.dmi' opacity = 1 assemblytype = /obj/structure/door_assembly/door_assembly_centcom normal_integrity = 1000 @@ -286,6 +288,7 @@ name = "vault door" icon = 'icons/obj/doors/airlocks/vault/vault.dmi' overlays_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/vault/overlays.dmi' opacity = 1 assemblytype = /obj/structure/door_assembly/door_assembly_vault explosion_block = 2 @@ -301,6 +304,7 @@ name = "airtight hatch" icon = 'icons/obj/doors/airlocks/hatch/centcom.dmi' overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' opacity = 1 assemblytype = /obj/structure/door_assembly/door_assembly_hatch @@ -308,6 +312,7 @@ name = "maintenance hatch" icon = 'icons/obj/doors/airlocks/hatch/maintenance.dmi' overlays_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/hatch/overlays.dmi' opacity = 1 assemblytype = /obj/structure/door_assembly/door_assembly_mhatch @@ -342,6 +347,7 @@ desc = "With humanity's current technological level, it could take years to hack this advanced airlock... or maybe we should give a screwdriver a try?" icon = 'icons/obj/doors/airlocks/abductor/abductor_airlock.dmi' overlays_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/abductor/overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_abductor damage_deflection = 30 opacity = 1 @@ -549,6 +555,7 @@ name = "large glass airlock" icon = 'icons/obj/doors/airlocks/glass_large/glass_large.dmi' overlays_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/glass_large/overlays.dmi' opacity = 0 assemblytype = null glass = 1 diff --git a/code/modules/mining/equipment/survival_pod.dm b/code/modules/mining/equipment/survival_pod.dm index e28b0c51ab..7ccea4078e 100644 --- a/code/modules/mining/equipment/survival_pod.dm +++ b/code/modules/mining/equipment/survival_pod.dm @@ -93,6 +93,7 @@ name = "airlock" icon = 'icons/obj/doors/airlocks/survival/survival.dmi' overlays_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' + note_overlay_file = 'icons/obj/doors/airlocks/survival/survival_overlays.dmi' assemblytype = /obj/structure/door_assembly/door_assembly_pod opacity = FALSE glass = TRUE diff --git a/icons/obj/doors/airlocks/external/overlays.dmi b/icons/obj/doors/airlocks/external/overlays.dmi index 1e155b0c33..5bfa24a6be 100644 Binary files a/icons/obj/doors/airlocks/external/overlays.dmi and b/icons/obj/doors/airlocks/external/overlays.dmi differ diff --git a/icons/obj/doors/airlocks/hatch/overlays.dmi b/icons/obj/doors/airlocks/hatch/overlays.dmi index cbed19b1ab..45f18136da 100644 Binary files a/icons/obj/doors/airlocks/hatch/overlays.dmi and b/icons/obj/doors/airlocks/hatch/overlays.dmi differ diff --git a/icons/obj/doors/airlocks/station/overlays.dmi b/icons/obj/doors/airlocks/station/overlays.dmi index 3db448e715..a489f40be9 100644 Binary files a/icons/obj/doors/airlocks/station/overlays.dmi and b/icons/obj/doors/airlocks/station/overlays.dmi differ