MYLES COLEMAN - PROGRAMMING FMP
Project Context
Summary
For my project I plan to create a 2D platformer game, there will be an assortment of premade rooms that will be randomly selected one after another, until the player dies. The ways in which the player can die will be through a plethora of different obstacles (e.g. spikes, dart traps) as well as enemies (e.g. snakes moving back and forth across a platform, and possibly some form of a flying ranged enemy). The player will have a total of 3 hit points that will be easily displayed on the UI, this UI will also display the current room number they're in. This will act as a score to indicate how well they're doing. This adds a gameplay loop to help interest the user by keeping them playing to get a new high score.
On top of this there will be a possible item system offering upgrades and power ups as well as a possible ranged combat system (gun).
Traversal and Rooms
The way in which the player will traverse these rooms is through a basic left and right movement system incorporating a jump as well (using "A" for left, "D" for right and the "spacebar" for jump. As these are commonplace). The goal for the player will be to reach one of the many doors within these rooms, which will all lead the player to other random rooms. I plan to create rooms with different levels of difficulty and reward, depending on how easy it was for the player to reach the door. This concept was inspired by The Binding of Isaac, opting for many prebuilt rooms randomly allotted together. Doing this will help to encourage the player to reach those hard to reach doors, in hopes for better loot (upgrades and power ups). The movement itself however will be quite similar to the game Hollow Knight (not including a dash, double jump or wall climb), being quite simple but used in a way that complements the game really well.
​
These rooms will be many and through the use of all the different types of hazards will all manage to feel quite different. This is very important for the roguelike genre. Ensuring each run feels different and fresh. This helps to keep the player engaged as they don't know what will happen next. Other ways in which I can ensure the rooms all feel different to each other is through their size, for instance some rooms might be relatively small but due to their small size it may be harder to avoid hazards therefore increasing their overall difficulty. On the other hand some rooms might be relatively large with hazards more spread out, therefore being easier. These both and everything in between will help with the variety of the game ensuring it remains interesting run after run. Due to this as a priority I will have to create many different rooms, to better fit the genre and keep the game interesting. Just like The Binding of Isaac.

As you can see here from this screenshot of The Binding of Isaac, there are many rooms displayed on this map. As well as being rooms of different sizes. A similar concept will be present in my game (only without the map), there being many different rooms of different sizes. As my game will be a 2D platformer, I would like for the whole room to be visible at a time. This means that the camera will have to move and scale with the current room. I tested how I will create this with AI for a personal project and found a solution. Meaning this feature shan't be too hard to implement. Through carrying out more research I have learned that this is no longer necessary as I can set the camera manually for each room, this saving time and effort.
This feature is very prevalent within The Binding of Isaac, it being one of the many points that makes it fun. So in theory if I were to implement this feature into my game it should make for some interesting gameplay.
Through this feature I will be able to ensure the game has player retention, as every run will boast different layouts, obstacles and traps allowing a sense of discovery every time a new room is discovered. This gameplay loop will help to encourage the game isn't just played once then dropped.
​
This screenshot here from Hollow Knight shows some simple platforming, something on the lines of this will be present within my game. Featuring simple back and forth enemies, spikes and raised platforms. These elements can be used and built upon in many different ways, this helping to complement the roguelike nature of the game.
Also due to the game being a roguelike once you die you will be sent back to the start, meaning another gameplay loop is implemented in which you try to best your score and the room that killed you encourages you to keep on playing. Yet again helping with player retention.


Here this screenshot shows the game Dead Cells, this game is most similar to the game that I plan to create. It is a roguelike with platforming elements. This game focuses on having one large room as opposed to many smaller rooms, so this will be where the games differ (as well as combat). This works for this game as the room is randomly created through many smaller platforming elements. This is currently out of my skillset, as I may struggle to create the many smaller rooms. Also with smaller rooms a score system is much more logical, and allows for a more replayable game.
Health and Death System
The health system for my game will be fairly simplistic, being composed of just 4 basic hit points to start (with the option to increase the total with things like upgrades). And once this total is depleted you get sent back to the starting room and have to restart your journey from the beginning. This adds challenge to the game and builds upon the gameplay loop of trying to best your high score.
All enemies will do the same 1 hit point of damage this extending to most hazards as well, however spikes when made contact with (from above) will result in instant death, This is for 2 reasons as it'll be easier to program (this than a feature which bounces the player off the spikes for example) and it adds risk to the game making it more challenge, keeping the player on edge therefore focused on the game, keeping them playing.
​
These features are similar to the game Spelunky and how its health and trap systems work. As this works for Spelunky, features like this have been tested before. So they should work with similar success in my game. As long as I manage to implement them correctly.
​
The health will be easily and conveniently displayed on the UI in the top left.
​
If the player were to die then a new scene would load, this would be a death screen. The death screen would show the player's current score compared to their high score. As well as two buttons, one to quit the game and one to retry (from the beginning). This will allow for a much smoother, more natural transition between runs. As if the game were to just immediately restart, you then there wouldn't be any breathing room for you to grasp what just happened. This also makes for a much more convenient way to view your scores.

