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

Design doc for multi character slot system #177

Open
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

PJB3005
Copy link
Member

@PJB3005 PJB3005 commented Mar 11, 2024

No description provided.

@PJB3005 PJB3005 requested a review from Jezithyr as a code owner March 11, 2024 15:05
@github-actions github-actions bot added Design Related to design documentation for Space Station 14. English labels Mar 11, 2024
@Tayrtahn
Copy link

Could this be extended to work with late-joins too? Like if I select bartender as a late-join role and I have my bartender character as one of my active characters, it'll automatically select them (because they have the highest preference for the job)?

@PJB3005
Copy link
Member Author

PJB3005 commented Mar 11, 2024

Could this be extended to work with late-joins too? Like if I select bartender as a late-join role and I have my bartender character as one of my active characters, it'll automatically select them (because they have the highest preference for the job)?

Maybe make it so that clicking on a job in the latejoin pops down a menu that's like "which character slot", and slots that match the preference are bumped to the top.


Currently you can only have one "high" job preference. I'm not sure how this proposal would play in with that, as you'd obviously be able to have multiple characters each with their own high preference set. I can think of two solutions:

* Just allow this. This means people can have multiple "high" job preferences in practice. I'm not sure it's a big deal?
Copy link
Contributor

Choose a reason for hiding this comment

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

This would allow crafty players to give themselves priority over everyone else for a job or set of jobs using duplicate slots to influence the odds, the second proposal (a high priority slot) is better.

High priority means they get picked before medium or low priority players, so being able to have more than one high priority selection effectively just lets players use slots to give themselves higher job odds.

@moonheart08
Copy link
Contributor

I feel a better route might be to separate the concept of a character and a character's preferences. This also works better for servers that want to persist certain bits of character data (say, persistent wounds or records), and allows a character to have multiple clothing options per job preference set if they want.

Copy link
Contributor

@Jezithyr Jezithyr left a comment

Choose a reason for hiding this comment

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

I don't think this is a good way to handle characters or jobs. It's too confusing for the average player to follow and makes having a consistent character that players modify overtime more difficult (this is the primary usage of character slots).

Separating out Borgs,Antags and other unusual roundstart playables is a really good idea, since those don't make sense to have as jobs.


### Alternative character types

This approach also opens up the way for "alternative" character slot types. Right now all character slots are "humanoid", which makes little sense for roles like borgs. Instead of selecting borg / AI as regular jobs, we may instead want to make a wholly new character slot type instead. May also make sense for antags like nukies.
Copy link
Contributor

Choose a reason for hiding this comment

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

I like this as a solution for borgs, antags or other unusual crew


## Proposal

It should be possible to have multiple character slots active at once. When selecting jobs, a job is picked for all your characters at once, after which the actual character slot is picked.
Copy link
Contributor

Choose a reason for hiding this comment

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

I think this is a really clunky solution that isn't very clear to the player how it works.


The lobby currently shows your active character in the menu. With this change, that would instead show all your character slots lined up horizontally. This is also nice because if you do take advantage of multiple character slots this allows you to easily tell "I have engie, med and sec selected".

We will probably need a "duplicate" button to allow you to clone a character slot, if you want to make a character slot with the same appearance but a different job easily.
Copy link
Contributor

Choose a reason for hiding this comment

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

This is also really clunky. If a player makes changes to one character they then need to mirror all those changes to the copies which is a pain in the ass.


### Job/character selection

The game would run job selection first, with your apparent job preferences selected as the union of the preferences of all your characters. Then when a job has been picked for you, your character slot is picked based on what jobs are selected on your characters. If more than one character has the job selected, it'd just be picked randomely between them.
Copy link
Contributor

Choose a reason for hiding this comment

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

This is very complicated and would be confusing un-explained behavior to a player. Job preferences should not be tracked on a per character basis, they are something that a player has. Job preferences should reflect those of the player themselves since they are effectively a consent system for the type of gameplay that a player wishes to engage in during that session. A better solution would be to have a system for managing Job Preference presets, aka the ability to save/select saved preferences.

@Jezithyr
Copy link
Contributor

Jezithyr commented Mar 27, 2024

I'll be honest, most of this seems like a lot of over-complication that isn't focused on what players actually want to accomplish when they interact with the character creation/selection and role preference menu. But elements like splitting borgs, and other non-humanoid or antag roles into separate character types is a good idea tbh.

