Designed a unique timing based battle system.
Playtested and iterated 3 times on the battle system.
Used Firebase services, to handle the online logic and data storage.
Coded Cloud Functions by learning to use Typescript.
Stored game data for users in a Firestore database.
Used Unity C# with EzCloud to handle the front-end.
Used Online Maps v3 package using OSM data for the location based map rendering.
Created with a custom pixel art shader.
Drew pixel art for Yaikomons, world, UI, and 3D textures.
Used blender to model some objects for a 2.5D pixel art style.
Created SFX and the main overworld song.
Created devlogs for my YouTube channel, Senton GameDev.
Like most HKU projects, my graduation project had a 'design question' that my project would provide an answer to. The design question I created was was:
How do I, as a game designer, design and develop a battle system for an online mobile location based monster collection RPG game made in Unity, that makes players want to explore the world and catch the monsters?
I will break down the design question into essential parts, and document the process per part.
Game design would be my focus this project, but shared with development. With this I meant that I would put time into learning the general skillset required for becoming an indie game developer, which is my goal. So while coding was a big part of what I meant by development, I also meant these other tasks that I would be practicing:
Art
Sound design & composing
Marketing
Project management
In terms of coding, I wanted to practice more Unity and C#, but also working on database and cloud functionality, working with Firebase and Cloud Functions coded in Typescript.
Eventually I got the entire game to work with a Firebase backend, using the EzCloud Unity package to call my written cloud functions and recieve the data. All the game data like creatures and their stats, were stored in a Firestore database, and Unity was basically used to implement the frontend of the game. I went from knowing nothing about cloud development to getting a fully working online prototype with PvE battles, catching and switching creatures. I am really glad to have learned this, since it will help with future development projects that have online funcitonality.
To send GPS data directly to a server like in Pokemon GO though, would be very hard and risky for me as an indie developer. Both to manage all cloud POI's (gameplay points of interest) worldwide, and it's also unsafe for me alone to have players' GPS data processed online. So instead I thought of a solution where POI's will be auto-generated and placed by the player locally, and only generic gameplay data would be sent to the cloud. I put more thought into these systems, but since they are not in the prototype I won't go into further detail.
I created all the art for the project, which gladly was pixel art and some simple 3D, both of which I was pretty comfortable with. Besides that I also created a song and a simple damage sound effect, which you can hear in the above video.
As for marketing, I wanted to try the strategy of creating devlogs to market and perhaps sustain myself during the development process, and see if it would be viable for future projects. Eventually I made four devlogs, which you can find on my YouTube channel: Senton Gamedev.
Creating devlogs alongside all the rest I had to do was definitely very intensive, and I couldn't sustain it during the entire development process. I also planned to have regular uploads, but if I would do this in the future I learned that it would be better to create a video based around game features you've finished, that are interesting to show the audience. In the end it was a valuable learning experience.
Lastly in terms of project management, I used Trello to plan out all my tasks, and set myself accountable by regularly creating Discord posts of my progress on the game. It was a simple but effective system, which helped in eventually finishing the prototype with most of my intended features and playtesting it.
The project is based on a game concept I really wanted to explore, for an online location based RPG. But since a game like that would take ages to complete, I limited my scope to focus just the battle system. I would work on the world too and some other side-mechanics, but only the minimum necessary to test the answer to my design question, which is about designing and implementing an online battle system.
The concept spawned out of a love for Pokemon Go, and really wanting a version of it that was more like a classic J-RPG like the original Pokemon games. So a version where instead of walking around and mainly just catching, with the occasional battle, you would be exploring to further the story and have more prominent and strategic battles with more different stats and mechanics involved.
Ofcourse, it would only be inspired by Pokemon, and I would look how I could set myself apart from it, first and foremost with what type of unique battle gameplay.
Here's a breakdown of the game's context, it's:
a Pokemon-GO-like JRPG
a mobile game
a singleplayer story mainly, but with multiplayer 1v1 battles
And the target audience consists of:
Lovers of Pokemon (RPG games and GO)
Players of JRPG's generally
Players of mobile RPG's (big audience)
Mostly young adults to adults
The design for the battlesystem went through mutiple playtests and iterations. It's core is about having tiles, to which monsters can move, where you have to choose the right tile to attack or dodge to during timed turns. To add strategy to the movement between your tiles, I made it so that the tile distance between the monsters influences the damage dealt. Also, you can use a stat boosting moves to move to one of your own tiles. As an example strategy you can use a stat boosting move to move away from being on the tile opposite of the enemy, to take less damage on the enemy's turn. It's better explained and shown in the video above!
During 3 playtests, I got valuable feedback which I then implemented. A lot of feedback had to do with bugs experience design, but also about the core battle mechanics. With all the feedback, I found out I had a lot more to add to the tile movement mechanic, since players found it lacked strategy. Gladly at the end players did score it way better on how strategic they found it as well as on other criteria I set. And also most importantly: it generally made them want to explore and catch more monsters.
The ultimate goal for my battle system was to make players want to explore the world and catch more monsters. In the previous part I went over the battle system and how I designed a unique battle system that would make players want to learn it further. I also showed what playtesting criteria I setup for this goal, and how I managed to achieve most of it in the end.
But there's an issue with having a game where you have to walk around the real world and battle creatures: it's hard to do both at the same time. I designed a system to solve this issue.
My solution was that while walking around, you:
Encounter a Yaikomon
Create a temporarily link with it for a short duration
During that time, find a quit place to sit and battle the Yaikomon
Then (fully) link with it (catch it)
In this way I make sure that while the battles are intensive and strategic, requiring focus, the player can always find a good place play them, instead of during busy traffic for example.
Temporary link system gameloop (dutch, sorry)
I earlier spoke about POI's being auto-generated and placed by the player. Those POI's are then used for quests, where one is randomly chosen by the game and you have to walk towards it, encountering wild Yaikomon while walking. Like most JRPG's the game's story gameloop consists of quests, of which the location differs per playthrough. But the structures and interior belonging to each quest are always the same, and you can enter them and move around using non-GPS controls (on-screen control stick).
Inside a quest structure you can battle NPC's, get items, talk with NPC's, explore around different rooms/areas or solve a puzzle using the non-GPS controls.
Quest locations system gameloop (dutch, sorry)
This project was very big and took a lot of energy and time, but it was very much worth it. In the end I learned so much about managing and marketing a (big) project, and got lots of experience in game design, development and everything else I set out to practice. I am very happy with the final prototype and all the systems I designed, and that I managed to learned to implement Firebase with Typescript as well. In the future though, especially to make it as a (solo) indie developer, I will focus on smaller projects. To ever continue this project I will have to have a lot of time, team members, money and experience, but once I achieve that point it's a game I would really love to create.