Here is what that death screen is planned to look like within the actual game.
It is relatively simple, yet displays everything needed. This also aligns with what my project is about, programming. So design takes a backseat for the actual programming of the death screen.
Combat
There are many platforming games that feature a combat system, the main distinctions being whether they're melee or ranged. Both of these types have their pros and cons.
For instance with a melee combat system you're limited to your weapons range. It will in some cases make it impossible to reach and kill some enemies therefore this limits the gameplay possibilities and the ways in which I can design rooms. On the other hand this will be much easier to program therefore saving time allowing me to focus on developing other features (such as creating more rooms and items).
With a ranged combat system the range that the player has is infinite allowing them to reach and kill enemies as long as they're in their line of sight. This means I can get more creative with my room designs therefore the gameplay should be stronger and more engaging. Whilst this will be harder to program the knowledge gained and the final outcome should be well worth it.
​
Taking these into consideration I will go with a ranged combat system as I feel it will reap the best result and result in an overall better game. I plan to create a ranged combat system similar to that of Enter the Gungeon however I will adapt it to work within a 2D platforming game. The player will take control of a mouse and be able, in a 360° angle, to aim and shoot all around them. Allowing them to hit enemies at all points in the room (as long as the enemy is not obstructed by a platform or obstacle).

I would like to add items to my game, namely different weapons. Again similar to Enter the Gungeon, this will help to add diversity to my game furthering the roguelike nature of it. This may be beyond my skill set and I may be too focused on creating other features to research how to implement this and then to actually implement it. However, not creating multiple types of weapons will allow me to focus on getting other features created and out. For instance I can get more rooms created or other types of items like stat upgrades. This will most likely be a better use of my time as it'll still have the effect of adding diversity in the gameplay. Although a quick and easy way to create different weapons, would be to just increase or decrease stats through the use of upgrades. This'll give the effect of their being different weapons in a much more time effective manner. Enter the Gungeon is a shooter game and because of this the gunplay is one of the core mechanics, so as my game is primarily a platformer the gunplay will take somewhat of a backseat. However I would still like for it to developed and engaging. I will try achieve this with the aforementioned powerups, and of course enemies to attacked against.
Upgrades and Power Ups
I would also like to perhaps create an item system where you can perhaps find upgrades and power ups for your character. Such as better weapons, health upgrades and upgrades to help with your player's traversal and movement. This is a staple of the roguelike genre following this will better help my game find its place in the roguelike genre. Game's such as The Binding of Isaac have a plethora of items, because of this it's unlikely you'll see the same item frequently. This helps add to the uniqueness of each run ensuring it remains fresh after many playthroughs. I feel this is a great way to add diversity to my game, however it may pose a problem to come up with a large number of items that are different enough to feel truly different and therefore entertaining.

Here are the majority of them items in The Binding of Isaac. Such a high quantity of items ensures the game is entirely different each run, allowing for a fun fresh experience each time you play it.
However a large pool of items isn't necessary to create a great roguelike platformer, for instance looking at the game Spelunky we can see the game's relatively small item pool, yet due to its other roguelike elements it still manages to get this feeling of diversity. I feel this will be more ideal for my game due to the short time scale in which I will have to create it. This also better aligns with the style of game, them both having platform elements. Therefore I can take inspiration from Spelunky and use it to better my own game. This will be especially prevalent in the many different upgrades for traversal in Spelunky (such as wall climbing gloves, spring shoes and a glide. However this won't stop my game's powerups from venturing out of here with health upgrades and weapon upgrades).
​
I also plan to create a ranged combat system taking advantage of a 360° circumference around the player. It may be a far stretch to offer different types of guns with different mechanics. However, simple upgrades such as increasing damage or fire rate should be fairly simple to accomplish. However looking at Enter the Gungeon we can see a ranged combat system similar to what I envision in my game. Featuring many different guns with different styles of shooting. This yet again helps bring diversity to the game.
UI
The health will easily be displayed on my UI, shown in the top left where it is common place. To make the programming easier for the health UI, it'll simply be displayed by a heart icon with the number of hit points written inside. The use of a heart icon makes it instantly recognisable as your health, as this is a common icon used throughout many games (such as Spelunky).

