First person blink ability

Specialization Project

This was my work in the specialization course at The Game Assembly. I chose to re-create one of my favorite gameplay moments of all time, the blink ability from the Dishonored series. I wanted reference material from something I really love for this project.

  • Duration: 7 weeks
  • Language: Blueprint
  • Engine: Unreal Engine

Initial goals

The goal of the project was to copy the blink ability from Dishonored in unreal engine, to come as close as I could get and focus on what makes it feel so great.

I chose to work with blueprints because I thought that was unreal’s intended way to write gameplay. I was prepared to write nodes in C++ if there was a node I wanted but couldn’t find. Unfortunately I didn’t get that far, but if this was part of a bigger project the implementation would be in C++ for performance. However the blueprint workflow with fast iterations works really well for this kind of prototyping.

Problems and iterations

Player movement

The first obvious thing to create is the movement during the blink, this was also one of the most problematic and iterated on. In the first version I tried to teleport the player instantly, this however felt very snappy, even with effects to cover it up. I consulted dishonored for reference game design and looked at how they did it.

From what I found they seemed to linearly interpolate (Lerp) between the two points and cover this up with broadened field of view and intense radial blur. Since I’m not a VFX artist I knew from the start that this was a problem but I figured since I have written shaders and full-screen effects in HLSL it would not be that big of a problem. I will get back to this later on.

I experimented a lot with different easing functions to transport the player. Lerping was one of the first and it looks okay without effects but I figured I could do something more interesting. The most viable candidate I found was “ease out”, the problem there was that it didn’t feel good at all on smaller distances.

I finished with choosing lerp as my preferred way of transporting the player after implementing FoV change during the ability it felt really good. I felt satisfied with the result after having tried a lot of different methods and settling with the best one.

Teleportation raycast

The ability focus around raycast from the camera, see if it has hit anything in 10 meters, and save that point for teleporting to otherwise take the point 10 meters strait forward and save.

The raycast itself is easy implemented with just a single blueprint node, but the feedback in the reference game display both particles were you will teleport and were you will land below. This is really good for the player and something I really wanted in my clone. I solved it by raycasting again from the point you are going to teleport to. For both particles I check every frame if right mouse button is down and the particle is alive then I move them to their new points. Otherwise I create new particles and save them to my variables.

It was hard trying to come up with a good way of getting particles in the game, since I’m a programmer I don’t have the skills to create my own and I don’t have the time to learn unreal’s particle editor. Thankfully Epic Games has released their assets for Infinity Blade for free, with some minor modifications they were ready to use.

Result

I’m satisfied with the result I got, I managed to implement the core of the ability and at the same time get a insight in one of the biggest engines in the industry.

As always I see the problems and want to implement more and polish. If I would have had the time I would have made the teleport feel more fluid, right now it has it’s flaws and can behave a bit ugly time to time in edge cases. I wanted to look into full-screen effects more and have more of a radial blur to complement the FoV change. I also had plans that if I would have a lot of spare time I would implement the system to climb to edges you aim at.