Updated 9 months ago

Darkrun is a highly stylized shooter platformer hybrid, with innovative gameplay and adaptive, intense music.

The year is 2067. Whenever somebody needs someone else dead, they contact you.
You are Agent 21, a highly trained assassin, whose signature weapon is a grappling hook. In combination with your fast and fluid set of moves, as well as guns and melee weapons, you can take on any target you are assigned to.


  • Fast movement set, you can double-jump, dodge roll, duck, all while keeping maximum control over the player and his combat abilities.
  • Use your grappling hook not only for platforming, but also to solve small puzzles and kill enemies:
  • Pickup objects and throw them at enemies, all objects have unique damage and speed output, some might even explode!
  • Pull enemies towards you to finish them off with a melee attack, and then throw them at their friends to cause even more carnage.
  • See a door or an air vent that you cant open? Use your grapple!
  • Return to sender: Grab grenades or rockets mid-air and throw them back.
  • If you're out of ammo, use your melee attack:
  • Gain back health and ammo when killing an enemy in melee combat.
  • Block bullets flying towards you, they can even ricochet off.
  • Your contract, your choice:
  • Before starting a mission, you can select your point of entry, as well as your weapons and gadgets. Do you want to go in loud? Sure but watch out for reinforcements like helicopters, your target might even move.
  • Sometimes a contractor will give you bonus credits for completing an objective in a certain way, luckily all missions can be infinitely replayed until you reach the perfect high score and earn all rewards.
  • Upgrade your character and the agency's headquarters:
  • The agency will also profit from you, allowing you to upgrade and and buy new gear, as well as unlocking new bonus missions.
  • New gear allows for more depth in gameplay and keeps you motivated throughout the game, replay older missions with new gear and experience them in a completely different way.

Use of the new 2D Features:

Darkrun features 2D IK, 2D Animation, Vector art and Cinemachine. Here are more details on how I used them and how you can use them too to make your game better:

2D Inverse Kinematics:

I am using IK to move the characters hands to the correct position when aiming or using the grappling hook.
The following code lets the player aim at the mouse position and also looks if there is an obstacle in the way so the arm doesn't go through walls.
void UpdateAiming() { Vector2 direction = cam.ScreenToWorldPoint(Input.mousePosition) - gunIKStart.position; RaycastHit2D hit = Physics2D.Raycast(gunIKStart.position, direction, armLength, gunIKTargetLayerMask); gunIKTarget.position = hit ? (Vector3)hit.point : gunIKStart.position + (new Vector3(direction.x, direction.y, 0).normalized * armLength); }

2D Animation:

All characters in the game use the new 2D Animation bones which work perfectly and are easy to use, especially in combination with the IK system.
The 2D Bones also allow for ragdolling enemies when killed:

2D Vector graphics:

I love Vector graphics, and hearing that they are available in Unity now was great news! However, I am a lot better with Photoshop than with Illustrator, here is my (rather unique but working) workflow which also works with AI.
  • Create a new file in Photoshop with a high resolution (4096x4096) or in Illustrator
  • Use the polygon lasso tool as well as other shapes to create the object you want. Create a new layer for every object, instead of a new file! This speeds up things a lot!
  • Select all layers you want to have in your game, in Photoshop each object should have exactly one layer.
  • Then right click and export them as png files, or svg with illustrator
  • Only if you use PS: Use any vectorizer program to convert your files, I use Vector Magic, which works perfectly fine.
  • Import them into Unity and you're done!
If you work with illustrator you can skip the vectorization step, export multiple files at once works here as well and will save you so much time.
My "Rules" for this type of Vector art are:
  • Clear lines, don't add too much detail or your object will become hard to read - especially if it's just background art.
  • For Static objects, always use 90° or 45° degree angles.
  • Organic objects, like the player, enemies or the sun have round shapes.

