top of page

The Last Portal

Summary

This is a game I made for itch.io's Secret Santa gamejam, where participants made and received a custom game based on a letter the recipient sent to their "santa". My giftee wasn't very specific but said they liked shooter games. Because of that I decided to try my hand in creating a short top down shooter with ability based gameplay. I also wanted to really put effort into the visuals and learned new programs and workflows to accomplish that.

​

Play the game for free here

​

​

​

Overarching gameplay

I wanted the game to be a fast paced experience with a sense of urgency. As I also wanted to get a very polished core gameplay in the time given, the overarching gameplay ended up quite simple. The player is given 7 minutes to escape the world they have been locked in. To do so, they need to find and destroy 5 objectives while fighting hordes of enemies. 

​

If the game were to be expanded, there would be plenty of design space with the player augmenting their abilities with different upgrades. But for the jam game, I went for simple powerups that are the same for each weapon. You can find your fallen comrades in the game and pick up an upgrade from them to one of your weapons. Each weapon has an upgrade to damage, fire rate and cooldown times. These reward the player looking around for more than just the main objectives and create some variance in the gameplay with a noticeable feeling of progress.

​

The main objectives are static, but the upgrade locations are randomised each game. I tested slight randomisation for the main objectives too, but it didn't feel like it added anything to the game experience. Rather, by having them static, it made it easy to control the difficulty by placement of terrain and enemies.

Core gameplay

After some experiments with different ideas, I ended up going for a relatively conventional gameplay. I turned my focus to making 3 different and interesting weapons and trying to nail down an excellent game feel for them.

​

The player ended up having fast shooting pistols, a short range shotgun and a long range sniper. This is a pretty default set of weapons covering different situations. On top of that, I gave each gun 2 separate abilities and one that activates upon dashing.

 

The abilities have cooldowns and many uses. The sniper is good for setting up the fights by starting from afar and stunning enemies. The shotgun deals massive damage at close range and can push enemies around. The pistols can achieve moments of high DPS and can launch a projectile slowing barrier, while also providing the most mobility.

​

I aimed for the player to find fun in learning how to utilise these weapons in the most effective way. Both the inherent strengths of each weapon as well as their power being gated by the cooldowns encourages changing between them constantly to keep up maximum efficiency. 

​

For other mechanics, the player has a typical health bar and get some health pickups at the objectives. They also have a dash which momentarily makes them invulnerable, but doesn't go through walls. To keep the pace of the game fast, I decided to not include ammunition or reloading as part of the gameplay.

PistolM1.png

Shoots a projectile that marks enemies hit. Marks fade off one by one after enemy is not attacked for 10 seconds.

PistolM2.png

Shoots a projectile towards each mark, consuming them in the process.

PistolQ.png

Creates a wall of slowing energy in front of you, greatly reducing speed of all projectiles inside it.

PistolSpace.png

After dashing, increases your attack speed briefly.

The abilities of the game

Enemy design

Due to the the time limit of the jam, I created only 2 different enemies. One of them is a melee enemy that chases the player fast and jumps at them periodically. The other is a ranged type enemy, which gets a random ability they will use every few seconds to create dangerous situations for the player to solve. Some examples include shooting multiple projectiles in a cone, creating delayed explosions near the player and rotating beams that deal damage per second to the player.

​

​

​

​

EnemyAbility.png

​

​

For a bit more variance, the enemies also sometimes have a passive buff. For example, some enemies have regeneration. These enemies require the player to create a burst of damage to get through the healing, further encouraging maximising the efficiency of the weapon's abilities. 

​

The enemy behaviour is quite simple, with them starting the game in a non-combat state and when alerted to the player's presence start chasing them. The enemies do not give up chasing the player under any circumstances, as I didn't want the player to be able to ignore fighting and simply run for the objectives. When moving to the player, the enemies choose a free "node" near the player and try to reach that one. This prevents the enemies from becoming a single clump where the player could hit all of them at once.

​

​

Enemy with regeneration using an ability that shoots to many directions

Visuals

For a while I've wanted to see how well a 3D models to sprites workflow would work to use 3D models with Construct 3. This jam was the perfect opportunity to do that, as I would only need the sprites from one direction which would save a lot of space compared to isometric view for example. The tool for 3D was Blender.

​

For the player, I decided to not spend too much time in character design and to keep it simple. I gave the player a big, round hat/helmet since it allowed me to only create hands for them rather than a full model. To make the player look more interesting, I also made a flowing cape with a slightly deforming 2D sprite in the engine.

 

I chose the player's weapons to have strong colors and contrast for easy visibility and differentiation from each other and made sure their shapes are different. I also avoided a high level of detail here as it wouldn't be seen in the game.

​

​

​

gunref.png
EpY8pAOXIAQvWHD.jpg

I used the help of a base human 3D model to create arms and needed clothing for the player character's hands. Then, I learned Blender's animation process and went through creating simple animations for the arms, while using single color materials. Any more detail wouldn't really be seen in the game. Then, with ready animations, I used an addon I found that creates frames from the animations.

​

This worked out really well! Some animations were hard to make interesting due to the fact that the game is top down view, but for the scope of the project the results were very good. 

​

After getting the workflow down with the player, I created the enemies. Same as with the player, I went with simple designs focusing only on them looking good in the top view as that is all that the player will see. I modeled them from scratch and painted quick textures for them as well. Originally, I had a more complex design with multiple parts for the ranged enemy, but it proved too risky as I had some problems with realising it in Blender and didn't want to waste time.

​

​

​

unknown_edited.jpg
Gun sketches and final renders
Melee enemy in Blender

Special effects are another highly interesting field for me, and I finally found a good program called TimelineFX that can create 2D effects animations and export them as frames to Construct 3. Utilising this and the in-engine tools and events, I managed to create visual effects that really brought the weapons to life. The bright and energetic effects contrast well with the dark look I gave the environment. 

​

The environment on the other hand was put together rather quickly, by creating an interesting, seamless ground texture and multiple different boulders for the solid terrain. The mix of 2D and 3D sprites of the end product is interesting and worked better than I expected.

​

​

Audio

From my first project Battle Wizards I learned that sounds make all the difference to finish a game. I was in luck as the sound pack I bought for that project came with a freebie sound pack that had a lot of high quality sci-fi weapon sounds. With these and some more found from ZapSplat, I was able to give a great feeling to the game with the sound effects.

​

For the music, since this was a non-commercial project, I found two quite fitting soundtracks from freemusicarchive that I could use. Custom music would always be better, but these do the job well enough.

​

​

bottom of page