Recall - A 2D Platformer
Recall is the first digital game I’ve ever worked, produced in 2 months by Emperium and released in June 2015. It is a 2D platformer game where you play as Liss, a mutant girl with mind powers that must save her sister Tess from an evil scientist. I won’t get much into the story, my focus here is about the programming of this game, if you want to know more you can play the game. We made this game using ActionScript 3 and the Starling Framework, and using FlashDevelop as our IDE (integrated development environment). In the team there was 2 programmers: me, who handled all the events, player interactions and AI, and Maycon José, who handled the menus and cameras.
There were many challenges in this game: it was my first game project, and the first time I was programming, so I didn’t have much knowledge at all. Yet, we decided to make a game that featured an infinite loop, 6 different types of enemies, 1 boss with 2 different stages, and mind control powers with mouse interaction, all of this in 4 months in the same time we were learning the tools, programming and game concepts. We had to work hard to make it happen. So now, I will give a brief explanation of how we made things work.
The Characters
Liss
This is Liss, the main character. She uses 4 knives to perform her 3 attack combo and to defend herself from other attacks. She can also use mind powers to levitate boxes and interact with other objects.
To make her attack, we used a Quad, which is basically a square, used to detect collisions, in a way that occupied the whole sprite of her longest attack with a little extra area, for a better response. Her defense was also a Quad, that we enabled each time she defended. The enemy attack, on its collision check, checks for the defense quad, and then if it is enabled the attack deals no damage. Making her levitation powers on the boxes was kind of a challenge, we had to update the object position based on mouse position, but every time that collisions happened, it generated a quite bugging effect. Therefore, we decided to stop the focus mode whenever the box collided.
Enemies
The fact that we had 6 enemies and 1 boss with 2 stages made me desperate on the beginning. Let’s begin with the soldiers. There were 2 types of soldiers: a ranged one with a gun, and a melee one with a shield and a nightstick.
The ranged one, which I thought would be easy, had proven to be a challenge when the project required him to aim at Liss whenever she goes, so he had to rotate his upper body. By this time, we already had some sprites, and I had to ask to the arts team to split him into two parts. They got kinda mad for that, but the result were awesome. This one does not walk, he just stands where he are and shoots on Liss, when in sight. The melee soldier, just walks towards Liss, and beats her when on range, which is the base for the other melee characters.
Spike was another melee character with the special skill of shooting spikes in all directions. He has a random chance of shooting those spikes on range or in melee. The biggest issue here, was to make those spikes face and travel the right direction.
Lastly of the melees, there is Bruce, which has the special skill of throwing a boulder up that falls with a chance to hit Liss. He has the same random mechanic as Spike, but with a different ratio.
Then, we have another ranged enemy that doesn’t walk, it’s the bat mutant Morbius. He has 2 attacks: a melee attack where he kicks Liss, and a spit that paralyzes for a time. Thinking about his spit is kind of simple, because it behaves like any other projectile, but it travels in a diagonal direction and gets reflected when collides with the environment, which wasn’t that simple in the end.
Now we have an enemy that is more of a mini-boss, and this one is VA-3. He only appears if you have taken down the helicopter at the beginning of the current story loop. This one has 2 attacks: a flamethrower attack and a hand pull attack. The flamethrower attack shoots fire for a time and deals short but continuous damage, and the hand pull attack shoots his hand to try grabbing Liss and bringing her close so the flamethrower can be more effective.
Finally, we have the boss, Dr. Marcus, a mad scientist that plans to drain the powers from the mutants. Initially, he fights with a gun and throwing grenades. While shooting, he follows the same mechanic used on the soldier with the gun, but in this case, rotating only his arm.
After you deal enough damage on him, he injects himself with a mutant mixture and it leads to an unstable result, as he becomes a terrifying creature. In this stage, he has 4 different attacks: he spits like Morbius, shoots spikes like Spike, has a pound attack with his beast hand that stuns, and a swipe attack with the other hand. The spit and the spikes are exactly the same ones used on the other enemies, and the attacks are also close to the other melee attacks.
The Looping Effect
The game doesn’t end until you do things in the right order, otherwise you get sent back to the start with another chance. To do this, we had a series of puzzles and chain effects on the level that may or may not trigger the required inputs to open the boss stage access. If you have played the game, you may be familiar with the screen where the villain threatens to kill Tess and when he shoots, you are placed on the start of the game.
When that happened, we didn’t reset the level or anything, we just replaced the entire objects to match the current loop based on the actions you take. It doesn’t get harder or easier, it just gives you small tips about how to proceed. So, in the first time you complete a loop (when the villain shoots Tess), Liss says something about taking down the helicopter. If you use her mind powers you can, actually, take down the helicopter since the first time you play, this isn’t also exclusive from the second loop. When you take it down, it will break the mill right ahead and block the way with flames.
The mill also drops a gear, that works almost the same as the box: you can levitate it, but there is a difference: once you put it on its place, it triggers something. In the case of the mill, it washes away the fire, but it floods the hole that was present on front of it, and makes the boxes get floating. Here we had to implement some kind of water physics, where objects would drown slowly and in a constant velocity. If you stay too long on a box, it will start to drown.
Next we have the puzzle of the 4 buttons. This is an interesting one, we used an array of 4 booleans to open or close the door whether or not they were all true. You have 3 boxes and must place them on the right levers so you can stand on the last one and run for the door when it opens. In this same room, there is a set of gears that can be interacted to bring up the elevator to the boss (which you need a card that you can get in the woods where a Morbius take a soldier up the tree). One of the gears falls when you kill VA-3, but it is interactive since the start, even if it doesn’t fall.
Now, we have two possible paths: if you trigger the gear and enter the elevator, or if you complete the 4 button puzzle. In the first case, you will be placed up on the labs, where the doctor holds Tess, and then start the Final Boss Fight. In the other case, you would go outside the building and see the doctor holding Tess on the balcony with a pistol on her head. After he’s done talking he will shoot Tess, but the screen will flash and you will be back to the start of the game, with another chance to beat it. The whole catch of the game was in this part, where we set the looping effect.
Extras
The subtitles were made by using a json file organized with an array containing arrays of a number, the time in seconds the subtitle should appear, and its corresponding string. For example, the doctor’s first line when Liss completes the 4 button puzzle:
{
"sub":
[
[0, "I'm surprised you got this far"],
[3200, "That's why I'm so fascinated about\nyour race"],
[5250, "But with the vaccine I've developed"],
[7300, "The human race will reach a new level"],
[9600, "A level even higher than yours"],
[12100, "end"]
]
}
Now, for the subtitles to appear on the screen, as we were using the Starling Framework to develop it, they had to be displayed on a Flash Sprite on top of everything. So, we also had to use flash’s native text to write the subtitles on this topmost sprite. Sadly, at the time, we couldn’t apply any effects like outline or strokes on the subtitles, also because the game was already online by the time we finished working on those, so we had to rush a little.
This is it for Recall, I really hope you appreciated knowing more about our project. Let me know if you have any questions, I’ll be happy to answer!