/
engraved.dm
95 lines (83 loc) · 3.77 KB
/
engraved.dm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/**
* # engraved component!
*
* component for walls that applies an engraved overlay and lets you examine it to read a story (+ art element yay)
* new creations will get a high art value, cross round scrawlings will get a low one.
* MUST be a component, though it doesn't look like it. SSPersistence demandeth
*/
/datum/component/engraved
///the generated story string
var/engraved_description
///whether this is a new engraving, or a persistence loaded one.
var/persistent_save
///what random icon state should the engraving have
var/icon_state_append
///The story value of this piece.
var/story_value
/datum/component/engraved/Initialize(engraved_description, persistent_save, story_value)
. = ..()
if(!isclosedturf(parent))
return COMPONENT_INCOMPATIBLE
var/turf/closed/engraved_wall = parent
src.engraved_description = engraved_description
src.persistent_save = persistent_save
src.story_value = story_value
var/beauty_value
switch(story_value)
if(STORY_VALUE_KEY)
beauty_value = 0 // what is this
if(STORY_VALUE_SHIT)
beauty_value = rand(-50, 50) //Ugly or mediocre at best
if(STORY_VALUE_NONE)
beauty_value = rand(0, 100) //No inherent value
if(STORY_VALUE_MEH)
beauty_value = rand(100, 200) //Its an okay tale
if(STORY_VALUE_OKAY)
beauty_value = rand(150, 300) //Average story! most things are like this
if(STORY_VALUE_AMAZING)
beauty_value = rand(300, 600)//Really impactful stories, seeing a lost limb, losing a loved pet.
if(STORY_VALUE_LEGENDARY)
beauty_value = rand(500, 800) //Almost always a good story! this is for memories you can barely ever get, killing megafauna, doing ultimate feats!
engraved_wall.AddElement(/datum/element/art, beauty_value / ENGRAVING_BEAUTY_TO_ART_FACTOR)
if(persistent_save)
engraved_wall.AddElement(/datum/element/beauty, beauty_value)
else
engraved_wall.AddElement(/datum/element/beauty, beauty_value / ENGRAVING_PERSISTENCE_BEAUTY_LOSS_FACTOR) //Old age does them harm
icon_state_append = rand(1, 2)
//must be here to allow overlays to be updated
RegisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS, PROC_REF(on_update_overlays))
engraved_wall.update_appearance()
/datum/component/engraved/Destroy(force)
if(!parent)
return ..()
parent.RemoveElement(/datum/element/art)
//must be here to allow overlays to be updated
UnregisterSignal(parent, COMSIG_ATOM_UPDATE_OVERLAYS)
if(!QDELING(parent))
var/atom/parent_atom = parent
parent_atom.update_appearance()
return ..() //call this after since we null out the parent
/datum/component/engraved/RegisterWithParent()
RegisterSignal(parent, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine))
//supporting component transfer means putting these here instead of initialize
SSpersistence.wall_engravings += src
ADD_TRAIT(parent, TRAIT_NOT_ENGRAVABLE, TRAIT_GENERIC)
/datum/component/engraved/UnregisterFromParent()
UnregisterSignal(parent, COMSIG_ATOM_EXAMINE)
//supporting component transfer means putting these here instead of destroy
SSpersistence.wall_engravings -= src
REMOVE_TRAIT(parent, TRAIT_NOT_ENGRAVABLE, TRAIT_GENERIC)
/// Used to maintain the acid overlay on the parent [/atom].
/datum/component/engraved/proc/on_update_overlays(atom/parent_atom, list/overlays)
SIGNAL_HANDLER
overlays += mutable_appearance('icons/turf/wall_overlays.dmi', "engraving[icon_state_append]")
///signal called on parent being examined
/datum/component/engraved/proc/on_examine(datum/source, mob/user, list/examine_list)
SIGNAL_HANDLER
examine_list += span_boldnotice(engraved_description)
///returns all the information SSpersistence needs in a list to load up this engraving on a future round!
/datum/component/engraved/proc/save_persistent()
var/list/saved_data = list()
saved_data["story"] = engraved_description
saved_data["story_value"] = story_value
return list(saved_data)