Developer Log - October 2024
General State
When we last gave an update we stated we had 2,275 issues still open across a broad spectrum of the game. As of this post this now stands at 1,911. Meaning that the QA & Bug Triage team alongside our developers have been able to close 364 issues with a further 73 in the Testing state awaiting validation of fixes done by our developers.
As it stands there are approximately 357 purely cosmetic issues we aren't focusing on, 176 technically gameplay touching but extremely low impact, 424 standard issues that we don't consider launch blocking but will get through as many as we can, and finally 134 issues that we consider high priority and are focusing our efforts on. Importantly, not all high prio issues are considered launch blocking. The remaining are simply not triaged and not categorised.
I want to express a deep thank you to our QA team who are entirely driven by passion for the project and are sacrificing their free time.
As a general project vibe we feel we are sincerely in the end game now and intend to get Project Epoch in your hands as soon as possible.
Flarey Clouds
This month, we’ve made significant strides in transitioning our launcher’s patch distribution from DigitalOcean Spaces to Cloudflare R2. This wasn’t a small task; we essentially had to rewrite large chunks of our patch shipping process from start to finish.
The benefits of this transition are twofold: we expect to see cost savings and, more importantly, a noticeable increase in download speeds for most users. We’re excited to say that we’re getting closer to being able to bring back full client downloads, which will make it even easier for everyone to access the game.
And we needed to get this done this month for… reasons!
Spell Queue
During this month one of our fantastic bounty hunters Sogladev implemented a key server side feature known as the Spell Queue (or Golden Delay / GCD Batch). This has been deployed internally for some time and has passed all QA so we're now happy to discuss it.
What is the Spell Queue?
Spell Queuing is a feature that allows several spells to be queued up on the server - so that they can be executed immediately with no delay, regardless of how high your latency is. This is a great feature introduced in patch 2.3.0 (TBC) and put an end to all casters needing to use /stopcasting macros and cast-bar latency indicators to perform properly. Essentially, this is what allows you to register casting your next spell very shortly (400ms) before your current spell has gone off. In Cataclysm, a slider was added in the game options to allow players to customize this timing window however we replicate the 2.4.3 and 3.3.5 behaviour.
A visual summary can be found below from the talented Netherwing crew.
This is a key part of what makes caster classes feel good and perform smoothly and it is highly likely that you have played on other servers such as the above Netherwing example. But importantly, this does not exist on a public core. That is until now! we hope that other projects and upstream cores pinch this and make this key feature baseline for all.
An Interesting Bug
This section is dedicated to a single very technical bug that some people might find interesting, I will do my best to explain it in a way that is understandable to most people. To start off, what is the bug?
This goes all the way back before Beta 1, the bug was simply "Divine Favor does not affect Holy Light". For context, Divine Favor gives your next Flash of Light, Holy Light, or Holy Shock a 100% chance to critically hit on its next cast. After investigation, the reason why this spell didn't affect Holy Light was because Holy Light had no "Class Mask".
A Class Mask (also sometimes known as Spell Family Flag) is a number on most player abilities that is used to target abilities from other spells, such as talents or set bonuses. These numbers are part of a bitmask, which is a way to store multiple true/false checks in a single number. Correct bits would be 1, 2, 4, 8, 16, 32, etc. To give an example lets look at the spells Fireball and Fire Blast. Fireball has a Class Mask of 1, and Fire Blast has a Class Mask of 2. If a talent targeted "3" it would affect both of those spells.
There are also 3 Class Masks. A, B, and C. This is purely because there's too many player abilities and the number went too high. In Burning Crusade only A and B existed, in Wrath they added C. Because of this, the fix is rather simple. Because C is unused, lets just manually add a new Class Mask to Holy Light. C = 1. Then lets go update Divine Favor to target Class Mask C 1. Easy, problem solved. (Every other talent that affected Holy Light had to be updated as well)
2 years later
It was reported during beta 3 that the Warlock spell Dark Pact was not being affected by the talent Grim Reach. After investigating, Dark Pact has no Class Mask. This time I decided I need to fix this at the source, what's the cause here? What other spells are affected?
On Project Epoch we utilize 2.4.3 Classes as our baseline, and this means we ported all class spells from a 2.4.3 DBC from a TBC Client, mixed with some information from a 2.5 TBC Classic Client to fill in missing gaps. We use the program WDBXEditor to export the TBC DBC file into SQL, which allows us to utilize it when building the server. If you don't know what that means, that's okay, its not that important. Basically we use Burning Crusade files directly to port the spells. So I opened up that 2.4.3 DBC file and checked Dark Pact, no Class Mask! Using the website wow.tools (this function of the website is no longer available, however you can now see it here) I was able to view Dark Pact's TBC Classic 2.5 information, and it has a Class Mask of "-2147483648".
Some more knowledgable readers might recognize that number, 2,147,483,648. That is one number above the 32 bit signed integer limit. More specifically though, its a negative number, why? Integers are just numbers, and a signed integer is an integer that can be positive or negative. 32 bit integers can range from -2,147,483,648 to 2,147,483,647. However, an unsigned integer can only be positive and can range from 0 to 4,294,967,295.
The issue here is that the real Class Mask of Dark Pact, and Holy Light, is 2,147,483,648, and that WDBXEditor, wow.tools (and wago.tools) think that the Class Mask line should be a signed integer. In WDBXEditor this causes the number to display and export as 0, and on wow.tools/wago.tools it displays as -2,147,483,648.
The real issue all along laid in WDBXEditor itself, reading the integer incorrectly. I fixed this myself in my own WDBXEditor, but the real fix is to use a more up to date version of WDBXEditor, which at the time I did not know existed. With the simple addition of the letter "u" in front of "int" to declare this line as an unsigned integer, the number now reads correctly as 2,147,483,648. The spells were then re-exported, and the bug was fixed. In fact, this affected more spells than any of us knew! You can find a full list of them here if you are interested.
Reputation Upgrades
This month, we’ve focused on enhancing and finishing the reputation experience for players across Azeroth. From unlocking fresh rewards for established factions like Timbermaw Hold and the Thorium Brotherhood to expanding on our newly introduced Valor’s Expedition in Silithus, we’ve added new items, companions, and crafting options to deepen the connections players can forge with these iconic groups.
Valor's Rest
Following our announcement of the new Valor’s Expedition faction in Silithus, based at Valor’s Rest, we’re excited to unveil a range of crafted items available exclusively to their allies, enhancing the expedition’s efforts in the desert.
Timbermaw Hold
This month, we’ve made the Timbermaw Hold faction even more rewarding. We’ve introduced a new tabard, added a firefly pet, and released elixirs that boost reputation gains. Plus, players can now access new and remade crafted items to strengthen their bond with the Timbermaw.
Thorium Brotherhood
The Thorium Brotherhood has unleashed powerful new rewards for their supporters, including a living charcoal pet, fiery reputation elixirs, and an arsenal of fresh armor sets and weapons that embody their mastery of the forge.
War, What Is It Good For?
We’ve finished upgrading the PvP system to introduce a fresh way for players to earn experience through PvP.
Now, those who opt into Warmode can gain experience from Honorable Kills in the open world.
Within Battlegrounds, players can also earn experience by completing key objectives. In Warsong Gulch, experience is awarded for Flag Captures, Flag Returns, and match wins. Gillijim’s Isle offers similar rewards, with experience for Flag Captures, Base Captures, and overall victory.
These updates provide new progression opportunities, rewarding both personal performance and team success in PvP. And yes, we’ve thought to add sensible cooldowns!
To encourage tenacity and recognize closely matched games, we’ve introduced an additional Mark of Honor reward for Battlegrounds that end in a “close game.” This extra reward aims to keep players engaged and rewards well-fought battles, even if victory isn’t secured.
In Warsong Gulch, a close game example would be a final score of 3-2, with the losing team capturing at least two flags. In Gillijim’s Isle, a close game requires the losing team to reach at least 1300 out of 1600 points.
Bounty Hunting
This month, following the launch of our bug bounty system for the server core, we’ve seen a surge of activity aimed at fixing issues and enhancing gameplay.
We want to take a moment to commend the talented developers participating in this bounty program. Earlier, we highlighted Sogladev for creating a Spell Queue system, which has significantly improved spell casting mechanics.
Additionally, we’d like to acknowledge Thulz for his impressive contributions, including:
- New GM Commands: These enhancements allow for better resolution of player issues during live server operations, particularly when hopping between instance IDs.
- Creature Summoning Improvements: Thulz has revamped creature behaviors to ensure summoned allies assist their owners at combat start or immediately aggro when summoned during a fight, resolving hundreds of prior individual cases.
- Master Loot Fixes: Key bug fixes now prevent master loot from mistakenly grabbing quest items.
- Auction House Sorting: The auction house window now features functional sorting, streamlining player transactions.
- Area Aura Improvements: Major enhancements have been made to how area auras apply, particularly addressing an issue with Hunter Traps and Flares not activating until the enemy leaves and re-enters the area—an important fix for gameplay integrity.
Thanks to the contributions from bounty hunters, we’re continually improving the player experience and look forward to more updates!
Closing Statement
As we wrap up this month’s updates, we want to extend a heartfelt thank you to our community for your patience and support during this busy period. We’re eager to get you back in-game very soon and are actively working on implementing enough new functionality and bug fixes to justify a new test session.
We’d love to hear your thoughts on whether you’d prefer access to something that might be a bit buggier sooner or if you’re happy to wait for a more polished experience. We’ll be keeping a close eye on Discord to gauge the general vibe and gather your feedback, so don’t hesitate to share your opinions!
Thank you for being a vital part of our journey!