diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index 5fd802bbf23..b79f0d11b37 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -28262,10 +28262,10 @@ }, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/simple_animal/sloth/citrus, /obj/structure/disposalpipe/segment{ dir = 9 }, +/mob/living/simple_animal/sloth/citrus, /turf/open/floor/iron, /area/cargo/qm) "dEb" = ( @@ -38671,8 +38671,8 @@ dir = 4 }, /obj/machinery/airalarm/directional/west, -/mob/living/simple_animal/pet/cat/runtime, /obj/structure/disposalpipe/segment, +/mob/living/simple_animal/pet/cat/runtime, /turf/open/floor/iron, /area/command/heads_quarters/cmo) "fCE" = ( @@ -49945,10 +49945,10 @@ /obj/structure/cable, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/mob/living/basic/cockroach, /obj/structure/disposalpipe/segment{ dir = 4 }, +/mob/living/basic/cockroach, /turf/open/floor/plating, /area/maintenance/port/aft) "iRw" = ( @@ -73191,8 +73191,8 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, -/mob/living/simple_animal/pet/fox/renault, /obj/machinery/newscaster/directional/south, +/mob/living/simple_animal/pet/fox/renault, /turf/open/floor/iron/dark, /area/command/heads_quarters/captain) "pGD" = ( @@ -86972,6 +86972,12 @@ }, /turf/open/floor/iron, /area/cargo/miningoffice) +"tIm" = ( +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_x = -32 + }, +/turf/open/floor/iron/dark, +/area/service/bar) "tIE" = ( /obj/structure/reagent_dispensers/fueltank, /obj/effect/decal/cleanable/dirt, @@ -138800,7 +138806,7 @@ bAY alf heA cgp -heA +aXI aXI aXI aXI @@ -139057,7 +139063,7 @@ iXT alf hFM gMU -unM +tIm guN stu pqt diff --git a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm index 4061f90d1c5..c8464823e68 100644 --- a/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm +++ b/_maps/map_files/IceBoxStation/IcemoonUnderground_Above.dmm @@ -2455,6 +2455,7 @@ /obj/item/vending_refill/cigarette, /obj/machinery/light/small/directional/east, /obj/structure/table/wood, +/obj/machinery/airalarm/directional/east, /turf/open/floor/iron, /area/service/bar) "mC" = ( @@ -5850,8 +5851,10 @@ /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2{ dir = 1 }, -/obj/machinery/status_display/evac/directional/south, /obj/effect/decal/cleanable/dirt/dust, +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = -32 + }, /turf/open/floor/iron, /area/service/bar) "Cx" = ( @@ -7836,8 +7839,8 @@ /obj/effect/turf_decal/siding/wood{ dir = 8 }, -/mob/living/carbon/human/species/monkey/punpun, /obj/structure/table/wood, +/mob/living/carbon/human/species/monkey/punpun, /turf/open/floor/iron, /area/service/bar) "Ls" = ( @@ -9142,12 +9145,12 @@ /obj/effect/turf_decal/tile/red{ dir = 1 }, +/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, +/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /mob/living/simple_animal/bot/secbot/beepsky{ desc = "Powered by the tears and sweat of laborers."; name = "Prison Ofitser" }, -/obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /turf/open/floor/iron, /area/mine/laborcamp/security) "Rx" = ( @@ -9508,6 +9511,7 @@ dir = 1 }, /obj/machinery/light/small/directional/east, +/obj/machinery/status_display/evac/directional/east, /turf/open/floor/stone, /area/service/bar/atrium) "Te" = ( @@ -10001,7 +10005,6 @@ }, /obj/machinery/duct, /obj/machinery/atmospherics/components/unary/vent_pump/on/layer4, -/obj/machinery/airalarm/directional/west, /turf/open/floor/iron, /area/service/bar) "Vs" = ( diff --git a/_maps/map_files/KiloStation/KiloStation.dmm b/_maps/map_files/KiloStation/KiloStation.dmm index 75428e3c84a..f6dbe723b68 100644 --- a/_maps/map_files/KiloStation/KiloStation.dmm +++ b/_maps/map_files/KiloStation/KiloStation.dmm @@ -22285,11 +22285,11 @@ /area/security/warden) "coG" = ( /obj/structure/bed/dogbed/renault, -/mob/living/simple_animal/pet/fox/renault, /obj/machinery/button/door/directional/south{ id = "captain_escape"; name = "Tactical Relocation Toggle" }, +/mob/living/simple_animal/pet/fox/renault, /turf/open/floor/wood, /area/command/heads_quarters/captain) "coH" = ( @@ -28523,11 +28523,6 @@ /obj/effect/turf_decal/tile/blue, /obj/machinery/light/directional/south, /obj/effect/turf_decal/stripes/corner, -/mob/living/simple_animal/bot/cleanbot{ - auto_patrol = 1; - icon_state = "cleanbot1"; - name = "Mopficcer Sweepsky" - }, /obj/machinery/button/door/directional/south{ id = "custodialwagon"; name = "Custodial Bay Toggle"; @@ -28536,6 +28531,11 @@ /obj/structure/disposalpipe/segment{ dir = 5 }, +/mob/living/simple_animal/bot/cleanbot{ + auto_patrol = 1; + icon_state = "cleanbot1"; + name = "Mopficcer Sweepsky" + }, /turf/open/floor/iron, /area/hallway/primary/starboard) "dAD" = ( @@ -50912,8 +50912,8 @@ /obj/structure/reagent_dispensers/beerkeg{ pixel_y = 5 }, -/obj/structure/sign/poster/contraband/red_rum{ - pixel_y = -30 +/obj/structure/sign/picture_frame/portrait/bar{ + pixel_y = -32 }, /turf/open/floor/iron/dark, /area/service/bar) @@ -69344,10 +69344,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 8 }, -/mob/living/simple_animal/bot/cleanbot/medbay, /obj/structure/disposalpipe/segment{ dir = 10 }, +/mob/living/simple_animal/bot/cleanbot/medbay, /turf/open/floor/iron/dark, /area/medical/storage) "sMk" = ( @@ -83637,8 +83637,8 @@ /obj/structure/water_source/puddle, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, /obj/machinery/atmospherics/pipe/smart/manifold4w/supply/hidden/layer4, -/mob/living/carbon/human/species/monkey, /obj/machinery/light_switch/directional/south, +/mob/living/carbon/human/species/monkey, /turf/open/floor/grass, /area/science/genetics) "yll" = ( diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 6ffbb0afc58..5e428824162 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -44131,7 +44131,7 @@ /area/science/storage) "nFR" = ( /obj/machinery/vending/boozeomat, -/obj/structure/sign/plaques/deempisi{ +/obj/structure/sign/picture_frame/portrait/bar{ pixel_y = -28 }, /obj/effect/turf_decal/tile/bar{ diff --git a/_maps/map_files/tramstation/tramstation.dmm b/_maps/map_files/tramstation/tramstation.dmm index 55fcb2a058f..f26d46c922d 100644 --- a/_maps/map_files/tramstation/tramstation.dmm +++ b/_maps/map_files/tramstation/tramstation.dmm @@ -67028,7 +67028,7 @@ /obj/effect/turf_decal/tile/bar{ dir = 1 }, -/obj/structure/sign/plaques/deempisi{ +/obj/structure/sign/picture_frame/portrait/bar{ pixel_y = 28 }, /obj/structure/cable, diff --git a/_maps/shuttles/emergency_monastery.dmm b/_maps/shuttles/emergency_monastery.dmm index 14fa7c50d07..63bb46763a5 100644 --- a/_maps/shuttles/emergency_monastery.dmm +++ b/_maps/shuttles/emergency_monastery.dmm @@ -1222,7 +1222,7 @@ /turf/open/floor/iron/dark, /area/shuttle/escape) "oH" = ( -/obj/structure/sign/plaques/deempisi{ +/obj/structure/sign/picture_frame/portrait{ pixel_y = 28 }, /obj/item/kirbyplants{ @@ -2269,7 +2269,7 @@ /area/shuttle/escape) "zU" = ( /obj/structure/dresser, -/obj/structure/sign/plaques/deempisi{ +/obj/structure/sign/picture_frame/portrait{ pixel_y = 28 }, /turf/open/floor/iron/grimy, diff --git a/code/__DEFINES/maps.dm b/code/__DEFINES/maps.dm index 1870d4dc058..6ebb717cf62 100644 --- a/code/__DEFINES/maps.dm +++ b/code/__DEFINES/maps.dm @@ -26,6 +26,9 @@ require only minor tweaks. #define SPACERUIN_MAP_EDGE_PAD 15 +/// Special map path value for custom adminloaded stations. +#define CUSTOM_MAP_PATH "custom" + // traits // boolean - marks a level as having that property if present #define ZTRAIT_CENTCOM "CentCom" diff --git a/code/controllers/subsystem/mapping.dm b/code/controllers/subsystem/mapping.dm index 8bd982c30b1..1e0bb974373 100644 --- a/code/controllers/subsystem/mapping.dm +++ b/code/controllers/subsystem/mapping.dm @@ -293,7 +293,7 @@ Used by the AI doomsday and the self-destruct nuke. #undef INIT_ANNOUNCE // Custom maps are removed after station loading so the map files does not persist for no reason. - if(config.map_path == "custom") + if(config.map_path == CUSTOM_MAP_PATH) fdel("_maps/custom/[config.map_file]") // And as the file is now removed set the next map to default. next_map_config = load_map_config(default_to_box = TRUE) diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index e5b3bc93aa6..a7d217ce2ef 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -262,6 +262,19 @@ SUBSYSTEM_DEF(persistence) if(fexists(frame_path)) return json_decode(file2text(frame_path)) +/// Removes the identifier of a persitent photo frame from the json. +/datum/controller/subsystem/persistence/proc/RemovePhotoFrame(identifier) + var/frame_path = file("data/photo_frames.json") + if(!fexists(frame_path)) + return + + var/frame_json = json_decode(file2text(frame_path)) + frame_json -= identifier + + frame_json = json_encode(frame_json) + fdel(frame_path) + WRITE_FILE(frame_path, frame_json) + /datum/controller/subsystem/persistence/proc/LoadPhotoPersistence() var/album_path = file("data/photo_albums.json") var/frame_path = file("data/photo_frames.json") diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 2fe181304e5..152a8bcff78 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -212,8 +212,8 @@ * the Atom subsystem intialization, or if the atom is being loaded from the map template. * If the item is being created at runtime any time after the Atom subsystem is intialized then * it's false. - * - * The mapload argument occupies the same position as loc when Initialize() is called by New(). + * + * The mapload argument occupies the same position as loc when Initialize() is called by New(). * loc will no longer be needed after it passed New(), and thus it is being overwritten * with mapload at the end of atom/New() before this proc (atom/Initialize()) is called. * @@ -681,8 +681,6 @@ /atom/proc/examine_more(mob/user) . = list() SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE_MORE, user, .) - if(!LAZYLEN(.)) // lol ..length - return list(span_notice("You examine [src] closer, but find nothing of interest...")) /** * Updates the appearence of the icon diff --git a/code/game/objects/structures/plaques/static_plaques.dm b/code/game/objects/structures/plaques/static_plaques.dm index 54e0a2d37cc..0e497d93f15 100644 --- a/code/game/objects/structures/plaques/static_plaques.dm +++ b/code/game/objects/structures/plaques/static_plaques.dm @@ -133,9 +133,3 @@ /obj/structure/sign/plaques/kiddie/perfect_drone name = "\improper 'Perfect Drone' sign" desc = "A guide to the drone shell dispenser, detailing the constructive and destructive applications of modern repair drones, as well as the development of the incorruptible cyborg servants of tomorrow, available today." - -/obj/structure/sign/plaques/deempisi - name = "\improper Mr. Deempisi portrait" - desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'" - icon_state = "monkey_painting" - custom_materials = list(/datum/material/wood = 2000) //The same as /obj/structure/sign/picture_frame diff --git a/code/modules/admin/verbs/maprotation.dm b/code/modules/admin/verbs/maprotation.dm index 9c781af5ed3..57b5c111da6 100644 --- a/code/modules/admin/verbs/maprotation.dm +++ b/code/modules/admin/verbs/maprotation.dm @@ -80,7 +80,7 @@ continue VM.shuttles[s] = shuttle - VM.map_path = "custom" + VM.map_path = CUSTOM_MAP_PATH VM.map_file = "[map_file]" VM.config_filename = "data/next_map.json" var/json_value = list( diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 10d7e1b0235..d1ce833c05a 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -470,6 +470,8 @@ handle_eye_contact(examinify) else result = examinify.examine_more(src) + if(!length(result)) + result += span_notice("You examine [src] closer, but find nothing of interest...") else result = examinify.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist? diff --git a/code/modules/photography/photos/frame.dm b/code/modules/photography/photos/frame.dm index ffe6c6b58e9..ac1ad6ddf7a 100644 --- a/code/modules/photography/photos/frame.dm +++ b/code/modules/photography/photos/frame.dm @@ -67,6 +67,8 @@ custom_materials = list(/datum/material/wood = 2000) var/obj/item/photo/framed var/persistence_id + var/del_id_on_destroy = FALSE + var/art_value = OK_ART var/can_decon = TRUE #define FRAME_DEFINE(id) /obj/structure/sign/picture_frame/##id/persistence_id = #id @@ -77,7 +79,7 @@ /obj/structure/sign/picture_frame/Initialize(mapload, dir, building) . = ..() - AddElement(/datum/element/art, OK_ART) + AddElement(/datum/element/art, art_value) LAZYADD(SSpersistence.photo_frames, src) if(dir) setDir(dir) @@ -87,6 +89,8 @@ /obj/structure/sign/picture_frame/Destroy() LAZYREMOVE(SSpersistence.photo_frames, src) + if(persistence_id && del_id_on_destroy) + SSpersistence.RemovePhotoFrame(persistence_id) return ..() /obj/structure/sign/picture_frame/proc/get_photo_id() @@ -110,11 +114,9 @@ update_appearance() /obj/structure/sign/picture_frame/examine(mob/user) - if(in_range(src, user) && framed) - framed.show(user) - return list() - else - return ..() + . = ..() + if(in_range(src, user)) + framed?.show(user) /obj/structure/sign/picture_frame/attackby(obj/item/I, mob/user, params) if(can_decon && (I.tool_behaviour == TOOL_SCREWDRIVER || I.tool_behaviour == TOOL_WRENCH)) @@ -126,8 +128,9 @@ else if(I.tool_behaviour == TOOL_WIRECUTTER && framed) framed.forceMove(drop_location()) - framed = null user.visible_message(span_warning("[user] cuts away [framed] from [src]!")) + framed = null + update_appearance() return else if(istype(I, /obj/item/photo)) @@ -172,6 +175,65 @@ desc = "A photo frame to commemorate crewmembers that distinguished themselves in the line of duty. WARNING: unauthorized tampering will be severely punished." can_decon = FALSE +/// This used to be a plaque portrait of a monkey. Now it's been revamped into something more. +/obj/structure/sign/picture_frame/portrait + icon_state = "frame-monkey" + can_decon = FALSE + art_value = GOOD_ART + var/portrait_name + var/portrait_state + var/portrait_desc + +/obj/structure/sign/picture_frame/portrait/Initialize() + . = ..() + switch(rand(1,4)) + if(1) // Deempisi + name = "\improper Mr. Deempisi portrait" + icon_state = "frame-monkey" + desc = "Under the portrait a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'" + if(2) // A fruit + name = "picture of a fruit" + icon_state = "frame-fruit" + desc = "Ceci n'est pas une orange." + if(3) // Rat + name = "\improper Tom portrait" + desc = "Jerry the cat is still not amused." + icon_state = "frame-rat" + if(4) // Ratvar + name = "portrait of the imprisoned god" + desc = "Under the portrait a plaque reads: 'In loving memory of Ratvar, ancient powerful entity and rival of Nar'Sie, \ + ultimately struck down by NT bluespace artillery at the hands of Outpost 17 crew. Rust in peace.'" // common core lore. + icon_state = "frame-ratvar" + portrait_name = name + portrait_state = icon_state + portrait_desc = desc + +/obj/structure/sign/picture_frame/portrait/update_name(updates) + if(framed) + name = initial(name) + else + name = portrait_name + return ..() + +/obj/structure/sign/picture_frame/portrait/update_icon_state(updates) + . = ..() + if(framed) + icon_state = "frame-overlay" + else + icon_state = portrait_state + +/obj/structure/sign/picture_frame/portrait/update_desc(updates) + . = ..() + if(framed) + desc = "Every time you look it makes you laugh." + else + desc = portrait_desc + +/obj/structure/sign/picture_frame/portrait/examine_more(mob/user) + . = ..() + if(!framed) + . += span_notice("The frame and the picture are glued together, but you guess you could slip a photo between the two.") + //persistent frames, make sure the same ID doesn't appear more than once per map /obj/structure/sign/picture_frame/showroom/one persistence_id = "frame_showroom1" @@ -184,3 +246,13 @@ /obj/structure/sign/picture_frame/showroom/four persistence_id = "frame_showroom4" + +/obj/structure/sign/picture_frame/portrait/bar + persistence_id = "frame_bar" + del_id_on_destroy = TRUE + +///Generates a persistence id unique to the current map. Every bar should feel a little bit different after all. +/obj/structure/sign/picture_frame/portrait/bar/Initialize() + if(SSmapping.config.map_path != CUSTOM_MAP_PATH) //skip adminloaded custom maps. + persistence_id = "frame_bar_[SSmapping.config.map_name]" + return ..() diff --git a/icons/obj/decals.dmi b/icons/obj/decals.dmi index c3c2c6a7028..3b1310ed53a 100644 Binary files a/icons/obj/decals.dmi and b/icons/obj/decals.dmi differ