1. Spellmasons
  2. News

Spellmasons News

Update 28: Dramatic Entrance

Version v1.28.1 lays the ground work for a large upcoming content update with some important stability improvements. Additionally, a new spell has been added along with some balancing and a dramatic boss intro. Stay tuned for our largest content update to date, coming soon!

- Added Spell: Potion Shatter
- Shatters a potion to apply its effect to all nearby units
- The area of effect increases with each stack of the spell
- Mana Vampire Changes
- No longer reduces maximum mana
- Steals up to 40 mana from its target with each attack
- Can spend up to 40 mana each turn to heal itself
- Deathmason
- Spawns after the players have taken their first turn, as to not reveal his location early
- Has a sick intro animation
- Steam Overlay
- Pressing [Shift+Tab] in the Steam verison of the game will open the steam overlay
- Tutorial Improvements
- Players start the tutorial with Target Cone, Slash, and Push
- Stat points earned in the early stages of the tutorial are auto-allocated to Max Health instead of being removed entirely, as to not make players' first sessions more difficult
- Many other Tutorial fixes: Most listed at the bottom of the changelog
- Huge Game State Refactor: This refactor encompases many different game systems and fixes. It should make the game much more stable and prevent softlocks
- The end turn logic accounts for unspawned players, players that can't act (due to being frozen, dead, etc.), and should handle other edge cases more consistently
- Players can end turn without needing to enter the portal and should never have to end their turn multiple times to progress the level
- Fixes an issue that sometimes caused players to choose their classes at different times - Thank you @Moonlighter
- Ally units have their end turn effects applied at the end of their turn, instead of at the end of the enemy turn
- Improved unit turn order. Ex. Ranged units will always complete their action before Priests take their turn
- Smart targeting factors in unit turn order, making it much more predicatble
- Units are much less likely to make targeting mistakes, such as targeting an enemy unit that's already been killed by another unit
- Planning view attention markers consider smart targeting, fixing an issue that rarely caused false prediction markers, especially with decoys around
- Additional waves spawn the turn after all enemies are killed, instead of spawning immediately - Thank you @BrewBreuw
- High scores are reliably tracked in online multiplayer, and for all hotseat players
- Completing a level and dying within the same series of events should favor the player and progress the level, instead of ending the game immediately
- Rework for client ID's, which should
- Improve lobby handling for online lobbies to prevent issues such as duplicated players
- Allow saved hotseat games to be loaded in an online multiplayer lobby
- Ensure spells and network messages always target the correct player in hotseat (I.E. Freeze and admin commands)
- General stability improvements

Other Fixes
- Fixed an issue that allowed players to skip the Deathmason's second phase. Deathmason now enters the second phase via the OnDeath event - Thank you @tennun.
- Fixed an await issue that prevented "Slash" from resolving correctly, which could sometimes lead to desync
- Fixed an await issue that prevented "Arrows" from resolving correctly, which could sometimes lead to desync
- Fixed a pathing issue that caused desync in online multiplayer games where gripthulus or resurrections were involved
- Modifier keys are ignored if there isn’t a bound action. I.E. [Shift+A] will move the camera to the left, unless you have [Shift+A] specifically bound to something else - Thank you @innonminate
- Fixed a bug that caused the some tutorials to not be completed when they should
- Fixed multiple tutorial display issues, such as explain prompts not showing up, completed tasks not appearing, and the tutorial not appearing correctly in multiplayer
- Fixed an issue that caused urn explosions to disappear too quickly - Thank you @blue1760
- Improved debug and logging
- Temporarily removed LoS targeting lines in preparation for an AI Refactor

Update 27: Tons of fixes and improvements

Hello everyone,

There's a lot of good stability fixes and refactoring in this update. (And a new Spell!)
One notable change is that there is now a one-time privacy policy popup; this is because I'm collecting detailed logs for multiplayer games so that I will better be able to debug issues that are reported.

Some game engine systems went through whole rewrites to be more stable and to improve predictions.
A few important desync issues were resolved too.

Complete notes below:

feature: Add spell: Bone Shrapnel
- Destroy corpses to damage nearby enemies
- Thanks Ry for inspiration
feature: Clones added to target list (#298)
So now when you clone a unit or pickup it is automatically
a target for subsequent spells in the same spell group
balance: Reduce with of collision radius for
ghost arrow
It was far too wide

admin: Add arrow keys to navigate power bar
admin: Add "Give Card", "Level up"
and new level skip admin commands
admin: Add powerbar
Accessible via Ctrl + Space
admin: Add admin tools for testing desync
Closes #315
admin: Warn about needing a selectedUnit
for admin functions that require one.



menu: Add Privacy Policy and EULA popup

a11y: Add font selector for accessibility
#365
@Tatapstar

fix: Jan 10 Fixes (#370)

* Burst VFX Fix

* Some distance optimization

* Targeting spells sort added units by distance

* Swap targets last unit instead of initial

* Distances and Optimization

* Distances and Optimization 2

* Target Similar and Kind consistency

- Target Similar ignores factions when targeting dead units
- Target Kind uses the same logic target similar does, and removed multiple filter overlap to make it more readable

* sortClosestTo Function

* Removed Sqr Calcs for code clarity

- SqrDist and SqrMagnitude have been removed. Turns out they provide negligible levels of optimization, and is not worth the maintenance/readability of the codebase

keybind: Add Reset button to return
to defaults.
Allow 'Esc' to clear current key
Thanks @BigRedCat

i18n: Fix missing localization

Note: the " spellmasons " class upgrade has spaces so as to not conflict
with the summon spellmason upgrade so I had to add
an extra line of localization

fix: Impact Damage Fix (#353)
* Arrow speed fix and slight optimization

fix: Health potion capping blood curse health overflow
Note: Regular healing over max is still denied in the takeDamage function.
Tested with health potions and the healing spell
Fixes #346

Further QA and Quick Fixes (#351)
* Fixed Ice/Poison urns pushing units
* Re-enable gripthulhu
* Fixed blue circle issue
* Gripthulhu uses LOS and correct movement/mana
* Fixed poisoner using incorrect mana
- Temp fix, used same workaround as the priest
- Needs better fix in the future
* Orient to match other LOS enemy behavior

fix player teleporting back to cast location when moving

during long-lived cast in multiplayer. This ocurred because MOVE_PLAYER is handled syncronously (in queue) on all clients and the server except the client of the player whose moving and by the time they are triggered the SYNC_SOME_STATE occurs and resets the player position.

Now MOVE_PLAYER is handled immediately so players can move while casting on all screens (but still handled without the MOVE_PLAYER message on the current client for their own player to prevent stuttering while moving themselves).
Fixes #329

fix: awaitForceMoves timing out for long arrow spells

Now that projectiles work with the forceMove system, and because stacked arrow spells can continue to add force move projectils over time, the awaitForceMove timeout must be reset
everytime a new forceMove is added since its completion can last an arbitrary amount of time, but it still needs proecting against an erronous forcemove that never ends.

Fixes #352


UI: Fix missing spellIcons
Closes #320

fix: Prevent tooltip stutter when scrollbar appears
Fixes #211

src: Allow backups of the same day and name
to overwrite each other.
Tested in multiplayer.

Closes #345

clean: Prevent meaningless error on client
`process is undefined`

content: Add spell icon recall

fix: runTurnStartEvents should complete for all units
before moving on.
This was not previously a problem because there weren't any onTurnStart events that were using async code, but
to support that potential, all onTrunStart events should be
awaited and completed before moving on in code execution.
Thanks MattTheWaz
Closes #326

a11y: Choosing default outlines saves your setting
Closes #338



fix: Force Move Improvements (#341)

fix: Quick Fixes (#342)
* Max mana no longer scales with strength
* Resurrect sets endedTurn to false
api: Add `pull` and `makeForcePush` to the api
Thanks MattTheWaz
Closes #326

fix: Refactor Force move projectile (#303)
* src: Add Event.onProjectileCollision

* src: Projectile:
- Support pierce
- Clean up image when done
- Fix firing multiple arrows in sequence
- Clean up projectile on collision

* ref: Rework arrow spells to use forceMoveProjectile

* src: Add gameloop delta time to forceMoves

* log: Report loop count limit

* fix: Headless not having element.querySelector

* fix: Pull typing after refactor

* clean: Remove unused import

* wip: Build system for using setTimeout in headless and prediction

* fix: pull distance due to forceMove refactor

* balance: ForceMove impact damage scales a lot
stronger than it used to

* log: Remove dev logs

* fix: Restore timeoutToNextArrow

which was changed for testing purposes

* fix: ArrowEffect takes the card id

so it triggers the right projectile collision function

* fix: pierce hitting the same unit multiple times

* fix: arrow not being awaited

* fix: shove magnitude after forceMove refactor

* fix: velocity falloff should take deltaTime into account

so that regardless of the deltaTime passed into
runForceMove and the number of times it's called, it will
have consistent results between clients

fix: Significant movement desync

Where if units started their turn already with a path, on headless,
as soon as they got stamina they'd start and complete their movement,
all before unit.action was invoked. This is different than on
client because the server executes the gameLoop all at once.
The solution is to always clear the unit's path at the start
of their turn so that they don't start moving unless unit.moveTowards
is invoked inside their .action function.

log: reduce logging noise for server

Related #291

fix: Dark priest and ghost archer action desync

Closes #291

menu: fix codex UI issues

Closes #311

menu: Disable multiplayer game name
and password fields
once the client has joined the room
since changing them won't have any effect

Closes #297

fix: Clear inventory
in new underworld without calling syncInventory which requries a globalThis.player
Fixes #305

npm: @websocketpie/[email protected]
Fix clientId being set to '' on roomLeave
Fixes #292

Colorblind support (#314)
Ref: #293
* src: Customizable color and thickness outlines
* menu: Add outline accessibility controls
* src: Persist accessibility outline to disk

Fixed Target Similar (#307)
* Fixed Target Similar
* Removed workaround and prediction copy
* Updated pickups to match unit behavior
* Initial Targets [] for multi-initial targets
Fixed target similar adding the same target multiple times
Fixed clone not adding pickups to target list
* fix: Restore use of lastPredictionUnitId
predictionUnitIds should be incremented differently from
unit ids.
This is because prediction loops can run different amounts on
different clients, but all clients should call create for real units
the same number of times, keeping the unit ids in parity.

fix: planningView graphics shouldn't use the prediction unit id to
find the corresponding real unit id, so I added `real` as a reference
to the original just like pickups.


End Turn Sfx plays when an ally ends their turn as well (#309)

Resurrect requires a valid corpse (#308)
Res requires a valid corpse
Fixed an issue where you could resurrect a unit after using bone shrapnel on them, which could lock the game in the case of a player character

fix: Reset out of bounds players
This should never happen but to prevent
the game from getting stuck,
if a player gets out of bounds, reset them.
Closes #277

fix: Multiple priests targetting the same corpse
Fixes #247

fix: Prevent target similar from
mutating targets array while iterating targets array which resulted
in undesired extra targeting because the targets array is refreshed inside of
every loop.

Fixed #299

fix: Timemason on Hotseat
loses mana when other player is active

Fixes #302

Contaminate Exclude Corpse Decay (#287)
* Contaminate exclude corpse decay
* Corpse Decay can't affect players/living

Festive Co-Op Games

Hopefully, like me, you’ll have booked a bit of time off around the festive period. And coincidentally, Valve’s Winter Steam Sale kicked off just a couple of days before Christmas. Since so many of us and our friends are off, this marks the perfect time of year to dip your toe into the wonderful world of co-operative games.

Read the full article here: https://www.gamingonlinux.com/2023/12/festive-co-op-games

Update 26: Waves

- feature: Waves added in Plus levels, each subsequent Plus level gets one extra wave before the Portals appear
This should make end game much more challenging.
Also: Units in the Plus levels get "Corpse Decay" when a new wave begins so their corpses don't stick around long
- feature: Added In-game chat (accessible via the "t" key)
- Thanks Couls for this awesome feature!
- content: Add "Teleport" spell
Thanks Meme_Man

- balance: Target Similar and Target Kind
Thanks Meme_Man
- balance: Significant Mana Steal rebalance
- balance: Heal Alllies now requires Heal Greater instead of fully replacing it when upgraded.
- balance: Send Mana: Cost is now increased to 30 and it scales in cost when used like other spells.
- balance: Improve Contaminate, stacks now cause the curses to continue to spread
also contaminate now overwrites lower level curses with higher level curses when it spreads, instead of ignoring already inflicted units.
- balance: Significantly rebalanced Stat gain amounts: health, stamina and cast range are now greater per point spent.
- balance: Casting Blood Curse on an ally Spellmason no longer grants them the Blood Curse spell
- balance: Buff suffocate and poison
- Also they now proc at the end of a unit's turn instead of the beginning
- balance: Repel and vortex now require push and pull (respectively)
- Repel and vortex mana cost increased slightly
- balance: Target cone now increases it's arc much more when stacked.
- balance: Target column now extends farther when stacked
- balance: In Plus levels, units no longer get "Immune"
- balance: Target Similar, Target Kind
- balance: Reworked Connect spell algorithm for better targeting
- balance: Enemy Mana Adjustments

- improvement: Rejoining existing games should be much more reliable
The clients have been improved to use the same clientID between reboots. This means that if you rejoin a game after a disconnect (or a saved game - after version 1.26.0) it should automatically give you back control of your original character instead of making a new one.
- i18n: Russian translation
Thanks sevagog and tatapstar!

- fix: Prevent ending your turn while you're picking upgrades
- fix: Multiple issues on Hotseat Multiplayer with major refactor
- fix: Cloned or Summoned Spellmason now correctly deals the damage listed in their tooltip
Also stacking a summoned spellmason increases it's damage output
Thanks Meme_man
- fix: Purple portals stick around after a player enters one. This resolves the occasional issue where one player would trigger both portals in multiplayer and the other player would have to end their turn to recreate a new purple portal so they could proceed
- fix: The back button on the Load menu going to a multiplayer lobby menu even if you were in singleplayer.
- fix: Spell smuggling between new games
Thanks WildBerryBlast
- fix: Vampires keep blood curse on death
- fix: Split hack allowing infinite splits
- fix: Incorrect damage dealth when combining Dash then Burst
- fix: darkPriest sometimes displaying with wrong colors
- fix: bugs where client's local player state would get overwritten by server
I believe this will resolve the issue where summon spells would sometimes disappear
- fix: Ensure clientId remains consistent, even in singleplayer
- fix: Persist removing cards from toolbar
- fix: desync in slash
Where slash would return before all damage
was done being dished out.

- visual: Added suffocate display to health bar
- visual: HP and MP bars now have a dark, partially transparent background and healing / gained mana is displayed in a spell prediction in addition to damage / spent mana.
- visual: Spells in inventory are more sensibly grouped together
- visual: Urn explosion radius now shows when selected
- visual: Fixed urns losing red tint if damaged/killed
- visual: Fixed issue where sometimes blood golem, blood archer, dark priest, etc didn't get properly tinted and appeared to be vanilla units
- visual: Add Spell details to Unknown cards in the codex so you can see if they require other cards to get them or if they belong to a mod.

- accessibility: Darken background colors even more when the option is enabled
- accessibility: Added dedicated accessibility menu. If you need additional accessibility options, please let me know!

Update 25: The Witch

Staff update!
Soul Muncher (from Discord) has joined the team as a developer and is doing awesome work!

feature: New class: Witch!
feature: New Spell: Long Arrow
feature: New Spell: Send Mana
Thanks @meme_man for the suggestion!
feature: Some card upgrades now "require" other cards in order to appear as upgrades but will not remove them when chosen.

balance: Necromancer's Capture Soul now costs a static 38 hp instead of 90% health so you can upgrade your health to make it less dangerous to use.
balance: Target Column now increases in length when stacked making it a viable targeting spell.
balance: The mana cost of summon spells has been completely rebalanced, making many of the summon spells much more viable than they were before
balance: Timemason has been reworked so that you get double mana and lose mana over time rather than gaining mana over time and losing health. This increases pressure and challenge rather than encouraging stalling and waiting.

big fix: Prevent clients from timeing out from servers due to idleness. This has been a big issue in multiplayer games where lots of folks were getting disconnected. Big thanks to @WhiteScythe , @Gumby and others for reporting this
fix: Manual camera controls that skip the camera cinematic at the start of each level now allow you use to choose your spawn immediately rather than waiting the same amount of time that it would take for the cinematic to finish.
Thanks @Skillo for uploading a video that showed this issue
fix: Resolved issue where dashing to a pickup caused it to just disappear on multiplayer
fix: Burst now deals the max damage when you are close enough to touch another unit rather than having to be right on top of them
fix: Dash spell desync where dashing to multiple targets would cause a desync. Now dash only dashes to the first target if multiple targets are selected.
Thanks @TheyCallMeWitch for reporting
fix: Harvest + Push causing a crash
Thanks @White Rider for reporting

improvement: Explains why saves may fail due to lack of space
improvement: Add speed run time to game over screen
Thanks @WildBerryBeast and @Skillo
improvement: New spells are now chosen via a level up button (shown where the "End Turn" button usually is), so that leveling up doesn't cover the screen just as your cool spell is finishing.

stats: Gather stats for language use
stats: Gather stats for upgrade choices so I can determine which spells are so unpopular that they need reworking. Your vote counts!