Shown here is a heart from the game Spelunky, this heart is of similar style and function to how I expect the health system to work within my game. Using a basic heart icon like I mentioned previously ensures that it is easily recognised. And the number of hit points being displayed via just the number ensures you can easily read and view at a moment's notice.
This was done for 2 main reasons, it makes it easy to display. For instance if the player was to get a high number of health like 10. It wouldn't be convenient if it was shown through many individual icons. As a large portion of the screen would be obstructed by this. The other reason being it allows, as mentioned, quick and easy viewing. Meaning that if you're in a desperate situation where viewing your health is essential you can much quicker make a decision with your health in consideration. This makes the gameplay more forgiving and bearable .

As shown here in The Binding of Isaac, the reason this works in this game is because there is a health cap that limits your maximum health. I feel this would ruin the style of gameplay I want. As I want the health to stay low due to the hazards not because of a cap. So if the player were to be especially good at the game I wouldn't want them to be held back because of this cap, as it removes the freedom which is essential in the roguelike genre.
I did consider using a health bar as opposed to a number and icon UI element. However due to the nature of how health is taken and how little health you will have. It just doesn't feel convenient for it to be displayed this way. As it'd be much harder to quickly and easily view your health if it was a bar. Also considering that the total number of health can be increased, this may also make it harder to view and understand how much health you've got. And as every enemy does the same amount of damage, it makes it much harder to understand and plan around taking damage. I feel the gameplay mechanics do not cater towards a health bar.
Some considerations that will need to be made are the viewing of health in different languages that don't use the same number system as English speaking countries. Due to this an attempt will be made to ensure its viewability in different countries. This will help increase the market for my game, resulting in more players. An essential stakeholder in the games industry.
There is also the counter which shows the number of rooms you've visited. As this project isn't about design, rather programming this will be displayed just with text, and a number. Something on the lines of "Room Number: x". This will let me see whether the code is working and therefore if the game is working. This saves me time on creating an icon especially considering creating that icon wouldn't aid me or my research. Also due to this not being a standard UI element within games, coming up with an icon may prove challenging.
This design is very simple yet displays everything needed. Getting the job done quickly allows me to work on more complex features.
​
All the UI elements together will look something like this:
As you can see the UI will be very lacking, but this is actually a good thing. Everything that needs to be displayed is shown. This will allow the player to much more easily focus their eyes on the gameplay rather than distracting UI elements. Thus improving the UX.
​
The health icon is represented via the box labelled "Health", this is in the top left as that is where health icons usually sit. Meaning the player will be well within their comfort zone. The rooms visited UI element is just under this, tightly packed (ensuring not much of the gameplay is obstructed). This also means the player can just look at the top left and get all the information they need quickly.

