mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-31 00:58:26 +01:00
The monkey portrait decoration is now a set of random pictures that also act as persistent photo frames. Every station map gets one. (#61844)
spriteadd: Desouled the picture frame sprites.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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" = (
|
||||
|
||||
@@ -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" = (
|
||||
|
||||
@@ -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{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
+2
-4
@@ -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("<i>You examine [src] closer, but find nothing of interest...</i>"))
|
||||
|
||||
/**
|
||||
* Updates the appearence of the icon
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -470,6 +470,8 @@
|
||||
handle_eye_contact(examinify)
|
||||
else
|
||||
result = examinify.examine_more(src)
|
||||
if(!length(result))
|
||||
result += span_notice("<i>You examine [src] closer, but find nothing of interest...</i>")
|
||||
else
|
||||
result = examinify.examine(src) // if a tree is examined but no client is there to see it, did the tree ever really exist?
|
||||
|
||||
|
||||
@@ -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 = "<i>Ceci n'est pas une orange.</i>"
|
||||
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 ..()
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 36 KiB |
Reference in New Issue
Block a user