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))