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

Option for long-term consistency between games. #20744

Open
kevingranade opened this issue Mar 31, 2017 · 10 comments

Comments

Projects
None yet
6 participants
@kevingranade
Copy link
Member

commented Mar 31, 2017

This concept has been floating around for a while, but didn't have a really good plan for implementation, I just thought of one so dropping it in.

First the problem, sequential or simultaneous games in the same game world can create temporal and other inconsistencies since each player has a separate time line, and they advance completely independently of each other. For example if a player visits an area last visited by another player "from the future", the game logic is unable to roll back the state of the items in the area. The result is items that never rot, crops that don't grow, monsters that are too evolved, etc. This can happen in both simultaneous and sequential games, but simultaneous games have even worse failure modes, such as dissappearing or duplicated items, suddenly halting effects, or sudden changes of map state.

In broad strokes, the solution is to engineer the game to insure that a player can never interact with the section of the game world of another player until the first players timeliness has caught up with that of the second player.

This is simple for sequential games, we could just make an estimate for how far a player travels per day, record the time difference vs lifespan of other (now dead or retired) players, and place the new player at least lifespan*distance away from any other player location. The same doesn't work for simultaneous games though, because each player is still active.

This brings me to my new idea, which is that each active player gets their own "zone" of the game world, which are not actually related to each other in a geographical sense, it's more like they are namespaced to the particular player. The only way a player can interact with another is via their zone 'consuming' the zone of a dead or retired player. How this would work is when a player dies or retires, their zone is orphaned and becomes eligible for spawning adjacent to an existing player zone, but it will only do so if the time line if the active player is larger than the timestamp of the orphaned zone. When the zone is spawned, it would just have its overmap coordinates adjusted to be adjacent to those of the active players area.

@Coolthulhu

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

How this would work is when a player dies or retires, their zone is orphaned and becomes eligible for spawning adjacent to an existing player zone, but it will only do so if the time line if the active player is larger than the timestamp of the orphaned zone.

Why this restriction?
It sounds rather strict: no "bones" until you age more than the source world.
It could be relatively easy to do sanitization on "bones" planting - we could even implement it as a part of the calendar class, then ensure age fields have calendar type.

@kevingranade

This comment has been minimized.

Copy link
Member Author

commented Mar 31, 2017

@kolsurma

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

Why not have all gameplay start at the current turn which would be tracked by the world? It would mean that any later players would have a more difficult time of it with monster evolution, but there wouldn't be any issues of food not rotting, etc..

edit: specifically I mean this for server-play, or some sort of hot-seat multiplayer. For single-player it should stay the same as it is now.

@Coolthulhu

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

Why not have all gameplay start at the current turn which would be tracked by the world?

Because there are no "earlier" and "later" players - each player gets a separate clock that advances independently from the rest. You can start character A, save after 1000 turns, then start character B and play for 10000 turns.

@kevingranade

This comment has been minimized.

Copy link
Member Author

commented Mar 31, 2017

Why not have all gameplay start at the current turn which would be tracked by the world?

This is inherently inconsistent for the existing starting scenario, where was the player in those intervening days, months, or even years?

From a gameplay point of view, the world would eventually become unplayable, because at game start all pre-cataclysm food would be spoiled and all zombies would be fully evolved.

@Mecares

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

This is inherently inconsistent for the existing starting scenario, where was the player in those intervening days, months, or even years?

Would be okay for starting in a lmoe shelter and we could add a room with cryogenic vats to labs with a console that says "critical power failure, initiating emergency release" like fallout 4 does.

@kolsurma

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

I get where kevin's coming from, it invalidates most of the pre-existing scenarios when you start 2-3 years from a previous characters play time. As a single scenario starting from a cryo-pod would be fine and there are delayed start scenarios already, but it doesn't fix the others.

What if we just change the birthday of items to be the current turn if their birthday is greater than the current turn?
edit: No, this won't fix simultaneous PC interaction.. just sequential. hm.

@Zireael07

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

@kolsurma: uh, where are you getting 2-3 years from?

@kolsurma

This comment has been minimized.

Copy link
Contributor

commented Mar 31, 2017

I guess I didn't complete that thought.

If your PC plays for 3 years then kicks the bucket, the next PC shouldn't start 3 years later from the normal start date in world.

@kevingranade

This comment has been minimized.

Copy link
Member Author

commented Apr 1, 2017

What if we just change the birthday of items to be the current turn if their birthday is greater than the current turn?

See my previous answer:

Because rolling back time is inherently fragile. Any non- reversible change like rot, monster evolution, terrain degredation, or anything else we add that involves a permanent change can't be reversed, and would be a source of inconsistency.

I don't see why this is a problem, it limits zones that can be added to your current game to the ones where adding them would be consistent. If you don't want to prioritize consistency don't turn on the option and you get the current behavior where games are allowed to chaotically interact with each other. To be clear, I have no interest in this being the sole or even default mode for the game, just an option for people that really don't like their games being inconsistent. In practice I'm skeptical that a significant number of players know or care about these inconsistencies.
One case where this might be a really big deal is if a number of people are playing on a shared server and want to interact with previous games. If you throw enough people at the server the inconsistencies will become readily apparent, so turning this sort of thing on might have a large impact.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.