diff --git a/code/controllers/subsystem/persistence.dm b/code/controllers/subsystem/persistence.dm index c42dfc38e2..ec76d623b1 100644 --- a/code/controllers/subsystem/persistence.dm +++ b/code/controllers/subsystem/persistence.dm @@ -9,7 +9,6 @@ SUBSYSTEM_DEF(persistence) var/list/obj/structure/chisel_message/chisel_messages = list() var/list/saved_messages = list() - var/savefile/chisel_messages_sav var/savefile/trophy_sav var/list/saved_trophies = list() @@ -75,14 +74,14 @@ SUBSYSTEM_DEF(persistence) break //Who's been duping the bird?! /datum/controller/subsystem/persistence/proc/LoadChiselMessages() - chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") + var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") var/saved_json chisel_messages_sav[SSmapping.config.map_name] >> saved_json if(!saved_json) return - var/saved_messages = json_decode(saved_json) + var/list/saved_messages = json_decode(saved_json) for(var/item in saved_messages) if(!islist(item)) @@ -104,10 +103,10 @@ SUBSYSTEM_DEF(persistence) var/obj/structure/chisel_message/M = new(T) - M.unpack(item) - if(!M.loc) - M.persists = FALSE - qdel(M) + if(!QDELETED(M)) + M.unpack(item) + + log_world("Loaded [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") /datum/controller/subsystem/persistence/proc/LoadTrophies() trophy_sav = new /savefile("data/npc_saves/TrophyItems.sav") @@ -175,9 +174,13 @@ SUBSYSTEM_DEF(persistence) secret_satchels[SSmapping.config.map_name] << old_secret_satchels /datum/controller/subsystem/persistence/proc/CollectChiselMessages() + var/savefile/chisel_messages_sav = new /savefile("data/npc_saves/ChiselMessages.sav") + for(var/obj/structure/chisel_message/M in chisel_messages) saved_messages += list(M.pack()) + log_world("Saved [saved_messages.len] engraved messages on map [SSmapping.config.map_name]") + chisel_messages_sav[SSmapping.config.map_name] << json_encode(saved_messages) /datum/controller/subsystem/persistence/proc/SaveChiselMessage(obj/structure/chisel_message/M) @@ -193,4 +196,4 @@ SUBSYSTEM_DEF(persistence) data["path"] = T.showpiece.type data["message"] = T.trophy_message data["placer_key"] = T.placer_key - saved_trophies += list(data) \ No newline at end of file + saved_trophies += list(data) diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index 895c042e00..b88cfc0315 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -1688,15 +1688,6 @@ /obj/item/toy/crayon/rainbow) crate_name = "art supply crate" -/datum/supply_pack/misc/soapstone - name = "Curator Engraving/Scribbling Crate" - crate_name = "curator engraving/scribbling crate" - cost = 3000 - contains = list(/obj/item/soapstone) - access = GLOB.access_library - crate_type = /obj/structure/closet/crate/secure - - /datum/supply_pack/misc/bsa name = "Bluespace Artillery Parts" cost = 15000 diff --git a/code/modules/jobs/job_types/cargo_service.dm b/code/modules/jobs/job_types/cargo_service.dm index a863f983cf..b606000ef4 100644 --- a/code/modules/jobs/job_types/cargo_service.dm +++ b/code/modules/jobs/job_types/cargo_service.dm @@ -277,4 +277,4 @@ Janitor belt = /obj/item/device/pda/janitor ears = /obj/item/device/radio/headset/headset_srv uniform = /obj/item/clothing/under/rank/janitor - backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1, /obj/item/soapstone/empty=1) + backpack_contents = list(/obj/item/device/modular_computer/tablet/preset/advanced=1) diff --git a/code/modules/library/soapstone.dm b/code/modules/library/soapstone.dm index d8899285a2..5efc9c1dd3 100644 --- a/code/modules/library/soapstone.dm +++ b/code/modules/library/soapstone.dm @@ -1,5 +1,5 @@ /obj/item/soapstone - name = "chisel" + name = "soapstone" desc = "Leave informative messages for the crew, including the crew of future shifts!\nEven if out of uses, it can still be used to remove messages.\n(Not suitable for engraving on shuttles, off station or on cats. Side effects may include beatings, bannings and orbital bombardment.)" icon = 'icons/obj/items.dmi' icon_state = "soapstone" @@ -9,36 +9,9 @@ var/tool_speed = 50 var/remaining_uses = 3 - var/non_dull_name - var/w_engrave = "engrave" - var/w_engraving = "engraving" - var/w_chipping = "chipping" - var/w_dull = "dull" - -/obj/item/soapstone/New() +/obj/item/soapstone/Initialize(mapload) . = ..() - random_name() - check_name() // could start empty - -/obj/item/soapstone/proc/random_name() - name = pick("soapstone", "chisel", "chalk", "magic marker") - non_dull_name = name - if(name == "chalk" || name == "magic marker") - desc = replacetext(desc, "engraving", "scribbling") - w_engrave = "scribble" - w_engraving = "scribbling" - w_chipping = "sketching" - if(name == "chalk") - w_dull = "used" - if(name == "magic marker") - w_dull = "empty" - - if(name == "soapstone" || name == "chisel") - desc = replacetext(desc, "scribbling", "engraving") - w_engrave = initial(w_engrave) - w_engraving = initial(w_engraving) - w_chipping = initial(w_chipping) - w_dull = "dull" + check_name() /obj/item/soapstone/examine(mob/user) . = ..() @@ -57,11 +30,11 @@ return if(!good_chisel_message_location(T)) - to_chat(user, "It's not appropriate to [w_engrave] on [T].") + to_chat(user, "It's not appropriate to engrave on [T].") return if(existing_message) - user.visible_message("[user] starts erasing [existing_message].", "You start erasing [existing_message].", "You hear a [w_chipping] sound.") + user.visible_message("[user] starts erasing [existing_message].", "You start erasing [existing_message].", "You hear a chipping sound.") playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) if(do_after(user, tool_speed, target = existing_message)) user.visible_message("[user] erases [existing_message].", "You erase [existing_message][existing_message.creator_key == user.ckey ? ", refunding a use" : ""].") @@ -72,19 +45,19 @@ refund_use() return - var/message = stripped_input(user, "What would you like to [w_engrave]?", "Leave a message") + var/message = stripped_input(user, "What would you like to engrave?", "Leave a message") if(!message) - to_chat(user, "You decide not to [w_engrave] anything.") + to_chat(user, "You decide not to engrave anything.") return if(!target.Adjacent(user) && locate(/obj/structure/chisel_message) in T) to_chat(user, "Someone wrote here before you chose! Find another spot.") return playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) - user.visible_message("[user] starts [w_engraving] a message into [T]...", "You start [w_engraving] a message into [T]...", "You hear a [w_chipping] sound.") + user.visible_message("[user] starts engraving a message into [T]...", "You start engraving a message into [T]...", "You hear a chipping sound.") if(can_use() && do_after(user, tool_speed, target = T) && can_use()) //This looks messy but it's actually really clever! if(!locate(/obj/structure/chisel_message in T)) - user.visible_message("[user] leaves a message for future spacemen!", "You [w_engrave] a message into [T]!", "You hear a [w_chipping] sound.") + user.visible_message("[user] leaves a message for future spacemen!", "You engrave a message into [T]!", "You hear a chipping sound.") playsound(loc, 'sound/items/gavel.ogg', 50, 1, -1) var/obj/structure/chisel_message/M = new(T) M.register(user, message) @@ -107,9 +80,10 @@ /obj/item/soapstone/proc/check_name() if(remaining_uses) - name = non_dull_name + // This will mess up RPG loot names, but w/e + name = initial(name) else - name = "[w_dull] [name]" + name = "dull [initial(name)]" /* Persistent engraved messages, etched onto the station turfs to serve as instructions and/or memes for the next generation of spessmen. @@ -127,10 +101,6 @@ /proc/good_chisel_message_location(turf/T) if(!T) . = FALSE - else if(T.z != ZLEVEL_STATION) - . = FALSE - else if(istype(get_area(T), /area/shuttle)) - . = FALSE else if(!(isfloorturf(T) || iswallturf(T))) . = FALSE else @@ -142,9 +112,8 @@ icon = 'icons/obj/stationobjs.dmi' icon_state = "soapstone_message" layer = HIGH_OBJ_LAYER - density = 0 - anchored = 1 - luminosity = 1 + density = FALSE + anchored = TRUE obj_integrity = 30 max_integrity = 30 @@ -157,17 +126,18 @@ var/list/like_keys = list() var/list/dislike_keys = list() -/obj/structure/chisel_message/New(newloc) - ..() + var/turf/original_turf + +/obj/structure/chisel_message/Initialize(mapload) + . = ..() SSpersistence.chisel_messages += src var/turf/T = get_turf(src) + original_turf = T + if(!good_chisel_message_location(T)) persists = FALSE qdel(src) -/obj/structure/chisel_message/singularity_pull() - return - /obj/structure/chisel_message/proc/register(mob/user, newmessage) hidden_message = newmessage creator_name = user.real_name @@ -181,6 +151,8 @@ var/hash = md5(hidden_message) var/newcolor = copytext(hash, 1, 7) add_atom_colour("#[newcolor]", FIXED_COLOUR_PRIORITY) + light_color = "#[newcolor]" + set_light(1) /obj/structure/chisel_message/proc/pack() var/list/data = list() @@ -189,12 +161,12 @@ data["creator_key"] = creator_key data["realdate"] = realdate data["map"] = SSmapping.config.map_name - var/turf/T = get_turf(src) - data["x"] = T.x - data["y"] = T.y - data["z"] = T.z + data["x"] = original_turf.x + data["y"] = original_turf.y + data["z"] = original_turf.z data["like_keys"] = like_keys data["dislike_keys"] = dislike_keys + return data /obj/structure/chisel_message/proc/unpack(list/data) if(!islist(data))