This game project was an exploration into the MOBA environment and the backend. The main focus was creating the gameplay loop, the 5 starting characters (one of each class), and the backend for the server itself. The gameplay loop differs from other MOBA where finding the enemy boss (Nexus in other games) is the big part of the early game. With randomized locations of targets, a "scout" or "assassin" based character becomes ideal. The 5 starting characters each have a niche but were designed with all stats and some, on paper, Time to Kill and brief balance passes. Finally, the backend involved a MySQL server and a NodeJS server. VaREST was used for UE4 to communicate, only the master server, to the web server hosted to retrieve information. The game is ready to make with the character kits, relatively, tested, the gameplay loop enjoyed by testers, and the mechanics and game design finished. It was not made to playable, as the server was self-hosted, internet was not ideal for mass player base, but is also ready for AWS hosting.
This project, the characters, single model, and UI layouts were all created by hand. Concept art for Solerin created by Keira Crow.

Software
Tools Used: Unreal Engine 4, Maya, NodeJS, MySQL
Video - Example Backend and Storefront
Process: Concept
The thought process to create the MOBA style game based in the same universe as the previous game I made "Dartiora: Land of Ley" was to experience creating those types of characters. The first thing I started with was the scope of the game. To begin, scoping the game required making something that would be playable as a playtest, to present to owners for a pitch. Being able to play something instead of hearing great things about something is totally different. So I first went to work with the 5 starting characters. Having these characters gives a strong taste of what the gameplay would feel like, as they each portray the "class" they talk about. The five character classes are "Bruiser", "Tracker", "Support", "Tank", and "DPS". I intentionally kept these a little vague as DPS can often mean ranged or a melee character.
First I took a look at the game play itself, and the question "how to differentiate it from every other MOBA today?" The answer was some of the worst things a player can hear "RNG". By intentionally not telling each team where the other's boss is, and the map objectives, it forces the game into an unoffical three phase mode. First phase involves finding the objective. Tracker class is important! In other MOBA games, you can often get through without certain classes, as they become obsolete in the face of others. Ensuring that these classes all serve a niche is important for the longevity of a MOBA. The final goal also differs. As most other MOBA (except SMITE and HoTS) involves a stationary nexus that doesn't fight back, having one that not only fight back, but you can manipulate adds another layer onto the strategy in a game per game basis. Is the enemy team running a tank heavy composition? Why not make your boss have a lot more defense. A wet noodle slapping another, larger, wet noodle does nothing anyways. With these key differences created, I was able to start developing the five main characters that serve as the template for the future of the game. Levels are also not increasing skill ranks, it combines the shop system of other MOBA with skill leveling. You pick one of three stats to increase on level, giving a more instant feedback than building items, playing more into the fighting game style.
The next component was to design the level and the map which all of the game would be played out on. The map itself consists of a replicated and flipped "jungle" section. This lets the player instantly get their bearings, no matter which side you spawn on (as the game is third person shoulder cam). The boss will always spawn in the top left or bottom right of the map, but not in the same location on that map. As the boss is located there, it forces players to go for that, and prevent some of the base/spawn camping that arises in other games. Spawning is another problem in games, I am always sent back to the spawn each time. This causes a multitude of problems, pushes are always halted consistently, there is no real momentum. Outposts are placed around the center of the map, they are the key spawn points for players. Standing on one captures it, allowing you to select the outpost or the home base to respawn at. This lets pushes, and defenses, have a lot more options. Flanking becomes important and going for the backline is a real threat now.