Other art related stuff:
Dynamic objects are kept small and more detailed than the environment. A couple of months ago, I've read an article by one of the artists on Firewatch, about how they used a more detailed texture on 3D objects to signalize to the player that he can interact with it. I tried something similar in 2D space here, by making interactable objects, while still retaining the dark foreground color, more detailed in terms of their shape, so the player immediately knows which objects he can pickup and throw, shoot or use in any way. During playtesting I've found out that my brain automatically "tags" objects with a more defined shape as interesting and gameplay related, and blurs out the rest of the environment - which is exactly what I wanted, and all this without looking out of place. For an example of this in the demo video, look at the enemies, the tables, chairs and trashcans and how they stand out from the static environment.
The flying cars in the background of the city are each assigned a random sorting layer between the skyscrapers, the lower it is, the slower they will fly. Along with the "the brighter it is, the further it is away" technique and parallax scrolling used for the buildings, this creates a believable illusion of depth.

2D Cinemachine:

I was a little hesitant with using cinemachine at first, since I already had my own custom camera system, however I was extremely surprised by how easy it was to implement and how much better it was than mine.
I imported the package, clicked on Cinemachine -> Create 2D Camera, tweaked some settings and that's it. I had a better camera setup in 10 minutes than I coded the day before in 2 hours. It has all the features one would want for a 2D game!
When attacking an enemy, I am using a subtle screenshake which makes things VERY juicy! Especially the finishers in combination with particles and sound look absolutely gorgeous now.
public Cinemachine.CinemachineImpulseSource impulseSource; public void Shake(float shakeAmountX, floatshakeAmountY) { impulseSource.GenerateImpulse(new Vector3(shakeAmountX, shakeAmountY)); }
Dynamic camera movement:
When the player aims, uses the grappling hook, or throws something, the camera automatically adapts by following a camera aim point object that changes position based on what the player is doing.
This is achieved by changing the framingTransposer.m_DeadZoneWidth and Height
public Cinemachine.CinemachineFramingTransposer framingTransposer; void Start() { framingTransposer = cinemachineCam.GetCinemachineComponent<Cinemachine.CinemachineFramingTransposer>(); } void Update() { Vector2 direction = cam.ScreenToWorldPoint(Input.mousePosition) - gunIKStart.position; Vector3 target = _transform.position + new Vector3(direction.x, direction.y, 0).normalized * 1.5f; camTarget.position = target; } public void StartAimingGun() { framingTransposer.m_DeadZoneWidth = 0.005f; framingTransposer.m_DeadZoneHeight = 0.01f; } public void StopAimingGun() { framingTransposer.m_DeadZoneWidth = camWidth; //Original dead zone width and height framingTransposer.m_DeadZoneHeight = camHeight; }

The creative process:

The idea for the game came to my mind a few minutes after I found out about the 2D Challenge, my main inspirations during conceptualization were movies like John Wick, a little bit of Spider-Man and the game feel of Doom 2016.
Usually when I have an idea for a game, I try playing it in my head. If it works, I make a prototype. This is exactly what I did for this one, here are some screenshots throughout development:
I was trying out different art styles, I only later decided to use flat color, here is the progress of my main character sprite:

The Team:

There is no one except for me working on the game, I'm 19 years old and decided to take a break from my 3D game, which I've been working on almost every day for 2.5 years.
Everything you see here was done in 1 month and 1 week.
My brother did the awesome soundtrack!!
Making this game was a fantastic opportunity to not burn out on my current project, learn a lot about creating 2D assets and gameplay, as well as helping me identify problems with my current workflow which will really help my bigger game in the long run! I'll continue working on this project to release it as a full game someday and improve and add new features, levels, enemies. I am really looking forward to 2D Lights & Shadows in 2019, which will really take the art to the next level!
The only external asset I used was Universal Sound FX
Title logo font "Uberlin" created by Antonio Rodrigues Jr, free for personal & commercial use

Thanks to Sykoo for his helpful rigging tutorial! Thanks to the Unity team for their extensive tutorial videos as well, and of course this awesome engine!

Keep making games, everyone!
Student - Programmer
9 months ago
Thank you!
9 months ago
Jr. Game Developer
Good work mate!
9 months ago
Thanks mate, your project looks great as well!
Charles McCann
9 months ago
Architect, Developer
I like where you are going with this! Good job!
9 months ago
Thanks a lot!! (^ᴗ^)/