Traversal freedom

Published April 20, 2024
Advertisement

The world can be linear or open. The environment can be hand-crafted or procedural. But more important is the requirements of the story structure. Is the story scripted or systemic? Most games use a mix of all of the above. But the needs of the story will usually result in limits of the available verbs in specific places. Verbs are the actions in the game, like walk, run, jump, hit, climb, open, use. The needs of the story will keep the player from going in the wrong direction or doing the wrong thing by disabling verbs. You will see that you often aren't allowed to hurt friendly characters, or you may not be able to open a door before you do what's expected in a certain room.

A systemic game has locations with properties that interact with each other and the actions of the player using rules that apply everywhere in the game. That allows the player to find solutions to puzzles, quest objectives or scenarios that the game designer did not consider. The much more common variant is the scripted game where places in the world are marked up and rules for what happens depend on quest progression.

Invisible walls

Games like Horizon, Tomb Raider and Uncharted are infuriatingly bad in this respect. It becomes a game about guessing where the creator wants you to go. Some classic adventure games do it better with the avatar just stating that they don’t want to go that way or do that specific thing. Detroit Become Human will show a visible barrier in the world stating that the place or action is not available since it’s not in line with your current objective.

The design team will usually develop a consistent style for indicating where you can and can’t go. In some games, wines indicate unclimbable walls, while in other games they indicate the opposite. And I really don’t like it. Lara Craft will jump and climb all over the place but can’t for her life find it in her to climb over a piece of rubble on the street. Aloy will push through narrow cracks in deep underwater caverns, but stands dumbfounded in front of a relic ruin with gaps between the beams in the wall, far wider.

The very first scene in Horizon Forbidden West has a whole bunch of these walls. There are thickets, rubble and walls she should be able to pass. The invisible wall breaks the immersion and puts a damper on the sense of exploration. Even worse; you see the way forward, but can’t go where. The jump button has been disabled. And if you are like me and turn off all the screen UI for maximal immersion, you will easily miss that the game wants you to both collect and use the healing herbs before you continue. Neither Aloy or Varl says anything at the ledge. The jump/climb button doesn’t work. I was about to reload the game because this seemed like a bug. – But this is just one of thousands of similar examples. You are supposed to be able to read game developers' minds.

There are games with less invisible walls. The first generation of Tomb Raider was excellent. The block based design made everything perfectly consistent. There was a complete mapping between all your moves and everything in the environment. Other examples are Dying Light and Death Stranding that use systems to determine where you can run and climb, rather than manually placed borders and tags.

Level design

Adventure puzzles are usually scripted in a way where the game designer accounted for all the allowed solutions. A systemic puzzle may instead be characterized as a problem that can be solved in several different ways, using the interactions of tools on the environment and objects.

Just disabling verbs in order to limit the choices for solving a puzzle is lazy design. I would prefer to use the knowledge of the game to figure out what I can do. I don't like the manually marked climbing and grappling points in Horizon Forbidden West or God of War. Each tool should have a defined and logical interaction with every other object in the game. See NetHack.

Games will often impose limitations in where you can go as a way to optimize for fun. By limiting the players options, they will have to handle the situation in new ways. I will always try to find a safe way to survive combat, often climbing up to an advantage and peeking out from as far away as I can. But doing the same thing every time might get boring after a while. I hate to get locked in a room with nowhere to run or hide. It feels okay if it happens naturally as part of the story, but I hate it if I see a way to do it better, but the game stops me for no good in-world reason.

A non-lazy level design will naturally vary viable tactics. Don’t have things that look climbable if it’s part of the puzzle to find another way up. Don’t provide a clear view of the enemy from a hidden vantage point if the intent is to have a variety of encounters. Many games do this well for combat encounters, but not so well for puzzle rooms.

A game will usually introduce a game mechanic in the form of a tool or skill and follow that up with a series of situations where the newly introduced mechanic can be used. It’s a common problem that the player may have gotten used to and prefer another tool and try to brute force progression. A non-systemic game can force the player to use the intended mechanic to proceed. A systemic game will have to find other ways to make sure that the player actually learns the intended mechanic. One such way would be an actual in-world guided training scenario with some sort of judge commenting on your result.