In terms of improving character selection I have some recommendations/ideas:

  1. Completely separate role preferences from characters: These are a meta-mechanic and are the way that a player expresses what game play they currently want to engage in. Instead of tying this to characters, we should create a preset system that allows players to save role-preference presets so that they can easily swap between them depending on what they feel like playing.
  2. Each role preference entry allows a player to select an assigned character(s). This defaults to "Currently Selected" which uses their currently selected character. When chosen for that role, the player is assigned their current selection or a random character from the assigned list.
  3. Implement Separate character types (as you described in this pr): For roles such as borg or antags like Nukie, allow players to create specific characters for those roles. These are displayed in the character list but after a divider to show their difference from normal characters.
  4. Players can select a character to view their saved loadouts for that character. Each character has a "Default" loadout that is fallen back to if a player does not have a role-specific loadout for the selected character. Players can copy loadouts between characters.
  5. At the top of the character selection screen players can define "Global" loadouts that are used when no character loadouts are defined.
  6. For roles that have custom names, those names can be set as part of the loadout editor. Not setting a custom name will use the global loadout's one (which is randomly generated by default).

@PJB3005
Copy link
Member Author

PJB3005 commented Mar 27, 2024

  1. Completely separate role preferences from characters: These are a meta-mechanic and are the way that a player expresses what game play they currently want to engage in. Instead of tying this to characters, we should create a preset system that allows players to save role-preference presets so that they can easily swap between them depending on what they feel like playing.
  2. Each role preference entry allows a player to select an assigned character(s). This defaults to "Currently Selected" which uses their currently selected character. When chosen for that role, the player is assigned their current selection or a random character from the assigned list.

That is a much better idea. Nice.

@FairlySadPanda
Copy link
Contributor

