No idea how to do first posts on a blog, so instead of a long introduction I’ll get right to the action!
I’m a big fan of competitive games. Every game I played, I got into PvP the most. I loved and still love playing StarCraft (first Brood War, now II since 2010). In Guild Wars 1, the PvP islands were my home. Every online game I’ve touched, the competitive PvP modes were my favourites. So naturally, the first “real” networked game I want to create has to be a competitiveone! I realize that this is no easy feat, but I am planning on working on this project for a really long time anyway. So might as well aim high, right?
- Because I have spent a lot of time in Unity and other engines, but have never really done anything in Unreal, this project will be my first project using Unreal Engine 4
- Both C++ and Blueprint scripting will be used, depending on what makes the most sense in terms of functionality, speed and maintainability.
- The game will be networked with standard Unreal Engine methods
- Players will be able to host their own server and find other players through a server browser / matchmaking
- Either listen or dedicated servers, depending on implementation work
- Basic cheat protection will be considered
- There will be no persistence in the prototype
- A server opens a game, players will be able to modify their characters and then the game starts
Game Design goals
- In a classic arena setting, multiple teams fight over the win within a rule-giving game mode
- The number of players and teams participating as well as the winning conditions shall depend on the game mode
- Players have to build their teams by selecting classes and maybe class-specific skills
- The first game mode implemented will be a simple “King of the Hill”, where the team currently occupying a specific point on the map gets points over time.
- The team with the most points after a fixed amount of time wins!
- This is also the first milestone that I am currently aiming for. Whether or not more game modes will actually be implemented is not clear yet, but it would be nice to have
- Combat will be skill-based
- A class consists of 8 skills
- There will be a rule system which controls player states, player casting, applying different kinds of damage and healing
- Will be based off of standard RPG elements: Knocked down, silence, cast time with bar, health/mana/adrenalin
- Characters will stop to cast a skill, depending on their cast time
- Nice To Have: Players will be able to swap out skills before a fight. These skills will be created with a “skill blueprint” that lets me edit the skill mechanic (e.g. projectile / instant effect), parameters (e.g. cast time, damage) as well as additional effects (e.g. causes conditions) more easily. I want skills to be flexible so that creating new ones will be as easy as possible.
- Movement will be both direct and indirect
- WASD to move directly
- Clicking to move to target location, attacking a character to move into range (AI based with pathfinding)
Development already started about two weeks ago, so there’s not much to show other than a small multiplayer demo in Unreal – that is already playble! This is the first time I’m building a real multiplayer game, and also my first time actually building anything with the UE4. The first weekend was about setting up the basics only. After just two days of work, I had a simple setup where players connect to a listen-server, target enemies by clicking on them and cast a simple fireball to kill each other. There was even a basic UI to show health and energy.
Theoretically, I could already cross out the first point – the networked skill/damage system – off my priority list. But the system requires a bit more effort still. Skills are still really basic and nothing more than damage or heal. I want all types of effects to be implemented before I go to the next step and build a proper visual system for them. So this means skills need to be able to cause conditions, players need to be able to have those conditions etc. I suspect that this will take a little while longer.
Skill system implementation
For all gameplay related logic I am using a component-based approach within the character hierarchy. Each player has a bunch of components that handle their own logic. The HealthComponent reacts to damage received, SkillComponent handles casting skills and takes away mana from the ManaComponent. The FactionComponent will tell the player what team they are currently on, and CharacterStateComoponent handle the character status (casting/idle/dead etc).
Currently, each skill is a blueprint based off the C++ class “ABaseSkill”. Main purpose of this class is to hold skill parameters as well as give basic implementations for a skill’s cast requirement checks and execution. All of these can be replaced by the blueprint (please ignore the messy blueprint, it will be replaced completely at the next iteration!).
Other than that, players can move with WASD and (de-)target enemies with the left mouse button. Skills react properly to no target available, having a cast time (with a cast bar and looping animation!), players die when they run out of health and the UI reacts properly. I’m pretty happy with the first steps into this project and my motivation is pretty high! Also, a friend of mine has been practicing his substance skills, which I promptly abused to make the demo scene look nicer!
Thats all for now. I will try to update this devlog as often as possible / makes sense!