A systemic game should provide variety that invites use of different tools and tactics without strictly enforcing those. Let's say you have explosives that would break open a door, but the current puzzle is set up for you to find and use a key. You may start with a hint that the key can be found. The way to the door may go through water, making the explosive unusable. The explosive may also cause sound attracting unwanted attention. And it could also cause the wall to fall down or nearby lanterns to explode or start a fire burning up the things you wanted from behind the door. These are results you often don’t see in authored games, since that would be too many permutations to handle.

The game should continuously evaluate if the player is stuck in a place, or generally seems frustrated. A systemic world will allow avatars to get themselves in places they can’t get themselves out of. It should always help the avatar to climb or move out of narrow spaces, back to a previous position. The game should always check that the player can solve the current situation. For example, if the avatar is stuck between the door and a recently collapsed hallway, and doesn't have any of the known ways to get through the door or get back out, the game should introduce something appropriate for the situation. It could be that someone opens the door from the other side, or the rubble shifted to provide a way to squeeze through back out, or someone eventually comes to the rescue.

You can also encourage the player to use different approaches by altering the rewards, through the connected systems. Some tools may destroy things that would be valuable to collect using other more specific techniques. It may be an optional reward connected to speed or skill. Varying the situations should be enough to promote variation in approach without limiting what you actually can do. A rich system of interaction would allow the player to find their own way.

0 likes 6 comments

Comments

JoeJ

The game should continuously evaluate if the player is stuck in a place

This might be not possible in practice.
For example, for a game of blocks on a regular grid, your proposals of checking a blocked path from a collapsed passage can work.
But for a modern 3D game, where the collapse causes heavy rigid bodies getting stuck in a narrow passage, it can become notoriously difficult to check if the player could manage a way through or not.

In general i would assume it's impossible to avoid players getting stuck, nor could we detect if they are stuck. With a systemic game those issues become worse. No matter how much potential options we give, in some cases the player will run out of options.

Terminating the game and going back to the last checkpoint might be the only robust solution.

April 21, 2024 10:58 PM
aigan

@JoeJ

For checking if a player is stuck, I'm thinking specifically of 3D worlds with complex geometry. There are in general three cases. Up, down or lateral movement.

My idea is to save a trail of the players position and keep positions as long back as needed depending on the type of game geometry. For example, check every step and save a new position if it's more than a step away from any of the latest 50 positions.

The first thing is to see if the player is trying to move to any of the previous points in the trail and slightly adjust the margins for collision so that the player can go back the way they came. If the player has been moving in the same place for several seconds, it can be interpreted that they try to move but can't and the game should increase the margin a bit more, but only for getting exactly to one of the previous positions in the trail.

If the game has movement where you can jump or climb up on any geometry, it should use the same algorithm for going back up or down along the trail.

There may be many other situations where something dynamic has blocked the path. A boulder or closed door or moved platform or big monster that will eat you. So you are right that it will not solve all cases. There needs to also be a fallback to getting back to the last safe space. But I'd like to do that in-game if possible, by letting the player shout out for help and getting rescued, or anything else that can work in the specific game and situation.

For example, You are stuck in a hole with no way to climb out. Through a menu action you select to wait for help or travel back. There can be a cut-scene for you waiting, falling asleep, waking up as somebody or something is rescuing you and you regain control back at the camp or safe place again.

April 22, 2024 06:08 PM
JoeJ

The first thing is to see if the player is trying to move to any of the previous points in the trail

That's really an interesting idea. Idk yet for what it could be useful, but i feel there are applications other than what's currently discussed.

Regarding analyzing the player, i'm afraid players like myself would confuse your game way too much. I constantly get back to where i came from in games. Not by intent, but by mistake. I lack orientation, and thus run in circles and get lost all the time.
I need more landmarks, more variance in lighting conditions, less visual repetition.

