1. Spellmasons
  2. News

Spellmasons News

Optional "No Gore" Mode

When I was a kid there were lots of games that I wasn't allowed to play and so I empathize with young gamers who face restrictions. Thanks to the request of MrMarblz from the community I was reminded of this and so have added a "No Gore" mode accessible in Options > Video > Blood and Gore.

No Gore Mode
- Removes Blood
- Removes Death animations
- Replaces corpses with Tombstones
- Removes gory sound effects
- Removes gore-containing tutorial and tooltip gifs.

Also in this update:
- Feature: Purify now works on Cursed Mana Potions
- Thanks @Koliostro for this AMAZING idea

- Fix: prevent network messages from old levels from executing
on a new level.
- Thanks @ReddPine, @Raven, @MrMarblz and others for reporting

- Fix: player stamina unexpectedly getting set to 100
- Thanks @Innonminate for reporting

- Fix: Potions spawned from Urns with Last Will from appearing at 0,0
- Thanks @Innonminate

- Fix double decoy scaling

Small Hotfix / Bug Fixes

Hello all!

Update 1.28.2 was a pretty huge refactor to stabilize some of the more important systems of the game and there were a few small issues that came with that update. Thankfully they are now fixed!

- UI: Add hotkey numbers to side card holders
Update hotkey numbers of spellbar if they change in controls
Thanks MrMarblz!

- fix: Server Crash due to broken kill switch (#490)

- fix: Ally deathmason not summoning
ally units on levels with Natural blue portal pickups.
Thanks Raven and Isneverthere!


- Deathmason On Death Event Fix (#467)
- Killing the original deathmason will now slay all enemies on the map like it used to
- Killing the original deathmason will now spawn his 3 brothers like it used to

- fix: Waves
- In plus levels, players get full mana before additional waves spawn

- fix: Players suddenly at -1000,-1000

Thanks as always to all the amazing players for your support. Checkout our discord community to be a part of the happenings! https://discord.com/invite/q6sUCreHeJ

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