Outposts are laid out relatively equally with a slight S curve to it, prevents direct line of sight
The top right jungle has a lot more corners and is more of a ambush style map while the bottom left jungle has open space for line of sights
Enemy camp amount is equal on each side and the closest camp is equidistance from A) the base and B) the first outpost, to prevent creep on one side having more access to levels.
The bases also have a enemy prevention zone around to further prevent any form of spawn camping
The boss zones and mini boss areas on the map are all equidistant, as the crow flies, so any future character that could fly is not at an advantage.
Process: Characters
The damage class, the one every body and their brother wants to play (usually painfully). The damage class needed to feel fast and strong. Sometimes characters often slip into that special spot, bridging two different playstyles. Not only does this make the character ludicrously hard to balance, it also makes it challenging for players to understand a character. Solerin was the first character created. A fast moving, ice-imbued cloak, and frosted claymore was a unique appearance to them. As they only have three abilities in this game, to be closer to a fighting game, they needed to fit both the playstyle of the class and the character. Starting with passives, I wanted it to be something that lets you really get creative with your damage. Teleport to Iced enemies. It is pretty straight forward, but has interesting interactions with other skills. First active is a standard counter, thinking even if it is a die hard DPS, they should have some form of way to get out, but missing it means something a little painful. Second skill is three parts, having to hit each one for maximum damage. Finally the fourth skill consumes health to keep unlocking passives. The character itself embodies the DPS, picking an enemy and through skill, not rng, you can capitalize on your own damage.
Solerin (DPS) Concepts and Test Poly Model



The tank is next up, I wanted them to feel stronger than normal tanks. While they can't deal insane damage, as that would be too close to a bruiser, having fun interactions with the environment and the lovely crowd control makes the class appealing regardless. This character uses a tower shield and wind magic. This combo creates interesting options with knocking up enemies and having a place in the battlefield. The passive rewards using your skills as you get hit, releasing a small wind blade if you perfect time your skills as you are hit. This incentivizes that the player is in the middle of a fight because even if you are a tank, you still want to see a number or two. The first active involves a basic aoe channel around the player. After two seconds it launches all nearby enemies into the air. The second skill helps make the first skill heavily usable. Push enemies in the direction you are moving, airborne enemies are pushed double the distance. I debated about having a single push, with no bonus for being in the air, this felt hollow and empty though. The subjects asked to comment on the kit mentioned that it is far too niche, thus making it have a small push ideal. The final skill is the epitome of a tank, pull enemies to you. At the end, it pushes them all away if they are touching the shield. This character was designed at the same time as the map so that the CC could co-exist in the correct path ways of the map.
Support is next, the class overlooked in every game, often causing a team to suffer because of it. Support is a broad term, it is someone who can either impede the enemy making it easier or assist team mates. That was the key in creating this character. Using a runic enchanted spear, this character makes the battle field his own turf and zones enemies, still part of support. Passively, he drains mana of nearby enemies if they are in the presence of one of his runes. This is massively important for support as it is something not tied to a single skill, but gives passive zoning in a team fight. As he doesn't do high damage, he isn't a focus, but a little drain adds up heavily over time. Fenian's first skill places a rune on any surface, if he is close to it, he gains damage on each attack. This allows him to coexist with his runes, making use of the passive while providing more zoning. The second skill has a high damage cap. Why have a high damage cap on a support? It is tied to being in the zone, thus wanting enemies to stay away from the zone entirely. Just tapping it does nothing but put it on cooldown, with some time, it becomes much stronger as you hit enemies, giving them a natural support target. The final skill instantly zones an area around the player. Enemies are slowed and have a slight attack speed slow while taking bonus damage from Fenian. Again, playing into the zoning capabilities of a support. While all this damage seems strange on a support, it can only ever happen if he is A) on top of an enemy and B) inside his fields, so zoning works inversely on him as well.
Tracker is a class without a direct connection to other MOBA. In other MOBA there isn't really a heavy need for someone that can be so helpful at identifying locations. While this is helpful in the early game here, late game there is no need for it. That is where the trap comes into play. Being able to restrict enemies movement is massively important. It gives them a way to play onto their own skills and the player skills as well. This trapper's passive give more speed each trap. This is for early game and late game. Early game, it lets them get out of bad situations faster. Late game, it lets them get into a fight faster. First skill lets her be a true trapper, by forming the terrain. For the next 3 seconds, everywhere she walks a wall is placed. This can block exits, get out of combat, or just be used for repositioning in a team fight. The second skill lets the passive really work, the next shot from the crossbow traps the target for a period of time. Straight forward and easy to use. The final skill is a culmination of her kit. You become encased in stone and use a stone Ballista instead, with each shot trapping enemies. You can't move, but recasting the skill teleports you to a location you look at. The team fight potential is enormous with that skill, The kit testers were thinking of possible locations and uses for it as they read it. One user said "I would love to combo that with the shield ultimate. Not being able to move and being sucked in? I like"
Finally, the Bruiser class, someone who isn't as afraid to get hit as the DPS. This character is supposed to show the balance between HP and damage. The use of gauntlets to control blood is ideally a Bruiser. Similar to certain vampires, the character can consume their own HP to up an abilities damage or change the effect slightly. That is their passive off the bat. The first skill is either a cone blast or, by using "Ichor of Blood", a line shot, also enhancing the next two normal attacks. A Bruiser wants to be in the middle of a fight. They want to find ways to get on top of enemies and just exist, dealing damage alongside it. The second skill deals damage to a single aimed target, or "Ichor of Blood"-ing it, makes it pull that target into range, letting the next attack heal you slightly. Having a pull on a character is always so annoying to play into, so while thinking as the enemy, they should have some form of cost to accompany it. If I am getting pulled, it is at least going to cost them something more than mana. Finally, the last skill "Blood Writ - Encursed Dainsleif" summons the sword Dainsleif on an area, slowing and damaging enemies inside it. Holding it for "Ichor of Blood" instead pulls blood from enemies, allowing you to wield, for a short time, Dainsleif, changing normal attacks up. This "Swap" playstyle only really works on a true Bruiser, as on other classes, getting close and having to consume HP for a little more auto attack damage isn't worth it.
Process: UI
The UI was heavily researched and the locations of the different buttons was also tested by other users. After the research, games researched shown below, there were common takeaways. A top centered bar for maneuvering the menu, a background with a character and news, and settings/exit close together. Simple themes with the logo of the game for a home button was also easy to detect. All of that together, the UI wireframes and tests were created. I made them in photoshop first, to match the 1920x1080 style, then put the image in UE4, fullscreen, to check that everything has a good size. I then would get feedback and redesign certain pieces to ensure the experience worked for all players. The final design is also under the research subjects.
All References