Regarding detecting if the player is stuck, it won't work. Because if the way you came from is blocked, that does not mean there is no other way out.
For that, we would need to grow potential paths the player could go. But as player simulation becomes more complex (single point in a grid of blocks → capsule in low poly, mostly static environment → multi-body-robot in complex and dynamic environment), we can no longer use paths and navmeshes as a reliable approximation to quantize potential movement.
Also, growing paths to a given max distance may fail anyway if the dead ends are too far away to be detected.
So what we need would be a set of potential targets for our path finding, which are guaranteed to be save. Basically checkpoints, where your game is eventually saved automatically or where you can do it manually if you want to.
Which raises the question: If we need checkpoints anyway, then why work so hard on detecting if the player is stuck? If the player feels stuck, he can just reload the last checkpoint when he wants. That's giving freedom to the player - he can do what he wants, when he wants. Isn't that what you primarily want? ; )

I mean, maybe you take it too far with ideals. Many things are just too difficult or impossible. We have to live with that and design around it. This may cause some invisible walls or other hacks, and players will complain. But maybe they just don't know that alternatives would be broken, frustrating or cumbersome.

For example, you mentioned Tomb Raider was great because it had no such invisible wall hacks.
That's true. But those games had no damn horizon. There always is some wall blocking your view. You never can see very far at all. But it was the norm everywhere back then, so nobody has complained.
Now we can enjoy beautiful vistas in modern games, for the price of some invisible wall here and there. Yes, the walls suck, but overall it's still an improvement imo. I do not really bother about those things.
For me it's rather the openness which is the problem. If i can go in every direction, exploring a world which is just huge and feels endless, then my motivation to do so becomes zero. That's why i agree that walls should not be invisible but visible. Because if i see a wall, i want to know what's behind it.

For example, You are stuck in a hole with no way to climb out. Through a menu action you select to wait for help or travel back. There can be a cut-scene for you waiting, falling asleep, waking up as somebody or something is rescuing you and you regain control back at the camp or safe place again.

Is it worth the effort?
Going to the menu to reload isn't any different than going to the menu to wait until magic helping hands help you out of the hole.
In the end you go back to your camp. But one way is much easier and cheaper to implement than the other.

April 22, 2024 08:07 PM
aigan

@JoeJ

The suggested system for avoiding players getting stuck is not for anything that would be covered by path finding. It’s not for you running around and trying to find a path forward. This suggestion is specifically for:

  • Finding a way to squeeze past piles of debris that was intended to block the player, but they managed to find a single pixel to get deeper into the rubble, and then no longer can move at all.
  • Trying to get over an obstacle by bunny-jumping in a way no QA tester had the patience to manage to get right, navigating your way up an impossible cliff.
  • Fell down a crevasse in an area not related to any place where you were intended to be.

For thinking about using the movement trace, it was always for situations while crawling in constrained spaces. If I see a space where my avatar should be able to go through, I want to be able to do it.

For games with any navmech, you could just disable that system until you move outside the mech.

If the world has greater complexity, you can save 500 steps instead of 50. And It doesn’t matter if you run around, since it should only save another point if you move outside any of the existing ones. You can translate the position to a grid and check if the approximate position has been visited or not. So the player will “paint” the world while they run around in it.

Horizon Zero Dawn was amazingly robust in its open world. Despite there being procedurally generated holes where random geometry intersected, you could always jump your way back out. But it's stupidly limited in the ability to climb, with lots of invisible walls.

My suggestions also come from the perspective of “my type” that cares about immersion. I will always prefer to treat any game as permadeath and never reload a previous save, even if it will take a lot of effort to get out of the situation. I will also always prefer in-world explanations for travel. Time should advance according to how long the traversal takes. You should not be able to do it if you couldn’t go there safely by yourself.

The first generation of Tomb Raider worked, not because of the limited view distance (which was very limited) but because it was built on a grid. It made navigation much easier for both the player and game designer.

Of course, there should be interesting things in the world with lots of things that block your path. As long as it’s explained to the world. Not invisible walls. If it’s outside the edge of the map, I would prefer a message that just says that you reached the edge of the map.

If it's about quest design, I will hate it, and they should have done it differently. But it’s at least less bad if the avatar says “I don’t want to go there yet”.

April 22, 2024 09:50 PM
JoeJ

The suggested system for avoiding players getting stuck is not for anything that would be covered by path finding.