I did consider adding a UI element for each picked up item similar to that in games like Spelunky and The Binding of Isaac, however I felt it was not necessary as this is just giving me more trivial tasks to complete when I could and should be focusing on other already planned features. Also the player will most likely not have to look back at their held items to make a decision, like you would in games like The Binding of Isaac, so it's really not necessary. However if there is ample time at the end I will consider this, however a good amount of research will be necessary.
Enemies and Hazards
Enemies will be present within my project. Looking at other 2D platformers such as Mario, enemies play a large role in their design and gameplay.
Looking specifically at Mario we can see the simple enemy design and how effective it is at making a challenging and engaging game. Koopas for instance a simple enemy that walks back and forth on a platform are iconic despite their simplicity. This means if I can implement an enemy of similar design into my game it should replicate Mario's success and allow my gameplay to be engaging. Taking inspiration from other successful games will allow me to see where they went right (and maybe wrong) therefore allowing me to design my game in a way that'll give me the highest odds of success. For my Koopa enemy, I plan for it to walk back and forth along the platform, only stopping once dead (shot), if the player were to make contact then the player would take knockback pushing them back. This is done to stop the player repeatedly taking damage once contact is made. Making the game playable and fair. Perhaps part of the reason for Mario's success is simple mechanic being used to the best of their ability which highlight them, giving each enemy and obstacle the spotlight. Such as the koopa. I will try channel this, however it may be difficult as this is my first game, let alone platforming game.
​
If we look at the game Spelunky we can see many hazards that allow for an entertaining user experience. For instance looking at the spikes, we can see beauty in its simplicity. These spikes are littered throughout the levels and act as traps which instantly kill the player if they fall on them. Due to them instantly killing the player they pose a very serious threat and should invoke a constant state of caution. I will have to try find the balance with this, that ensures they aren't too annoying and seem fair. Another hazard is a dart trap, this shooting the player if they get within its sights. This can be a challenging trap to overcome especially if you don't see it. In Spelunky you usually get past dart traps by throwing rocks in front of them to trigger the trap. As my game won't have this I plan for the dart trap to shoot slower in order to give you time to dodge them. Due to my lack of programming skills I don't know if I'll be able to write the code for the bat enemy within my game, however I would like for this to be present. Whilst I will attempt to make this I doubt I will be able to, especially considering I will have to create everything else and how little time I will have. However the bat enemy should follow the player once they get within their detection radius. Dealing damage on contact, like every other enemy.

