Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add new midround antag: the divergent clone #37334

Merged

Conversation

brndd
Copy link
Contributor

@brndd brndd commented Dec 9, 2024

[gameplay]

What this does

Adds a new midround antagonist, the divergent clone: a perfect clone of an existing, previously cloned and potentially still living crew member, controlled by another player. These existential horrors are the product of a cloner safety protocol malfunction (read: they randomly pop as a dynamic midround antag if there exists a cloner that has produced a clone).

Divergent clones can be either neutral or evil at 50% odds each.

Neutral clones are non-antagonistic (they get a message telling them they're not enemies of the station), but due to their unique condition can easily end up in an escalating conflict with their original copy.

Evil clones are traitors with standard syndicate objectives.

The divergent clone additionally has an "amnesia" stat which affects what details it can remember from its original counterpart, primarily to do with their antag status. See this diagram for a breakdown of the different variations:

2024-12-09T15:33:50

The intent of these variations is to make the clone's motivations ambiguous to other crew members, as well as to provide ambiguity to the clone itself as to whether its original is an antagonist or not.

Spawning mechanics

This is a midround antag that recruits from the ghost pool. It can only fire if at least one player has been cloned from a clone pod somewhere on the station. The ghost who wins the raffle is given a ghost spell called "Spawn as Divergent Clone". This spell allows the ghost to spawn in from the nearest cloning pod at a time of their choosing using the following mechanics:

  • If the cloning pod has cloned someone but is currently unoccupied, the divergent clone can choose a DNA record of a previously cloned character. This puts the divergent clone into the cloner as if a normal cloning was initiated on them.
  • If the cloning pod is currently occupied, the divergent clone can choose to become a twin of the currently in-progress clone. This puts the divergent clone into the cloner together with the current inhabitant, and once the cycle is complete, two clones pop out at the same time with the same overall health, but possibly different deformities and mutations.

The reason for this somewhat unorthodox spawning mechanism is to give the antag player a choice of who to become and when. For example, they could wait around for someone to get cloned and go for the twin birth option, or they could haunt around the cloner waiting for the geneticist to bugger off so that they won't be immediately spotted when solo dropping.

The ghost is given a temporary objective ("Reincarnate as a divergent clone"), so that the admin role panel can have buttons for the ghost. The role panel will allow changing the ghost's evilness and amnesia. It also allows the admin to force-spawn the ghost as a specific character.

The easiest way to bus in a divergent clone is to just give the spell to a ghost; the spell will give the clone the appropriate roles when used, even if the ghost doesn't have the role. If the admin wants the player to have no say in the matter at all, they can give the role to the ghost, then modify the role's parameters via the role panel, and then force-spawn the ghost at a specific cloner.

2024-12-11T19:51:32

Threat costs

The threat cost is low at 5, half of that of autotraitor (because only 50% of clones are traitorous). The weight of this firing is a third of that of the default midround antag (3 instead of 10), so this should be fairly rare. The requirements for firing are similar to autotraitor, but slightly laxer (because only 50% of clones are traitorous).

Guidelines and objectives of the divergent clone

Upon becoming a divergent clone, the player is given a greeting explaining the role in brief. This has multiple variations with different information content depending on the alignment and amnesia level of the clone.

Common part:

You are a divergent clone!
In a freak accident, the cloning machine has malfunctioned and created a divergent copy of you!

For neutral clones:

You must prove to the world that you are the original, or at the very least that you deserve to exist.
Remember that while your unique position may lead to conflict with your original copy, you are not an enemy of the station or the crew in general!

For evil clones:

You must convince the world that you are the original at any cost, be that by talk, violence or subterfuge. Do not let anyone get in your way, including your original copy.

Different knowledge levels of original based on alignment and amnesia:

You are a Syndicate traitor through and through, just like your original copy. You have the same objectives they do, but cooperation is optional. (Clone is a traitor and knows the original is a traitor)

The cloning process has awakened latent Syndicate brainwashing within you. Unlike your original copy, you are a Syndicate traitor. (Clone is a traitor and knows the original is not a traitor)

Memories of Syndicate training flood into your waxing consciousness. You are a Syndicate traitor. (Clone is a traitor but doesn't know the original's traitor status)

The cloning process has undone the Syndicate brainwashing that used to affect you. You are not a Syndicate traitor, but your original copy is. (Clone is not a traitor but knows the original is a traitor)

Non-evil divergent clones have two objectives:

  1. A freeform objective: Convince the world that you are the real <person>, or at least as real as the other copy.
  2. An objective to acquire an ID card: Acquire an ID card matching your name or DNA.

Evil divergent clones have the following objectives:

  1. A freeform objective that's more evil than the neutral one's (it's an antag pass): Convince the world that you are the real <person> at any cost, be that by talk, violence or subterfuge. Do not let anyone get in your way, including your original copy.
  2. No ID card objective (evil clones don't care).
  3. A set of syndicate traitor objectives that are either exact copies of the original clone's objectives if the original is a traitor, or a new set of objectives if the original is not a traitor.

Additionally, evil clones and zero-amnesia neutral clones whose original is a traitor have access to the Syndicate uplink password on the original's PDA. If the original is not a traitor but the clone is, the original's PDA is retroactively converted into an uplink (in-universe it was always an uplink, the original just didn't know). The original is not told that this happens.

Depending on amnesia level, the uplink password may be hidden from the divergent clone until they get their hands on the uplink PDA. This is to add extra ambiguity into the equation, as well as prevent some instances of yelling the uplink password on radio the moment you get out of the cloner.

The divergent clone's Notes verb memory contains almost all of the information of the original clone (bank details, radio channels, etc.), but the antag memories (uplink info, code words) vary based on the amnesia stat. There's also additional background information on the original clone that varies based on the amnesia stat; no-amnesia clones remember all the original's antagonist roles and objectives, while amnesiac clones do not.

2024-12-11T19:15:39

Technical notes

I had to change some tangentially related things to make this work. Memory now has categories to make it easier to separate the antagonist memories from common memories. Cloning pods had to be refactored to allow multiple occupants, and to make it easier to produce twins of existing occupants. Probably some other stuff I forget.

Why it's good

Identity theft is funny.

How it was tested

In very many painstaking ways.

2024-12-09T08:44:05

Changelog

🆑

  • rscadd: Added a new midround antagonist, the divergent clone. An identical clone of a cloned crew member spontaneously produced by the cloner.

@D3athrow-Issues D3athrow-Issues added the Gameplay / Gamemode This touches on something involving general gameplay or gamemodes, like a round specific tweak. label Dec 9, 2024
@SonixApache
Copy link
Contributor

make sure it copies the original's mind / notes

@Eneocho
Copy link
Collaborator

Eneocho commented Dec 9, 2024

requesting a small chance for the OG and the clone to say the same exact sentence at the same time if they're both in view of each other
one of them speaks (the clone, for example), a prob() is called and if it succeeds, the spoken line gets duplicated and output by the other (the original in this case)

@brndd
Copy link
Contributor Author

brndd commented Dec 11, 2024

Updated this a lot. See the opening post for the new way it works.

@brndd brndd changed the title Add new midround minor antag: the divergent clone Add new midround antag: the divergent clone Dec 11, 2024
@brndd
Copy link
Contributor Author

brndd commented Dec 11, 2024

This probably still needs an admin role window for the new role. Also I think the role preference doesn't show up in the preferences settings so I gotta fix that.

@west3436
Copy link
Collaborator

Is this done and ready for review? If not please set it to draft until it's ready

@brndd
Copy link
Contributor Author

brndd commented Dec 13, 2024

It's like 90% done. I have a couple of minor adjustments I need to make:

  1. Give the ghost a provisional role with a "Use the spell to get cloned" objective. This makes it more obvious if this rolls and people frequently don't spawn in for some reason, because they'll show up on the scoreboard with a failed objective. This also enables me to add a few admin buttons into the role panel, e.g. to force the DNA the ghost will get.
  2. Implement the admin buttons mentioned in point 1.
  3. A couple of minor fixes to dynamic stuff Deity pointed out in #coder-chat

These should be relatively minor LoC wise so please feel free to review what's already here. I'll try to knock these out today anyway though. I'll set it as a draft in the mean time.

@brndd brndd marked this pull request as draft December 13, 2024 00:21
@wotisjanitor
Copy link
Contributor

Question, will a clone also have access to notes the original added to their memory?

Divergent clones are perfect copies of existing, potentially still living crew members,
created in a freak cloner accident. They can remember the original's antag status,
and may sometimes be evil which means they get traitor objectives. If the original
is also a traitor, the evil clone will share their objectives.
@brndd brndd force-pushed the 2024-12-09-divergentclone branch from 04caa12 to c9c870b Compare December 13, 2024 10:47
@brndd brndd marked this pull request as ready for review December 13, 2024 10:49
@brndd
Copy link
Contributor Author

brndd commented Dec 13, 2024

This is now ready.

@brndd
Copy link
Contributor Author

brndd commented Dec 13, 2024

@wotisjanitor

Question, will a clone also have access to notes the original added to their memory?

Yes.

@hacker-on-steroids
Copy link
Contributor

isn't this effectively just a better and more fun version of that one xenoarch artifact?

@brndd
Copy link
Contributor Author

brndd commented Dec 15, 2024

I don't play xenoarch so I don't know :^)

Copy link
Collaborator

@west3436 west3436 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great, thanks for all the effort in working with the admins to come to what I think is a very well-polished end product. Just a few nits and minor comments.

code/datums/gamemode/dynamic/dynamic_rulesets_midround.dm Outdated Show resolved Hide resolved
code/datums/gamemode/dynamic/dynamic_rulesets_midround.dm Outdated Show resolved Hide resolved
Comment on lines +1163 to +1164
new_role.ForgeObjectives()
new_role.AnnounceObjectives()
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These procs should fire under /datum/role/divergentclone/New() instead of being called here.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree that might make sense, it also seems that no other role does this, so I chose not to do it here either. I'm assuming it's to allow admins to add the role to people without it instantly creating objectives or announcing the objectives to them.

to_chat(G, "<span class='notice'><b>You were selected to be a divergent clone, but will not be spawned in yet!</b></span>")
to_chat(G, "<span class='notice'>You have been granted the \"Spawn as Divergent Clone\" ghost spell. Use this near a cloning pod to spawn in as a divergent clone of someone who was cloned, or is currently being cloned, in that pod.</span>")
to_chat(G, "<span class='notice'>Using this spell on an unoccupied cloning pod will allow you to choose a record of a person previously cloned in that pod. Using it on an occupied pod will cause you to become a twin of the person currently in the pod, and be ejected from the pod at the same time as them.</span>")
to_chat(G, "<span class='notice'>Remember: you can only use this spell once, and re-entering your corpse will remove it permanently. In fact, for your convenience we have removed your ability to re-enter your corpse.</span>")
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure about this - I haven't gotten to the code for this yet but if this role is randomly assigned to someone do they immediately lose the ability to re-enter their corpse? That could be a huge bummer for someone who is having a fun round and wants to be revived while keeping the option open for this role. Maybe make it so that they lose the ability to enter their corpse if they accept this role when prompted?

Copy link
Contributor Author

@brndd brndd Dec 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how to best handle this, but I think the way I'm doing it already is the least worst option. Like, you lose the ability to re-enter your corpse if you get auto-accepted as a ninja or catbeast. The intent here is the same. Allowing someone to reincarnate after they get this role would mean that the role is wasted, and there aren't good frameworks in place in dynamic to monitor if this happens so that threat could be refunded or the role could be passed to the next person (the only solution that doesn't involve massive amounts of new code would be an infinite loop that runs until the ghost either spawns as a divergent clone or gets resurrected and checks their status every time, and I don't like that).

@@ -0,0 +1,63 @@
/datum/objective/freeform/divergentclone_neutral
explanation_text = "Convince the world that you are the real <person>, or at least as real as the other copy."
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What did he mean by this?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is mostly just a placeholder/sanity thing. The actual text gets set in PostAppend.

code/datums/gamemode/role/divergentclone.dm Outdated Show resolved Hide resolved
code/datums/gamemode/role/divergentclone.dm Outdated Show resolved Hide resolved
code/datums/gamemode/role/divergentclone.dm Show resolved Hide resolved
code/datums/gamemode/role/divergentclone.dm Outdated Show resolved Hide resolved
code/modules/medical/cloning.dm Outdated Show resolved Hide resolved
@west3436 west3436 merged commit 2620ad7 into vgstation-coders:Bleeding-Edge Dec 19, 2024
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Gameplay / Gamemode This touches on something involving general gameplay or gamemodes, like a round specific tweak.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants