CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.26k stars 4.12k forks source link

Party-based gameplay #51632

Closed eltank closed 1 year ago

eltank commented 3 years ago

Writing down ideas for a feature I'm working on.

Is your feature request related to a problem? Please describe.

Your "main" character can't master all the skills and proficiencies in a reasonable timeframe (or, it's very tedious). Instead, why not control a group of characters with different specializations and switch between them freely? For example:

Describe the solution you'd like

Evolve the proof of concept from #51450 into a full-fledged feature that doesn't involve the debug menu. Add a new World Option, "Party control" (or something like that). Defaults to False for the vanilla Cataclysm experience. When set to True, the game changes in the following ways:

Problems to overcome: 1) All NPCs have an "opinion of you". This doesn't change when you control a different character. 2) It breaks Stats Through Kills. XP is stored in a global object (the kill tracker) and bonus stats are stored in the avatar object (which means bonus attributes are re-applied whenever you switch characters). 3) Memorized translocators are stored in the avatar object. 4) When your active character sleeps, followers stop what they're doing and also sleep. If you allow them to sleep when they want, they often do so at inconvenient times/places. 5) Need to verify that weariness is applied correctly to NPCs performing activities in order to avoid exploits. 6) For balance and immersion, NPCs who are performing tasks for you should require food even if using the no_npc_food mod (which would apply only when they're following or guarding). When you take over an NPC, this happens anyway.

Other things stored globally or in the avatar object which are preserved on character swap, but which I don't consider problematic: map memory, skimmed books, identified magical objects, calorie diary (only used for debug AFAICT).

Proposed solutions: 1) For non-follower NPCs this is probably fine, if it's explained as "opinion of your group". After considering different options I think this can work for followers too. Since I intend to keep "active/completed missions" a global concept (rather than per-character), that means completing a mission for an NPC should credit the entire party not just whoever "turns in the quest"; the NPC should gain trust in your group as a whole. So... don't do anything except maybe change the way opinion is described in-game. 2) Track XP gained per character and move StK bonus stats into Character. 3) Move translocator memory to Character, unless Korg says the Magiclysm lore allows characters to freely share translocator information somehow. 4) Add a conversation option to order an NPC to sleep (which they may fail to do if not tired or there is too much light/noise). Also add the option to switch to another character when your active character goes to sleep. With enough NPCs you should be able to play continuously without ever "waiting to wake up".

Describe alternatives you've considered

1) Build an opinion matrix, with every follower having an opinion of every other follower. I decided against this because it gets tedious to keep track of all the relationships and it causes annoying situations like: you can switch from A to B and from A to C but not from B to C, so when you're playing B you need to switch to A first in order to switch to C. However, I may consider salvaging part of this idea, which is the following optimization: To keep things simple, track a single value, the trust score, since that's what determines willingness to follow orders. For the purpose of speech checks, the other 3 components of opinion ("value", "fear" and "anger") could be computed via a formula or even set to 0. The only follower dialog option I know of that even requires a speech check is "Can you teach me anything" and I would actually like to get rid of that when practice recipes are complete (since NPCs will provide training benefits by teaching you practice recipes and perhaps giving you a learning bonus while aiding you).

Additional context

PatrikLundell commented 3 years ago

I like the direction.

I wouldn't want to have to change the diapers on companions, and so would recommend not requiring food/drink for them when tasked to perform activities until they gain the smarts to feed themselves from the food and drink zones (and keep their hands off the booze under normal circumstances). I want them to eventually be a proper drain on the food resources, but don't want the current hassle. Now, it it was actually possible to task someone with cooking up a dinner for the whole team, have them assemble in the dining room, and eat it, it would be great, but I think we're very far away from that, especially with the current calorie hungry system where it's a struggle to just manage the PC.

The current system doesn't really support party combat roles, as companions don't know how to run. I think that would require a rather significant additional effort either in companion AI or a change to a party control system where you'd be able to jump around and dictate the actions for each companion and then "execute" the order. The current system complicates this by the varying time things take, so all companions wouldn't be available for new orders on every "turn".

My 0.E2 stable experience was that the companions started to run out of reading material, and most would probably be completely out at around the one year mark. Note that I kept them mostly active with base building and vehicle disassembling, although there tended to be one or two who were tasked with reading. Thus, skill specialization may be a fairly temporary issue. And, again, bringing specialist companions with you to dangerous locations has the issue of the current companion AI when in conflict.

In the long term, I think party based game play would have to be split from single PC play because of differing play style needs. Party combat is one aspect (although there's some synergy with improved NPC AI), but you'd probably also want to reduce the learning speeds from study to encourage specialization, and may well want to do the same with some crafting that might be faster than what's really realistic (I'd expect scrap metal from various sources probably would need some processing to make it homogenous and then adapted to what you actually want to use it for, rather than just immediately forge it into a weapon blade, for instance, unless you're willing to settle for a rather crappy blade).

Entity-y commented 3 years ago

I'm HYPED for this feature, this will completely change the game in the best way.

The opinion matrix could be added in a way where party members passively interact with each other like in Rimworld, occasionally throwing greets or rebuffs based off of their opinions of each other and could be triggered by a member being in a good or bad mood.

Higher social skill could greatly help sustain relationships. Certain traits like pretty, ugly, truth teller, and skilled liar could also be factored in.

If a member feels enough like an outcast they might suggest leaving on their terms, before deciding to steal from and attack the party.

DarianLStephens commented 3 years ago

From reading the PR, I'm actually thinking that it would be nice if there was no designated 'player character', at least in abstract terms like that. Rather, the player should just be the character you start the playthrough as, instead of some special-case entity.

I do recognize the benefit of always being able to switch back to your original character, as that could be frustrating otherwise, but perhaps there could be a 'preferred avatar' system, which keeps track of which character you tend to play as, or do more as in general. Eventually, if you play your original character less and less, this new one could be designated the 'player character', and your original character gains the ability to have an opinion and betray the group. This could lead to very interesting scenarios, where having played as someone else for a few weeks with barely any playtime as the original, they might not want to go on missions anymore, having to regain their trust before being allowed to switch over to them.

Of course, others might completely disagree with me, or have already considered this, but decided against it for reasons I haven't even thought of.

linonetwo commented 3 years ago

Rather, the player should just be the character you start the playthrough as, instead of some special-case entity.

I think the starting player is some kind of spirit symbol. just look at genshin impact for example, you start as a character, you will never use him because he is weak compare to other characters, but every mission is taken by him, and he is pushing the storyline forward.

As a role playing game, I think to have a center character as spirit symbol is important. Even when playing rimworld, many people will create a character under his name.

Anyway, greatly looking forward to this feature.

kevingranade commented 3 years ago

This isn't addressed in the details, but is kind of implied by "party-based". This can not allow cycling through control of different characters in combat in the same turn. DDA combat isn't streamlined enough to be a "tactics game" and micromanaging every action of every character you control on combat would make for an extrordinarally bad user experience. Similarly, operating everything at a faction camp by bouncing around and manually kicking off every task would be a really tedious way to do things, and there need to be limits on the system to keep that kind of thing from being an optimal but tedious way to play the game.

Having said that, a "tactics mod" that allows this would be fine, but IMO would require a ton of work to make it fun for protracted games.

eltank commented 3 years ago

Ah, maybe the title is a bit misleading. Suggestions for renaming the feature are welcome. This is not intended to allow simultaneous control of multiple characters like say XCOM. When you perform an action with the currently-controlled character time will pass for all other characters as well, who will perform actions chosen by their AI. The intent of this feature is to allow you to override the AI for any one character without locking you in to that character.

For basecamps, the current way of doing things is to go around talking to NPCs and asking them to work on stuff in a zone. For most activities this will still be optimal, since it allows NPCs to do multiple tasks in that zone without needing to be told again after finishing the first task. I think the way to improve efficiency there is by:

I do not think there will be much to gain from controlling individual workers, though it could help work around pathfinding bugs if they can't make it to the job site.

One of the cool new things that this feature will allow you to do is manage multiple bases (e.g. a main base and a forward operating base) by switching between "site leads". As mentioned earlier, it is also aimed at reducing boring "down time" by allowing you to switch to a "fresh" character when your current character is too tired/weary.

kevingranade commented 2 years ago

Cool, we're on the same page then. Managing multiple camps should simply be a matter of having a radio network, including things like adjusting zones and queuing jobs to move things around.

I like the use case where you can switch away from your main character if they have a protracted task they have to work on.

stale[bot] commented 2 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not \'bump\' or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.

Night-Pryanik commented 1 year ago

Closing as stalled, since stalebot can't do this by itself.

DarianLStephens commented 1 year ago

Aww, this isn't planned anymore? This is the one thing I was looking forward to! It could completely change how you actually play the game.

Zireael07 commented 1 year ago

Apparently closed doesn't mean "not planned", although I have no clue how people browsing the repo could know that.

linonetwo commented 5 months ago

Because it is closed "as not planned". While this is a very welcomed feature.

PatrikLundell commented 5 months ago

Because the lead devs don't want to see old suggestions that aren't picked up and worked on by somebody. I do not necessarily agree with that strategy, but that's how they do it.

Note that there is no requirement for a suggestion before the submission of an implementation, so if you can round up people willing and capable of implementing it in a fashion acceptable to the main devs, please go ahead (acceptable means stuff like not being horrible hacks, removal of a lot of functionality, and working in a manner that's deemed reasonable to players (according to the main dev's subjective opinions)).

Also note that it's also possible to submit implementations of features that make it easier to implement desired features later on, although features that are dead code with no use cases have a tendency to be rejected as dead code is highly undesirable.

linonetwo commented 5 months ago

I understand. This issue is my motivation of learning C++, but my progress isn't very fast...