As grotesque and ludicrous action hero, discover dark secrets of the White castle. Outsmart slippery Hermann the Gross. Pursuit descendant of El Oscuro in new chapter of the H.U.N.T. history.

Post news Report RSS Open but Directed Player Progression

Developer diary about Extreme Chase's open but directed player progression.

Posted by on

Introduction

Types of player progression

There are three types of player progression:

1. Linear. Player has to follow a certain path and it's not possible to walk away from it.

2. Open-world. Player is free to explore the environment and complete quests in any order.

3. Open but directed. Player is free to explore the environment, but there is only one possible order quests can be completed in.

Some games are fully open-world: there's one huge level or levels that get loaded on demand and the player can go anywhere. Other combine different types: levels can be open-world, but the game itself is linear and once you complete the level you can't go back.

Original ROTT vs Extreme Chase

Rise of the Triad 2013 is a linear game with mostly linear levels. Extreme Chase is open but directed. Here's a comparison of player progression between E1L1 from original game and Extreme Chase:

Player Progression Comparison: E1L1 vs Extreme Chase

White arrows - initial path from shore to castle. Blue - hunt for red key then go to graveyard entrance. Red - boss fight and final pursuit.

Progression on E1L1 is much simpler. You can rush to the exit and complete the level in about three minutes, ignoring the optional locations.

Why open but directed

The E1L1 picture also shows the feel of ROTT's outdoor levels: you're inside deep concrete or brick ravine and can't see much of the world around. I wanted to offer completely different look and feel. That's why Extreme Chase places players on a vast terrain where they can see their surroundings, not just peek through high walls.

Technical Challenges

Testing

Making it in such way led to certain technical challenges. Obvious one is testing. Unlike E1L1, you can't just move the camera to any point in the level and press "play from here": if you didn't complete previous events first, events you want to test just won't be active. Solving this challenge helped with another one I didn't yet know of.

Extreme Chase Debug Room

When the map is loaded, the script checks if it's "In-Editor" or regular game. In-Editor the player character appears in a debug room where each door teleports to a certain milestone of story progression, placing the world in the right state: activating required triggers, spawning&despawning characters and moving cutscene actors to positions they would be after cutscenes are finished.

DebugRoomKismet

The system behind cutscenes is very simple. For example, "Fake Turning Tables" is a version of "Turning Tables" cutscene sped up to finish in few milliseconds, with camera and player's hands removed. Playing it puts table and chairs in the same position as if player started from the beginning, entered the park and pushed them over. Same treatment is given to every cutscene.

Loading Checkpoints

Second challenge arises from the way checkpoints work in the game. Each checkpoint saves only few things:

1. Checkpoint Actor that was triggered (player will spawn there on reload).
2. Player score, counts of killed enemies and picked coins.
3. 20 boolean ("yes/no") variables.

In original game that's not a problem because each time a checkpoint is saved, there's a point of no return. A door locks behind you, or you fall in a deep pit, or there's a cave-in. You can not go back and see that all enemies you killed and items you collected respawned since these interactions with them were never saved.

"But what about E2L2, where one can go through series of traps in any order?" - you might ask. That's where boolean variables come into play. If you've already visited a certain door, the variable will be read on checkpoint load time and lock it. These variables are also used to save already discovered secrets.

Now, as you've already guessed, since I had debug room logic done, all that was left is add "Checkpoint Loaded" events to it.


What you see shortly after appearing on the level is "Debug Room" script placing everything into proper state.

Quicksaves are a totally different beast, though. Clearly the system is very limited to what's in original game. Loading a quicksave in Extreme Chase leads to tons of bugs and since official documentation doesn't exist, it's not known how these bugs can be fixed, and if they can be fixed at all.

A cheat code to reenable quicksaves exists. All you need to do is "use" this wooden plank five times.


Quicksaves are NOT SUPPORTED. Things will break upon loading. Maybe it'll go over the top and be too ludicrous to handle. And, due to their nature, reaching and reloading next checkpoint fixes all bugs caused by loading a quicksave. It's not guaranteed it would be possible to reach, though: what if the game softlocks after you kill a boss instead of advancing? Or a key item disappears?

Implementing Final Chase

Final Chase

You think you've seen it all, until Oscuro Descendant's magic turns the park into burned wasteland filled with lava from nearby volcano!

That would mean many objects are going to be hidden an the beginning and appear only in the end. How to manage them conveniently? That's why it they are in a separate streaming sublevel. That way they will be like a layer in Photoshop and could be hidden and shown on a button click.

But their static shadows would remain on the ground when they disappear! To bypass this, all of them are dynamic actors that can only cast dynamic shadows.

But AI will walk around these rocks even when they are not present on the location! That's why collisions are disabled, and the game turns them on when the final chase starts. Disabled collisions mean they won't participate in pre-calculated AI Paths. There's a ludicrously huge script dedicated to turn their collisions on.

When completion % and statictics were implemented for v0.98 update, it turned out the game only counts the collected coins if they are on the main ("persistent") level. That required moving them all to it and making additional script that hides them and shows only when the final chase starts.

That's it for today. Thank you for reading. Knowing how things work behind the curtain always gave me more appreciation of the magic that happens on-stage, and I hope to be able to transmit this feeling to you. Happy H.U.N.T.I.N.G.!

Post a comment

Your comment will be anonymous unless you join the community. Or sign in with your social account: