Hello everyone,
For those who don’t follow the Discord #announcements that closely, I was unfortunately unwell for a time through December and early January, but am now feeling a lot better and am back to work. With work, comes updates 😀
This sprint was focused heavily on re-implementing a spell framework, with an enthasis on facilitating spells that have cast times. There was a suprising amount of fiddly visual finesse in adding this, as you will hopefully appreciate in the screenshots to come. In the above screenshot, we are casting Meteor at that poor little Troll Mage! The spell button indicates a cast is occurring by turning green with a little arrow, and we can see our cast bar above the action bar showing us how long we have until the cast goes off.
If you cancel a spell cast the bar will turn red, the global cooldown is triggered, and the spell button will show a red cross for the duration of the global cooldown to indicate it has been cancelled.
In addition to seeing what you are casting, it is also very important to be able to see what everyone else is casting. In the above screenshot there are two things of note, firstly we have Liam targeted so we can see his information on the top right of the screen. Instead of a resource bar, we instead can see their cast status. This makes it very clear what your target is doing, but what about creatures you do not have targeted? Well, you can see next to Liam’s name and health bar above his head there is a new kind of indicator with a tiny little 1 pixel high bar. Any creature that is casting a spell, regardless of if they are your current target or not, will display the status of their cast in this way. If you have names or health bars hidden, this indicator will reposition as sensibly as it can.
If your target cancels their cast you will see this reflected in their casting status at the top right for a global cooldown so you know they can’t cast again in that moment. The status icon disappears from creatures without displaying that the cast was cancelled as I thought it more important to declutter the screen as quickly as possible.
Changes
- Spells
- Fundamental
- Spell data model implemented both client and server side
- Spell scripting implemented, so spells can do basically anything the engine supports
- Netcode added for triggering spells, broadcasting spell activations to other clients
- Full base implementation of cast times, both client and server side with supporting netcode
- Each of your vocations has it’s own list of “owned” spells, paving the way for having to learn spells before you can use them
- Looting them
- Buying them (for in-game currency of course)
- Capturing them from a boss (like Guild Wars 1’s signet of capture)
- Achievements
- Etc
- Casting
- Spells can now have cast times, firing only when a cast has completed
- Auto attacks are stopped and the attack timer is reset when a spell with a cast-time is triggered
- Spells will be balanced around the absence of auto attacks during their cast period
- Will mean spells hit very hard as they will essentially have your auto attack damage baked in
- Moving cancels spell casts
- Pressing the cast button again cancels spell casts
- Being pushed does not cancel a spell cast
- Cooldowns
- Implemented passive server-side cooldown system (much more performant than on live)
- Expanded domain model server side to persist any active cooldowns on logout
- Implemented active client-side cooldown system
- Added support for cooldown groups
- Spell Buttons
- Exist
- Are much smarter than live, aware of:
- Cooldown state
- Target state (do you have one, are they aggressive, are you attacking them)
- Health state
- Mana state
- Line of sight
- Range
- PZ status
- Vocation stats
- What equipment you are wearing
- Will show as enabled only if you can cast the spell given all of these factors
- Display casting status, interrupted status, cancelled status
- Allow you to cancel a cast by pressing the cast button again
- Spell Bars
- Big central cast bar for the player to indicate what you are doing
- Large cast bar for current target as part of target unitframe
- Tiny cast bar as part of new nameplate icon for untargeted creatures
- Player and Target cast bar display interrupted / cancelled status for global cooldown
- Spell Cast Status Icons
- Will show against any creature (other than the player) that is casting something
- Icon reflects the spell that is being cast
- Has the worlds smallest castbar as a vague indication
- Will try and position itself sensibly given the user preferences
- Nameplates
- Significantly reworked to fit the new spell icons
- HP Bars will no longer be wider than the name of the targeted creature
- Depending on preferences, names will not leave space for a HP bar if it is hidden
- Rising text (damage numbers, level ups) code rewritten to behave correctly in with dynamically sized nameplates
- Fundamental
- Engine
- Fundamental rework of how network packets are broadcasted from server to client (performance)
- Client supports changing mouse cursors (amazing, I know)
- Buttons now show the clicky mouse cursor
- Resize bar now shows the drag resize cursor
So…
There is probably a lot of work I haven’t mentioned here but I realise all that stuff doesn’t really matter, it’s just about what you guys get to play. With that in mind, there are now two spells deployed to the PTR:
- Lunge
- Knight
- Instant cast
- Uses between 10 and 50 rage, dealing 50% attack power per 10 rage consumed
- Meteor
- Mage
- 4 second cast
- Deals 400% spell power
Nice and simple, one instant cast with a bit of scripted mechanics around the damage and resource consumption, and one leveraging the new casting system. I would be very grateful for any and all feedback around the new changes as we are getting into the nitty gritty of the systems that are going to be the fundamental basis of what the game is like to play.
Next PTR will add back incantations when you cast a spell, and I am aiming to have the spell channelling system built on top of the cast system with a spell to test that added. Channelled spells are spells that perform their effect over time, but you need to stand still while casting them. This will allow for things like rangers volley, or maybe a channelled heal for shamans. The world is our oyster.
After that it is time to re-implement AOEs with AOE markers that will indicate the area a spell is going to affect while it is being cast. The idea here is to make AOE spells hit seriously hard, but give players ample time to either interrupt or avoid them. I want being hit by these spells to be very punishing, but to give everyone enough time to react so if you do get hit you deserve it.
Then after that, it’s time for the status system. What’s that? Think buffs, debuffs, auras, dots… all that jazz. With these systems all implemented, we should be in a really exciting position to start really building all kinds of crazy spells 😀
Then finally after that, it’ll be time to implement NPC support, so we can give all of these crazy new and wonderful abilities to NPCs so they can use them to kick your asses ^^
See you soon,
Fhox