I didn't see PJB's most recent above but wanted to workshop this feature a bit (this is similar to my IRL work so it's interesting to me)

Character Identities

AS A Player
I CAN create a regular character with a unique name and look
SO THAT I can express myself in game

AS A Player
I CAN create a nuclear operative character with a unique name and look
SO THAT when I am playing a bad guy I can put more effort into it

AS A Player
I CAN create a borg character with a unique name and look
SO THAT when playing a borg I can put more effort into it

(repeat for other unique characters like wizards)

AS A Player
I CAN give my created character custom job preferences
SO THAT when my character is automatically enrolled into a round on round start, it's for one of the roles I want to play them in.

High/Med/Low priority

AS A Player
I CAN specify one main, highly-important role I strongly identify that character with
SO THAT when I play that character, it will most commonly be in the role I specifically designed them for.

AS A Player
I CAN specify a set of roles I identify a character with
SO THAT that character can be automatically enrolled into one of the roles on round start if the high-priority role (if any) I gave them has been taken.

AS A Player
I CAN specify a set of roles I am content with the character being put into as a backup
SO THAT my character is only ever put automatically enrolled into a role on round start I am OK with them playing.

Matchmaking - Player

AS A Player
I CAN mark any of my created characters as selected to use
SO THAT I can use any of those characters in game.

AS A Player
I CAN ready up to play in the round
SO THAT when the round starts, I can play as one of my selected characters in a role I want to play.

AS A Player
I CAN late-join into a round with any character in my roster easily
SO THAT I don't need to mess with my character preferences to get into the game.

Matchmaking - Designer

AS A Game Designer
I CAN build a fun player roster for a SS14 round out of the selected characters that have readied up, making sure every readied player has a character selected for a role and nobody has more than one character per player is selected
SO THAT all my players can have an appropriate character and role and the station is in good shape for the round ahead.

AS A Game Designer
I CAN prioritize characters with high-ranking preferences first for roles in a SS14 round
SO THAT the most keen characters/players get their desired slots first

AS A Game Designer
I CAN prioritize characters with selected roles for roles in a SS14 round after characters with high-ranking preferences have been assigned
SO THAT players are matched into appropriate roles corresponding to their desires

AS A Game Designer
I CAN fill any unfilled roles at round start with valid characters who have not yet received a role
SO THAT as many roles can be filled as possible.

AS A Game Designer
I CAN specify round-critical roles that need to be filled first, with high/med/low priorities assigned, before non-critical roles are assigned
SO THAT I can ensure certain critical roles like the Captain are always present, depending on design preference.


That's what I get out of the "design intent" of the current sort of muddling about approach, but Jez proposes a better design above so we might amend these user stories a bit...

@FairlySadPanda
Copy link
Contributor

FairlySadPanda commented Mar 27, 2024

With Jez' suggestion the stories become:

Character Identities

AS A Player
I CAN create a regular character with a unique name and look
SO THAT I can express myself in game

AS A Player
I CAN create a nuclear operative character with a unique name and look
SO THAT when I am playing a bad guy I can put more effort into it

AS A Player
I CAN create a borg character with a unique name and look
SO THAT when playing a borg I can put more effort into it

(repeat for other unique characters like wizards)

AS A Player
I CAN select my default character
SO THAT if a role I am assigned does not have a specific character I've created assigned to it, I'll use my default character instead.

JOB LOADOUTS

AS A Player
I CAN specify sets of roles I want to play as
SO THAT I can customize my gaming experience

AS A Player
I CAN have high-priority roles inside my role preference presets
SO THAT I can specify what I am most interested in playing.

AS A Player
I CAN have medium-priority roles inside my role preference presets
SO THAT I can specify what I'd like to play if my highest-priority roles (if any) are taken

AS A Player
I CAN have low-priority roles inside my role preference presets
SO THAT I can avoid being given a role I have literally no desire to play.

AS A Player
I CAN specify inside each of my role preference presets which of my created characters I want to play each role
SO THAT I can create custom characters for specific roles and easily swap those characters in and out.

AS A Player
I CAN select one of my role preference presets as my active one
SO THAT I can customize my game experience each round as desired.

Matchmaking - Player

AS A Player
I CAN ready up to play in the round
SO THAT when the round starts, I can play as one of my selected characters in a role I want to play.

AS A Player
I CAN late-join into a round with any character in my roster easily
SO THAT I don't need to mess with my character preferences to get into the game.

Matchmaking - Designer

AS A Game Designer
I CAN build a fun player roster for a SS14 round out of the selected players that have readied up, making sure every readied player has a role.
SO THAT all my players can have an appropriate role and the station is in good shape for the round ahead.

AS A Game Designer
I CAN prioritize characters with high-ranking preferences first for roles in a SS14 round
SO THAT the most keen characters/players get their desired slots first

AS A Game Designer
I CAN prioritize characters with selected roles for roles in a SS14 round after characters with high-ranking preferences have been assigned
SO THAT players are matched into appropriate roles corresponding to their desires

AS A Game Designer
I CAN fill any unfilled roles at round start with valid characters who have not yet received a role
SO THAT as many roles can be filled as possible.

AS A Game Designer
I CAN specify round-critical roles that need to be filled first, with high/med/low priorities assigned, before non-critical roles are assigned
SO THAT I can ensure certain critical roles like the Captain are always present, depending on design preference.

@FairlySadPanda
Copy link
Contributor

FairlySadPanda commented Mar 27, 2024

One huge ease-of-use and ease-of-code win with Jez' suggestion is that it make customizing "If I'm a nukie/wizard/blob/etc I want to be this person"

I'm not seeing a good solution for a player desire of "if I'm a tot/II/HR I want to be so-and-so though" - I can see both +s and -s for this, because there's a real problem with "known people who queue antag who also have a favourite character" on some more family servers (i.e. servers where you learn to recognize people) which I call the Bodie Phenomenon where I think a story might exist for

"AS A Player
I CAN specify that, when I am selected as a hidden antagonist like a traitor or head revolutionary, I can have a custom/default/random character instead of the character I'd normally prefer to have in the role I've been given
SO THAT I can't be metagrudged as easily"

Problem being that things like tot selection currently happen multiple minutes into the round as a cope mechanic for people rushing objectives

@FairlySadPanda
Copy link
Contributor

FairlySadPanda commented Mar 27, 2024

Frankly I also think there could be scope for just divorcing character selection until after the matchmaking code has given you a round start role allocation. That would then make things unified once you've got a role picked between late join and round start -> pick/assigned a role, pick a character, deploy.

"YOU HAVE BEEN ASSIGNED: CLOWN

DO YOU WANT TO PLAY AS
HONKLES
HENKLES
JOHN SYNDICATE

YOUR ASSIGNMENT WILL BE REVOKED IN: 30 SECONDS"

BUT THEN you need to sort roundstart spawning to occur as being from late join areas rather than folks just spawning in their department like they currently do. Which might be a good thing? Considering at the moment spawning dumps you in a powerless room whilst the server concludes map init,...)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Design Related to design documentation for Space Station 14. English
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants