Gness
Overview
Gness is a online RPG demo that I made with the Unity game engine. I had a ton of fun with this project and learnt a lot. It was satisfying getting a decent networking system going and was fun to test and play with my friends. I used World of Warcraft as an inspiration in trying to setup the systems and tools.
Demo Features
- Networking
- Authoritative server / client model
- Client sends inputs, server simulates and updates all clients
- Server runs headless simulation, all gameplay code is compiled out for clients
- Using Unity's low level networking API (deprecated I know but their replacement isn't 100% ready yet)
- unreliable channel for movement syncing / cooldown / casting updates
- reliable ordered for spawn / despawn events
- Multiple different sync types, transform, rigidbody, static
- Visibility system so each client only sees other network objects that are nearby
- Modular Ability System
- Can quickly build new abilities directly from the editor
- Cool 3D Sprite Style
For the game's Ability system I wrote a base Ability class that simply acts as a collection of modules (using ScriptableObjects in Unity). There are various modules for triggering when the ability happens, finding ability targets, specifying costs required, and effects to perform once triggered. This custom editor script I made helps to create and draw each of these modules nicely on a single ability object for great ease of use, and also has some pretty cool multiedit functionality to boot. The server uses these modules to perform the ability calculations and also send error messages to clients if the conditions aren't met. Here is an example of the CheckTargets function in the SingleTargeter module.
The good thing about this system is that each module is decoupled from the rest so it is easier to add new effects and functionality while maintaining a pretty clean code structure. I still have many modules I want to add like targeted AOEs not centered on caster, different AOE shapes, stat modifiers, spawning more visual effects, etc.. But I am very happy with what I have so far!
This is a test scene for the sprite shader I wrote. I wanted to use this free sprite pack I found, but also wanted to make the game in 3D, so I went for this weird kind of style. I was able to get the shadows and lighting to look pretty good actually even though each sprite is just a billboarded quad. Eventually we will probably make/acquire some actual models but for now this looks pretty cool!
Lastly this is a screenshot of the spellbook and actionbar system. You can drag spells onto your bar and cast them by clicking them (eww) or by using the keybindings on your bars (ignore my weird bindings). There are also auto generated tooltips for each ability and cooldown overlays to show you how long before you can use the ability again.