Personally i do think the problems you mention fall into the category where we use path finding.
You want to know if the player is stuck, so you also want to know where he can go. To figure out where NPCs can go, we use path finding, so you would use the same system for the player. If he can't go anywhere, he's stuck. If boulders block a way, NPCs also need to know this, so the path finding system deals with it.
When i was thinking about a difficult toy problem for my ragdolls, i came up with the example of repairing the motor of a car, requiring to put a screwdriver at the proper angle to a screw which is hard to reach. That's a motion planning problem, as we need to solve for trajectories for the body parts towards a target pose where the screw can be reached. Although much harder, for simplicity i would also call this a path finding problem eventually.

  • Finding a way to squeeze past piles of debris that was intended to block the player, but they managed to find a single pixel to get deeper into the rubble, and then no longer can move at all.

A very similar problem to the car repair. I imagine my ragdoll crawls through loose boulders in a cave. And then it gets stuck, can't move forth nor back. At this point the systems attempts to move may also look silly or at least clumsy. Pretty bad.
I would say at this point we're totally fucked. Your design idea is to introduce helpful external events, e.g. some guys come by to pull us out, or we just disable collisions to some rocks so we can get through, etc. But this does not solve the underlying technical problem. The ragdoll may become unstable, the solver may explode. Some body parts may fly off to the moon, part of the body will tunnel through the rocks and end up in another part of the case. Joints may still try to pull the parts together, they will jitter like crazy. The solver might even hang in an infinite loop attempting to recover from the chaos.
So when your team to secure us arrives, the game may have already crashed, or at least the avatars twitching body parts may have broken off.

Maybe i did exaggerate a bit with that horror story, but if so, not much.
Maybe it would be easier by just using animation, avoiding the unstable behavior of physics simulations? Maybe, but have fun with animating such a rescue operation. Human animators would mostly totally fail at this, so a procedural system will just look embarrassing.

To deal with this, there is only one way: Make sure we never can get into such mess. We can't deal with it, so we must avoid it. This means restrictions and invisible walls eventually, but most likely excluding things like a cave collapse completely, or at least from the (systemic) simulation. After the collapse, the boulders will be static. The path is just closed. Some small dynamic rocks can be there for decoration, but i have never seen a player crawling through a collapsed cave in a 3D game. And now you know why.
If you dig a cave in Red Faction, that's possible, but the loose material just isn't there. There is the hollow case but no rocks representing the volume which is now empty but was formerly solid.
This way you can't get stuck at all. There always is enough room to move freely.

You know, a lot of those invisible walls are there for technical reasons. It's not bad design ensuring the player behaves as intended. It's just necessary to not break the game.

Ideally, new design ideas would not force us to push technical boundaries.
But you tend to assume we should or could push them easily. We can't.
That's also why no other AAA game has adopted the cave digging mechanics from Red Faction. It can be done, but it's too much effort and problems to be worth it.

You can translate the position to a grid and check if the approximate position has been visited or not.

That's very dangerous. There may be a wall splitting a grid cell, causing false positives and all kinds of errors. That's why navmesh is standard for 3D games. So you could use polygons of that to measure path proximity. But ofc. it's hard to generate navmesh at runtime from procedural or dynamic scenes.

But it's stupidly limited in the ability to climb, with lots of invisible walls.

Idk, but i guess for climbing they need to place anchor points and edges manually, so you can only climb where the level designer (or a procedural system) has prepared the scene.
That's something i want to work on. I want the AI to spot potential anchor points at runtime, so you can climb anywhere and i have less work on level design.
But that's surely both difficult and expensive. It requires sensing the scene at fine granularity, which is totally different from how current games work.
I'll try, and i do not even think about potential issues such as ‘what should happen if we get stuck?’. I just assume - if i can make this work, which is hard, then i will find solutions to emerging design problems as well, which seems easy in relation.
In my opinion, game designers start working only after the game already works. :D

My suggestions also come from the perspective of “my type” that cares about immersion. I will always prefer to treat any game as permadeath and never reload a previous save, even if it will take a lot of effort to get out of the situation.

Makes sense, but then you need to make sure the player just can't get stuck even more, eventually minimizing your options regarding systemic game and player freedom.

At least i guess so. I have never played a permadeath game. Tried Returnal, but not for long, and i was just confused about permadeath and did not really get it.