Here is Spelunky showing the threat of spikes. This player has fallen onto the spikes and thus died. No matter their health prior to their encounter. This feature will be present within my game.
There is a large appeal to difficult platforming games, such as Spelunky or perhaps more famously Super Meat Boy. Whilst I don't want my game to be this difficult I do want it to be challenging. Making a roguelike game too difficult would be cruel and unforgiving as the player restarts after every death, if the player was restarting constantly it would ruin the flow of the game thus ruining the experience for the player. I will have to find an in between where the game is challenging enough to encourage the player to keep on playing in hopes of getting a new high score, but also not being too hard that the game is tedious and annoying to play. Super Meat Boy is a very fast paced game, this is one way in which my game will differ, it'll also help me to manage the overall difficulty of the game. Spelunky is slower paced due to the focus not being on just reaching the end, as my game will just be focused on reaching the end my game will be slightly more fast paced.
​
The positives and negatives to a game being faster paced are that the player can retry faster the level they die on, because of that dying feels less painful as long as it happens fewer times. But with faster paced platforming games usually comes more difficulty as there is less time to think and fine tune your jumps. This leading to rash decision making and thus an interesting gameplay loop where you retry over and over to try and complete the room that has killed you so many times. And the more times you suffer through dying, the better besting it feels. However this runs the risk a player just leaving the game due to "rage quitting". So this means a gameplay designer has to ride a fine line between difficult but not infuriating or just annoying. This can be hard to achieve. This is why I will try make my game not too fast paced. As to ensure it does not remain to difficult, or better put... annoying.
​
Spelunky is a slower paced platformer, but as there are other tasks in this game (other than reaching the end). The player needs time to think. To try and find all the secrets and rewards. The game remains interesting and engaging with its platforming through its roguelike elements. Its randomised rooms. My game won't have randomised rooms but randomised room orders. Because of this I can still reap some of the benefits from the roguelike genre in this regard. Similar to The Binding of Isaac. Spelunky also contains many different unique hazards. Such as snakes, bats and dart traps to name a few. These all help to add diversity to this game. Ensuring it remains fresh and fun. These features also cater to the roguelike genre. And because of this they will be catered to my game.
Conclusion
I feel all these features together will make for not only a good platformer that should have an interesting gameplay loop (of how far you can go before death), but also a great roguelike with its random room (and item) gameplay. Due to my inspiration from many other great platformers and roguelikes hopefully placing features from all together, the recipe for another great game should be there. And this I plan to create for my FMP. Doing this I will have found whether taking many features from other games makes for a good game in of itself, but also it’ll help to build my skills in Unity and C#. Both of these allow me to pursue a job in the games industry in the future, more specifically as a gameplay programmer. I will also have gained knowledge into what makes these characteristics of game fun, and how to utilise them into my future projects and endeavours.
​
Specific skills I will acquire are: proposing ideas (this could be helpful if I ever were to pursue creating the ideas for games), research (this is important when I am researching how to solve a programming problem, or finding ideas for future projects), planning (on how to solve problems) and strengthening my programming skills (understanding on how to program all features mentioned above (e.g. platforming, enemies, combat, powerups and how to use scenes)) as well as learning to work with a deadline. And, despite formatting not necessarily being judged my skills with it and displaying information in general should get enhanced.
Requirements
(+ Sources)
Tools
The tools I require to complete my project are:
-
Google,
-
Google will be used as my main search engine to quickly search and source information and research to help me with my project. For instance helping with coding tutorials and research documents. ​
-
-
Bing (ChatGPT),
-
Bing and ChatGPT will be used for its research capabilities. Mainly for creating code for my project, and commenting/explaining said code, ​
-
-
Google Drive,
-
Google Drive will be where my work is stored. It has automatic backups ensuring my work is safe, ​
-
-
Google Docs,
-
Google Docs will be used to write initial drafts of what will be placed onto my website. As it has its automatic backups and more user friendly tools,
-
-
Wix,
-
Wix will be where my website is created. Primarily because its a free and well trusted site, ​
-
-
YouTube,
-
YouTube will be used for tutorials and explanations. Because it is the biggest online video uploading site, meaning there is a plethora of videos that should be able to help me, ​
-
-
Unity,
-
Unity will be the software used to actually create and develop my project. This is because it's the game engine I'm most experienced in. And I'm well accustomed to its tools, ​
-
-
Visual Studio,
-
Visual Studio will be where my code is actually typed up and created, due to its ease, simplicity and compatibility with Unity, ​
-
-
and forums.
-
This is because there are many articles and the likes describing techniques and problems I need researched on. So these will allow me to quickly educate and fix those. ​
-
Links
Tutorials
-
Player Movement - https://youtu.be/Uv5tfMSKlnU https://youtu.be/LEUhxe9vUOM
-
These tutorials will prove useful in guiding me how to create my movement system. Influencing my movement system ensuring that it goes in the right direction. This tutorial provides exactly what I need for my game, making these tutorials the right pick. ​
-
-
Scenes (Rooms/Death Screen) - https://docs.unity3d.com/Manual/scenes-working-with.html
-
This document will be used to educate me on scenes within Unity and how they work. Scenes will be an integral part of my project therefore this blog is essential. As this is a reputable source I can ensure that it is correct. To ensure that the player and other assets don't reset when a new scene is loaded I will use this line: "DontDestroyOnLoad(gameObject)". This line ensures that certain assets aren't destroyed. ​
-
-
Combat (Shooting) - https://youtu.be/fuGQFdhSPg4
-
This tutorial for the combat system will prove very useful in aiding my project, this is due to me never having created anything like this. Nor have I ever used functions like this before. Whilst the game the programmer is creating the combat system for uses a different perspective than mine, this is the only tutorial I could find that provides what I require. However this shouldn't pose a problem and should be fine. ​
-
-
Buttons (Death Screen) - https://youtu.be/zc8ac_qUXQY
-
As I have never created a menu in Unity before I required a tutorial to push me in the right direction. This tutorial has educated me on how buttons work within Unity and how I can create them. This tutorial is very simple and easy to follow and will allow me to easily replicate this to work in my game.​
-
-
Arrays (Room Loader)
-
I asked chatGPT to educate myself on how arrays work within Unity. To create an array of scenes you: "Scene[] myScenes = new Scene[3];", to add scenes to this array I can use the line: "myScenes[0] = SceneManager.GetSceneByBuildIndex(0);". The numbers are the index in the array, their placement. This block of code is used to select a random scene from within the array "Scene GetRandomSceneFromArray(Scene[] scenes) { int randomIndex = Random.Range(0, scenes.Length); return scenes[randomIndex]; }".​
-
Similar Games
-
Hollow Knight - https://store.steampowered.com/app/367520/Hollow_Knight/​​
-
The Binding of Isaac - https://store.steampowered.com/app/250900/The_Binding_of_Isaac_Rebirth/
-
Dead Cells - https://store.steampowered.com/app/588650/Dead_Cells/
-
Enter the Gungeon - https://store.steampowered.com/app/311690/Enter_the_Gungeon/
-
Spelunky - https://store.steampowered.com/app/239350/Spelunky/