A downloadable game

This is an online multiplayer arena style game with 1 host and 3 players. The demo can technically be played with fewer than 4 players but the extra characters will sit and be nothing but damage sponges in the middle of the map. The controls and camera perspective are inspired by MOBAs like DOTA or LoL. (hence the title).

To play, the host must either be port forwarded or you must all be on the same network. This also works with VPNs, like Hamachi (vpn.net) which is what I use to playtest the game. 

There are four characters each supposed to fill a specific role in the group, and encourage cooperation between the players, as described below:

Blink Assassin
The signature ability of the blink assassin is that they can't stop teleporting. Every .75 seconds they teleport towards the mouse (with a minimum and maximum range) and deal damage at the target. All of their abilities are simple abilities that don't require aiming so you can concentrate on that main passive ability. Their role in the team is to kill "Elite" enemies that  have a high amount of health and a dangerous rooting attack.

Demolitionist
The demolitionist also has a signature ability, their left click blows up a non-elite enemy instantly killing it. All their other abilities are large area of effect style damage and status effects. Their role is to eliminate non elite enemies as quickly as possible. This works well in conjunction with the next character.

Necromancer
Any enemies that die near the necromancer summon a friendly minion where they died that the necromancer can buff, heal, and dash towards. This allows the Necromancer to prevent enemies from  being able to attack them and their teammates. The necromancer also has a very exciting ultimate ability (with a long cooldown) that rapidly summons a large number of minions to help save teammates in clutch situations.

Angel
Finally the angel's main job is to heal and protect their allies. Their basic left click ability quickly heals an ally with a low cooldown but locks the angel in place, and their Q ability prevents them from being able to cast other abilities for a few seconds. They also can bring characters back to life, including themselves, if you wait a few seconds after dying.

Designer Friendly Ability System

Using the MyBox plugin and some custom editor scripts, with a robust object oriented mindset I created an ability creation system.  The abilities are all represented by custom scriptable objects and are fully editable without any programming knowledge needed completely from the inspector panel in Unity.

Each ability has 4 main types of sub objects Activation, Target, Limitation and Effect described below:

Activation

An activation determines what happens when you press the ability's button or control. It's the main holder for Targets, Limitations, and Effects, described below. Most simple abilities only have a single activation as only one thing can happen when you press the button. More complex abilities have several activations, the passive for the Necromancer has 6! These extra activations can cover several different aspects of the ability, such as reactivation (like blowing up a bomb midair), but also things that only happen occasionally, like "every 5th ability cast is stronger." This can also cover abilities that have both active and passive components.

Activations also have several options for cast behavior such as wind up/down, whether they can be cast while dead, whether they can be cast at the same time as other abilities etc.

Properties

Targets, Limitations and Effects are all properties and live inside of activations. They all come with a "Timing" which determines when they happen (e.g. when do we save the mouse position, or when does this ability go on cooldown or when does the target take damage).

Target

Targets determine which characters or points on the map are going to be affected by this ability. Targets have several types, the most common ones are MouseOver, which gets what character or point the mouse is currently hovering over, and TargetNearest, which gets the nearest target or targets to certain position. You can chain targets together too, like getting the nearest enemy to where the mouse is. Each target has a targetID which effects use to determine who or what to affect.

Targets can also show UI elements (like range circles) when the player holds the control down.

Limitation

Limitations resolve to true or false when the player tries to cast the ability, if they resolve to false the ability can't be cast. Some examples include: Cooldown, do you have a target, do you have the right number of "stacks."

Effects

Effects are the catch all for basically every other aspect of an ability. They in general target something (using targetIDs as described above) and cause some change. Their effects vary wildly some examples include: Dealing damage; causing status effects like slow, silence, or invulnerability; showing a particle effect; causing an animation to play on a character; teleporting or dashing;  adding a "stack" (or other number); resetting a cooldown; or spawning a minion.

One special type of effect is the projectile, which acts in itself like both an effect and a target, it has it's own targetID to determine where it's heading but it also can trigger targetIDs for other effects. It also has a special "callback" mechanic to make sure that characters can only be hit by projectiles once, if that's what the designer wants.

Networking

All of the networking for this project was done using the high level API from the Unity package Mirror. As much as possible the players are given authority over their own movements and abilities, hence why there is no lag from starting to cast an ability to it actually occurring even on clients, yet everything remains synchronized. Each individual ability is referenced by it's unique ID which means that abilities aren't sent over the network, only string IDs, but each individual activation/effect (also as an ID) is individually sent over the network when they occur. The main idea of this networking approach is to prevent lag on the clients, which was very successful. Because of the high level of client trust, more advanced anti-cheats could also be implemented but this was a cooperative game so I didn't bother worrying too much about it.

Controls
B to open up character info and GUI Scale menu
Right Click to move
Y to lock and unlock camera
Hold spacebar to temporarily lock/unlock camera (opposite of current lock state)
Move mouse to edge of screen to edge scroll while camera is unlocked
Right shift (as host) to start the round and spawn enemies

Abilities:
Left Click, Q, W, E, R

See each characters info for more

Download

Download
CooperativeMOBA.zip 22 MB

Install instructions

Download and unzip into a folder, run PvEMOBA.exe.

Leave a comment

Log in with itch.io to leave a comment.