Paradox clones spawns with "copies" of their target's memories (#73988)

## About The Pull Request

Paradox clones spawn with a "quick copy" of their target's memories. 

These are notably limited in that they can't be used for stories
(engraving or tattoos), but if people metagame Paradox clones by saying
"engrave something for me" there's no hope for this community

Closes #73931

## Why It's Good For The Game

Stops a meta-y exploit

## Changelog

🆑 Melbert
fix: Paradox Clones now know that their target knows. 
/🆑
This commit is contained in:
MrMelbert
2023-03-14 21:03:16 -07:00
committed by GitHub
parent c830d665f6
commit b5c67d1fbf
5 changed files with 41 additions and 3 deletions
+27 -1
View File
@@ -57,7 +57,7 @@
src.deuteragonist_name = build_story_character(deuteragonist)
src.antagonist_name = build_story_character(antagonist)
if(protagonist && !(memory_flags & MEMORY_FLAG_NOLOCATION))
if(!src.where && isatom(protagonist) && !(memory_flags & MEMORY_FLAG_NOLOCATION))
src.where = get_area_name(protagonist)
if(!(memory_flags & MEMORY_FLAG_NOMOOD))
@@ -380,3 +380,29 @@
// Generic result - mobs get "the guy", objs / turfs get "a thing"
return ismob(character) ? "\the [character]" : "\a [character]"
/**
* Creates a "quick copy" of the memory for another mind,
* copying just basic memory information (name, major charactecrs) over.
*
* The copied memory cannot be used for stories or anything.
* They should generally only be used to give a new mind an idea of another mind's memories.
*/
/datum/memory/proc/quick_copy_memory(datum/mind/new_memorizer)
var/datum/memory/copy/new_copy = new(new_memorizer, protagonist_name, deuteragonist_name, antagonist_name, where, memory_flags)
new_copy.name = name
new_copy.story_value = story_value
return new_copy
// To only be used by quick copies of memories
/datum/memory/copy
memory_flags = MEMORY_NO_STORY
/datum/memory/copy/New(datum/mind/memorizer_mind, atom/protagonist, atom/deuteragonist, atom/antagonist, where, new_memory_flags)
src.where = where
src.memory_flags |= new_memory_flags
return ..()
/datum/memory/copy/generate_memory_name()
// We just copy the original memory's name anyways
return
+1 -1
View File
@@ -38,7 +38,7 @@
if(!uses)
balloon_alert(tattoo_artist, "not enough ink!")
return
if(!tattoo_artist.mind.memories)
if(!length(tattoo_artist.mind.memories))
balloon_alert(tattoo_artist, "nothing memorable to engrave!")
return
var/selected_zone = tattoo_artist.zone_selected