Created UI




Process: Programming
The code for the project involved NodeJS for a local hosted webserver and connection into the MySQL server. These two were the start of the programming, ensuring login was successful, and other components were successful. I did research on other games run on UE4 that had this similar type of server and, after finding information directly from the team that ran Paragon, helped me create the client-server interface needed. I also decided if I were to make it, I wanted to make it as right as possible. Starting with the NodeJS, it needed to act as a go-between from the server to MySQL, so nobody could edit it directly. The prints coming back from it were then used by the server for player information. Originally, as a test, I started with standard user info storage, but I went back in after it was working and used SHA hashing on sensitive information, this is checked on the MYSQL server and sent back a yes or no so the data is never received anywhere.
Examples of NodeJS server Code




The next component was ensuring that the users couldn't send any data to the server on their own. Utilizing session based gameplay and the dedicated servers in UE4, I was able to setup a system where sensitive information, purchases, and other components were run on the dedicated server, self-hosted. The self-hosted server took the information and sent it to the local host web server. The local host web server sent to the MySQL database, then back the same way. This ensured that a user, connecting from a client, could not access the main server in any way. The start call is own the server, so that it can connect to the localhost server. The response is then on the owning client, so only the caller can receive the information. Passwords are also hashed prior to being sent over to the server to prevent being snatched.
Example of UE4 Code that server runs




The server was also set up, at the backend, to check the connected users and open/close dedicated "match" servers to connect to. This meant that a player is always able to find a match, to the server cap of course. The ports were stored on the master server and when a player readies up, it assigns them the port of a lobby to join, once that is full, the game then starts. All of this happens in the backend so the player only sees a "join game?" message.