To me, death is as good scapegoat to break immersion for a moment.
Mostly i stop playing for the day when it happens.
But that's not bad. It's just a game, no second life.

The first generation of Tomb Raider worked, not because of the limited view distance (which was very limited) but because it was built on a grid. It made navigation much easier for both the player and game designer.

Nah, that's not why it worked. Look at Quake. No grid, but the same robustness otherwise and feeling much more natural.
Grids are nice technically, but i do everything i can to hide them. It's fine for 2D games, but tabu for 3D.
I'm a grid hater >: )

I would prefer a message that just says that you reached the edge of the map.

But that does not solve the tech problem.
What happens if ignore the message and keep walking? An invisible wall 5 meters later?

There are only 3 good solutions to this problem:
Island surrounded by water. You do not notice that you don't move past a boundary when in water. : )
A tiling world. Left out, right in. Seamless at the edges. Sadly that's rarely used. Magic Carpet did it.
Or an infinite procedural world.

Oh, i just remember the game Cradle. A pearl somehow.
When you walked to far a strange sound appeared. I did not know what it meant.
So i walked on, and then i died. Something like a radiation death maybe. I was confused.
It happened a few times until i got it.
But actually an elegant solution.

April 23, 2024 12:33 AM
aigan

@joej

The ragdoll may become unstable, the solver may explode. Some body parts may fly off to the moon, part of the body will tunnel through the rocks and end up in another part of the case.

I know what you mean. I Have seen many examples of it. Parts of the body can get stuck on different sides and the correction will cause all kinds of movements trying to resolve a position.

I think it's funny how Cyberpunk 2077 still has things constantly exploding. Objects like coffee mugs standing on a table will be activated when the player comes close. The physics simulation reacts on the initial location causing collision, often resulting in an explosion. Somehow is the initial adjustment of position treated as a very fast movement.

There seem to be a whole generation of game engines that has this problem in some form. It doesn’t understand the difference between movement caused by collision resolution and movement as a result from in-universe movement. There need to be two or three separate states. The intended position (from user or other systems), the simulated physics position and the resolved position. The wanky movements are a cause of mixing these up. … That’s my guess as an outside observer of this field. I have no direct experience, except some very early things I did on my C64 (in 2D).

But that doesn't change the general idea of how to accommodate movement in complicated constrained spaces. The trace holds a history of allowed places. Then it’s up to the engine or physics library to figure out how to place the joints to fit in that space. You can also use the info about how the points are connected, to know on what side of things are.

For me, the ability to explore any space without invisible walls, is far more important than any idea of clean or correct physics. Don’t care if you phase me through rocks or do some sort of teleport. It's still much better than being stuck.

The idea about using cells was just an idea for optimizing as a lookup index. It’s not a replacement for the exact position of points. The cells will hold the points stores.

i guess for climbing they need to place anchor points and edges manually, so you can only climb where the level designer (or a procedural system) has prepared the scene.

Dying Light has a very good systemic climbing. It will find climbable edges at runtime using an efficient method of raycasting, and it works for enabling free-form parkour in a large complex open world.

Nah, that's not why it worked. Look at Quake. No grid, but the same robustness otherwise and feeling much more natural.

Tomb Raider came out at the same year as Quake, but with a worse 3D engine. The grid system makes it so much better. As an effect, all movement is predictable. You can grab hold on any edge. You always know what you can reach and how you can climb. That's better than any idTech engine. The movement set was expanded in Tomb Raider 2, and let you do even more things like wall-jumps. Having this work, universally on any geometry, would not be as easy without the grid system.

What happens if ignore the message and keep walking? An invisible wall 5 meters later?

Both Witcher 3 and Horizon Zero Dawn give you a warning at the edge. If you continue, you will be teleported back to a previous location.

Having an island will not stop you from swimming out.

Other solutions include steep mountains that you can’t climb.

The game Journey has another solution. When you go too far in the wrong direction, you will experience an ever increasing sand storm that will blow you back inside the map.

April 25, 2024 08:09 AM
You must log in to join the conversation.
Don't have a GameDev.net account? Sign up!
Profile
Author
Advertisement
Advertisement