“Vision” describes the passive ability of seeing silhouettes of attacks from enemies a shortly before they happen. It empowers the player by giving them an extra bit of time to react to danger. Vision is a unique mechanic, and to my knowledge there hasn’t been a game before that offers a feature like this.
This idea came to me when considering how gameplay would work with the Flashback mechanic, where every time the player made a mistake, they could rewind time and correct it. This lets the player learn what the enemy is going to do next and play accordingly, which is a neat concept, but the execution didn’t seem much fun. Rewinding every time the player gets hit seems like it would get boring after a while. Having visions of the future was my proposed solution of preserving the concept, but removing the tedium from rewinding time. The name was inspired from a similar concept featured in Xenoblade Chronicles, a game I knew about from the Super Smash Bros. series but never actually played. Later I found out that the vision mechanic in that game works much differently than my idea for Vision ~ SR. So…it’s still unique! Still my idea!
Visions of enemies (and projectiles the visions spawn) are rendered as cloned versions of the original enemy with a simple grayscale shader. The visions make no noise and have slightly transparent sprites, which makes it clear they’re intangible. But they’re not so faint that the player would miss them. I also try to have enemies attack in such a way that movement is involved, resulting in a vision that moves around and stands out.
Functional Restrictions to Enemy Design
But that’s not the only way this mechanic influences enemy behavior. Obviously for Vision to work we need to know exactly where an enemy will be and what it’ll be doing in the next second. So for the span of time from when a vision appears to when the attack actually happens, the behavior of the enemy needs to be deterministic and predictable. This is surprisingly difficult to implement, as it turns out, and forces interesting limitations on enemy behavior.
Consider a Goomba from Super Mario Bros. It’s pretty hard to think of an enemy that’s more simple than something that just walks into you. If we wanted a Goomba-like enemy in Vision ~ SR to create visions of itself, we would need to be able to predict exactly where it would be in the next second. How hard is that?
If a Goomba walks in a straight line without accelerating, then the position it’ll be at is a simple function of speed and time. But what if it walks off a ledge? Considering where this ledge is or how above the next platform it is, it can be tricky to tell where it’s going to land. This might be manageable if we didn’t also consider that Goombas reverse direction when hitting a wall. What if, in the span of a second, a Goomba falls to a lower ledge, walks a bit, turns around after hitting a wall, and walks a little more? Where will he be then? Short of simulating a second’s worth of physics and movement in a single frame, there’s no reasonable way to tell! And that’s not even considering the possibility of bouncing off of other Goombas!
As it turns out, even a basic Goomba would be too hard for me to use the Vision mechanic before, as its movements are based off of reactionary behavior. Enemies with Vision-friendly attacks would need that span of a second to be completely planned out. In other words, position and state would all have to be determined from a pre-specified function of time. For example, enemies that move back and forth in Vision ~ SR do not react to the presence of walls. Instead, they move within static predetermined invisible bounds that make movement predictable. Given their speed, starting position and time since they first spawned, we can create a formula that gives us exactly where they’ll be at any other time. These predictable, deterministic functions are essential in creating enemies for Vision ~ SR.
Making Vision Fun
And here comes the really hard part: making sure these predictable movement patterns are actually fun for the player to fight against. On its own this predictability is boring and defeats the purpose of having the protagonist see the future in the first place.
Introducing randomness is a simple way to make enemies more interesting, and while we can’t add it to the spans of time when a vision is formed, we can instead use it at any other time. The movement behavior of an enemy when it isn’t attacking can be wild and varied. The time it takes for an enemy to prepare an attack can change as well, as long as it’s longer than the duration of the vision. We can create enemies that feel spastic and unpredictable when they actually aren’t for a specified block of time. This creates a more engaging encounter that makes the Vision mechanic useful for the player.
Another way is to make enemy attacks absurdly powerful and over-the-top. Vision gives the player plenty of opportunity to dodge, so while it’s easy to not take damage (and even easier when combined with the Flashback mechanic), the player can still feel accomplished for outmaneuvering devastating blows. Basically the player is OP, so in response I also made the enemies OP and that’s called game balance.
The player will also learn to value the mechanic, since Vision can be temporarily lost if the player uses Flashback too much. Predicting enemy movements without the aid of Vision is much harder, and will force the player to take a different approach, making the possibility of losing Vision a very important inclusion to the game. It also separates visions from “tells” of enemies in most other action games. If visions were essentially just tells it would be a pretty worthless mechanic, so I wanted to come up with distinctions between the two. To satisfy this Visions will occasionally be formed for non-attacking actions as well, such as teleporting or using healing techniques.
And here’s one last observation about the mechanic: visions cannot be made in response to anything the player does. For example: it would be impossible to create a vision of an enemy successfully landing a hit, taking damage from a bullet or dying. I want to devise enemies that take advantage of this, although at the time of this post there are no enemies in the game that do. Counterattacks and “combos” from a hit confirm are examples of attacks an enemy can perform without creating visions while still remaining consistent with the Vision mechanic. As these moves would likely be confusing for new players that are still learning how the game works, these will be restricted to late-game enemies and bosses.
Future of Development
At the time of this post Vision ~ SR is very early in development, so barely anybody knows about this mechanic. I have no idea if this idea will be received as fun, obstructive, or forgettable. It’s a risk that’s going to require a lot of playtesting and tweaking, and I hope people enjoy it!