TUXDB - LINUX GAMING AGGREGATE
made by: NuSuey
NEWSFEED
GAMES
▪️CROWDFUNDING▪️COMMUNITY DEALS▪️STEAM DECK▪️CALENDAR
tuxdb.com logo
Support tuxDB on Patreon
Currently supported by 11 awesome people!

🌟 Special thanks to our amazing supporters:


✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Benedikt][David Martínez Martí]

Any feedback for tuxDB? Join us!

Screenshot 1
Fullscreen Screenshot 1
×
Screenshot 2
Fullscreen Screenshot 2
×
Screenshot 3
Fullscreen Screenshot 3
×
Screenshot 4
Fullscreen Screenshot 4
×
Screenshot 5
Fullscreen Screenshot 5
×
Screenshot 6
Fullscreen Screenshot 6
×
Spellmasons is a tactical, turn-based, roguelike where you and your friends play as mages who combine spells on-the-spot to address the unique challenges of each moment!

Conjure spells from an ever-growing repertoire of combinations in order to survive against the onslaught of enemies, save your friends, and ultimately devastate the great danger that opposes you. As you progress further, your spell collection grows, enabling even more chaotic and creative encounters.

Use the environment to your advantage!


Each level is procedurally generated, providing you with ample new means of cheating death just when it appeared that you had no escape. As you learn the many ways your spells interact with yourself, your enemies, your allies, and the environment you will become more resourceful and adept at handling the most difficult encounters.

Work Together!


Spellmasons supports online multiplayer so you can coordinate and strategize with your friends! Spellmasons uses innovative faction-based turns: You and your fellow mages can all move, cast and act simultaneously. Plan carefully, work together, execute your master plan, and overcome the challenges before you!

Grow into a formidable mage!


Unleash absurdly powerful endgame spell combinations where one small difference can mean the simultaneous death of every enemy on the map or the end of your run!
Spellmasons
Jordan O'LearyDeveloper
Jordan O'learyPublisher
Early 2023Release
🎹🖱️ Keyboard + Mouse
Very Positive (708 reviews)
Steam Lobby Support!

Third time's the charm!
I've been trying to implement a new multiplayer backend for the past few months and my first two attempts did not succeed. This time I tried using Steam's Lobby backend to connect players and it worked.

[b]What this means:
[/b]If you use the new "Steam Lobby" option (still in Beta), you won't be sharing a Community Server with other players which means other players (not in your lobby) can't crash your game and the server is not sharing resources between everyone playing. The "Steam Lobby" option allows players to connect directly to each other. My initial testing looks really promising, however, I'm labeling this "Beta" because if history has taught me anything, no matter how hard I try I can't find all the edge cases that players do :D[b]
[/b]
Please give the "Steam Lobby" multiplayer option and try and let me know how it works in Discord.

This update is part 1 of a 2 part Major update with the second half planned in Late July. This update is mostly for stability and the second update is a content update that I'm really excited about.

Here's the full changelog:

-Network: Enable Steam Lobbies for improved multiplayer

-Balance: Restore "Undying" to Goru and modify Undying so it brings ressurrects with 50% health

-Quality of Life: F12 now takes Screenshots!

-Language: Pre-reform Russian

Thanks @nikitasss

-Menu: Redesign menu appearance

-fix: Remove redundant runPredictions which occurs in deselectCard() which is triggered on click

-fix: Prediction forceMoves from bloat (or any onDeath) simlulating on the NEXT call to runPredictions.

-fix: confirm discard hotkey label

-fix: bone shrapnel only select corpses

-fix: Overspend Rune upgrade bug

that resulted in negative SP

Thanks @BlackCobra22113 and others

Since I launched Spellmasons, I've released over 50 free updates. If you're enjoying what I'm building, you can help support my work at Patreon or leave a candid review of the game on Steam!

[ 2025-06-18 16:00:57 CET ] [Original Post]
Improved Enhanced Servers

Last update I released experimental Enhanced Servers (player to player connections that don't suffer from heavy server load) - which worked for some people but not for others due to firewall issues. This update should resolve the firewall issue so the Enhanced Servers should now be available for everyone!

Please let me know about your experience with them on Discord.

Some other changes in this update:

Quality of Life:
- UI: Add additional side spell holders
- Game: Add singleplayer difficulty options after you beat Deathmason on Normal difficulty

Balancing:
- balance: Remove `undying` blessing from Goru
- balance: Siphon cost
to match the scaling structure of mana steal so it can't scale infinitely.
Thanks @Carlos

Fixes:
- fix: p1p connection not working on firewalls
- fix: Poisoner + Sharp Teeth Imbalance
Thanks @Yasu
- fix: Infinite Loop Contaminate, rez, suffocate
- fix: Armor now allows reducing damage to 0
Thanks RAHHHHHH :3

[ 2025-04-13 12:31:19 CET ] [Original Post]
Enhanced Servers

Good news for Spellmasons!


I made a new multiplayer backend from the ground up and you can try it today! It uses P2P (player to player) connections instead of a dedicated server. What this means is that people playing other games on the same server can no longer crash your game or slow it down by summoning too many minions! Your server won't share any resources with any other players.
You can push the game as hard as your own PC (and your friend's PCs) allow!

The Enhanced Server still supports many players (technically an unlimited number of players, bound only by the resources of your computer).

Try it now in the multiplayer menu and let me know what you think on Discord!
Game Description Image

Changelog
balance: Damage Limiter. For enemies with super high health, damage limiter allows for dealing up to 3% of max health at a time - whereas before it was capped at 30 damage. This has been often requested, because high health enemies in loop levels were nearly impossible to deal with if they had Damage Limiter
balance: Adjust loop difficulty to scale
balance: Ensure bosses keep spawning on loop levels after +3

fix: Exploit where investment rune gave extra SP on quickload
fix: Polymorph removing benefit of sharp teeth and hardened minions. Thanks @month for reporting!
fix: Quicksave "Last Turn" From saving at the beginning of a level before any enemies are placed
fix: Prevent unspawned players from taking damage
Thanks Piratesaur from Steam forums and others who reported this
fix: Targeting spells sometimes missing "Requires Following" Text when no non-targeting spell came after it
fix: Minion runes not working on automated summons
Also fixes quantity power scaling so that sharp teeth and harden minions applies AFTER quantity power from stacking summons.
Thanks @SquishyFishy
fix: Update player manaPerTurn when upgrading manaMax
This didn't affect players since their stat refresh logic doesn't consider manaPerTurn but it DOES affect player clones.
Thanks @Tingora!

copy: Add unitOfMeasure to town portal
Thanks @IVI and @Tingora
copy: Fix copy
- Trap copy missing "Damage" text
- Blood Archer copy: "Miniboss" -> "Champion"

admin: Add "Give all runes" Admin command for testing

[ 2025-03-15 12:32:07 CET ] [Original Post]
v1.54.1

Patch Notes - Version 1.54.0

Balance Changes

  • Adjusted loop difficulty scaling. The rate at which the difficulty increases on loop levels (+1, +2, +3...) will now grow faster
  • Ensured bosses continue to spawn on loop levels beyond +3.

Bug Fixes
  • Fixed an issue where quicksaves labeled "Last Turn" would save at the beginning of a level before any enemies were placed.
  • Prevented unspawned players from taking damage.
    Thanks to Piratesaur from the Steam forums and others who reported this!
  • Fixed missing "Damage" text in trap descriptions.
  • Corrected "Miniboss" to "Champion" in Blood Archer descriptions.
  • Resolved an issue where targeting spells sometimes lacked the "Requires Following" text if no non-targeting spell followed.
  • Fixed minion runes not working on automated summons.

    Also fixed quantity power scaling so that Sharp Teeth and Harden Minions effects now apply [u]after[/u] quantity power from stacking summons.
    Thanks to @SquishyFishy!
  • Updated player manaPerTurn when upgrading manaMax.
    This didn't affect players directly since their stat refresh logic doesn't consider manaPerTurn, but it did affect player clones.
    Thanks to @Tingora!
  • Added a unit of measure to the Town Portal description.
    Thanks to @IVI and @Tingora!

Admin Tools
  • Added a "Give all runes" admin command for testing.

[ 2025-01-10 11:53:03 CET ] [Original Post]
Even MORE Runes!

1.52.2 Update


I'm super excited about this update because I believe it will make lesser known / less popular builds and strategies MUCH more viable! For example, the Curse/Stall build will be a viable option even in single player due to the new Decoys. And there's much more like that but I'll leave it to you to figure out how to leverage these runes.

Shoutout to @scobjo for making an incredibly well composed document pointing out some of the gaps in balance, may changes from that document made it into this update.

New Content


Rune: Precision
Thanks @PiElRoja

Rune: Whirlpool

Rune: Plague Doctor Mask
Thanks @Arivia!

Rune: Reflex

Rune: Hardened Minions, Sharp Teeth

Rune: Thorny Decoys

Rune: Witch Bane
Thanks @Monarch!

Rune: Blood Warlock

Rune: Icy Veins
Thanks @VinnickTalberot!

Rune: Winter's Chill
Thanks @VinnickTalberot!

Rune: Investment
Thanks @Akira!

Rune: Blood Letting
Thanks @Monarch!

Rune: Town Portal
Thanks @Arivia!

Rune: Last Stand, Contaminate on Kill, Hat of Despair
Thanks @Arivia for Hat of Despair!

Added 2 new decoy upgrades

Upgrades to Poison
Thanks @Scobjo!

Balance Changes


Plague Doctor Mask cost adjustments

Make Contaminate on Kill more expensive
Since it transfers the stacks of the curse too, it's SUPER powerful.

Make reroll runes cheaper

Swap Rare Uncommon

Recall: Uncommon Rare
Thanks @Scobjo!

Bug Fixes


Fix: Desync with unit movement
Units with leftover paths now clear their paths before receiving stamina.

Fix: Spellmason clone movement timeout
AI units now handle stamina changes correctly to prevent timeout issues.

Fix: Blood Curse + Debilitate stage order
Blood Curse now applies before Amount modifiers.
Thanks @Varion!

Fix: Goru resurrecting more than once
Undying now removes itself properly.
Thanks @Weedybird!

Fix: Freeze immunity not working via non-spell sources
Thanks @Varion!

Fix: PlagueBringer working while dead
Thanks @AlchemyExists!

Fix: Missing mana SFX for 'send mana' and 'steal mana'

Fix: Clones casting 'clone' on enemies
Thanks @RAHHHHHH :3!

Fix: Privacy policy overlapping menu logo

Fix: Changelings' cast delay issues

Fix: Prevent out-of-bounds spawns
Thanks @Rampantegecko!

Fix: Purple Portal clearing shields and mana overflow

Fix: Purple Portal resetting quicksave on level start
Thanks @Lost and @eps!

Optimization


Improve recall
Units no longer pack together at the same spot.

[ 2024-12-10 21:37:40 CET ] [Original Post]
Help Spellmasons win a Steam award!

Hello fellow Spellmasons!

I started working on Spellmasons 4 years ago because I love playing multiplayer games with my friends and I wanted to create a unique kind of spellcasting game that would make players feel like Wizards!

Spellmasons has been 100% self-funded and oh boy has it been a challenge. I've quit 3 separate jobs to resume work on Spellmasons and taken up new jobs when I ran out of money. But it has been totally worth it.

The player community has been so amazing - you all have really driven the direction of the game with lots of players suggesting spells, runes and features that made it into the game and a handful of incredible mods have been created.

If you want to help contribute to the future of Spellmasons, please nominate it for the "Labor of Love" category for Steam Awards!

Thank you all for your support!

[ 2024-11-27 18:01:30 CET ] [Original Post]
New Champion Modifiers!

Update v1.49.3


New champion modifiers, a new spell that allows you to sell your unwanted spells for more SP, and lots of fixes and balancing.

Changelog
  • New Content
  • Add 3 new Champion modifiers: Curse Immunity, Unstable, and Double Damage
    Thanks Hex Obsidian for the "Displace" Champion Modifier idea
    Thanks Xulqulyat for "Curse Immunity"
  • Add "Sell" spell which allows you to exchange spells for SP
    Thanks to @Vintage the skulldog, @Xulqelyat, and @Cake
  • Balance Changes

    Remove random discount on Runes.
    Based on community feedback, discounts encouraged un-fun min-maxing where players would wait for the perfect discount, leading to regret when buying without one. Instead, we'll focus on providing more ways to earn extra SP.
  • Optimizations
  • Improve Siphon Spell (Bogiac's Spells mod) to not lag the game
  • Community Servers now have a unit and pickup limit (1000 and 500 respectively) to prevent crashes affecting other players.

    If the limit is reached, dead bodies will decay to make room for new units; if there are no dead bodies, extra units beyond the limit will be merged. I believe this will result in a happy medium of non-crashing servers and also not affect the gameplay for players who want to push the game reeeeeeally hard.

    Self-hosted servers (LAN or otherwise) have no limit and you can push it to the absolute limit of your available CPU and memory :)
  • User Experience (UX)

    Show mana cost for clones of taught spells
    Thanks @Brian for the suggestion
  • User Interface (UI)

    Improve mana badge icon
  • Major Fixes

    Determine rune cost on client
    Fixes "runes being undone" issue in multiplayer
  • Bug Fixes
  • Prevent Connect from targeting already targeted units (improves spell effectiveness)
  • Dead units no longer block spawning
  • Clones now use mana when casting
  • Fix audio for Ancient
  • Prevent Goru and Priest from resurrecting decoys, which confused players who assumed decoys were allies
    Thanks @Yasu

[ 2024-11-11 15:05:38 CET ] [Original Post]
v1.48.1 Hotfix: Fixes broken Deathmason, spawn points, and more

Welp the most recent build broke a few important things, but fortunately they are now resolved on v1.48.1!

The biggest fix:
Multiple places that needed to find spawn locations such as Deathmason portals, summoner teleport, summoner minion spawn locations, changeling rune and more were broken.
This is now fixed.
Thanks @Godspeed, @Xeno, @Bogiac, @Falontani, and @Haze for reports

fix: Allow cloning pickups multiple times
fix: space in save name ends turn
Thanks @Haze

fix: Death Wager to work when
greater than full HP.
Thanks @Xulqelyat

fix: Book glow to only occur
when player has stat points.
Before, DareDevil would make the book glow which was an obnoxious exception.
Now it will only show as glowing
if you have points unspent.


Also I've been trying to add some "Juice" to the game and design to improve the "Feel" so there's a few improvements here:

  • Add glow to prediction circles
  • Make unit outline size relative to zoom so the outline doesn't look super chunky from far away and super thin when close up
  • Add drop shadow and movement to cards
  • Add subtle movement to the main menu characters

Thank you everyone from discord for reporting these significant issues!

[ 2024-10-29 11:39:48 CET ] [Original Post]
Intelligent Clones!

The new "Teach" spell allows you to instruct any cloned Spellmasons to use a spell combination for their default behavior!
Add "Teach" to the start of a spell combo and the rest of the spell will become the new spell of any targeted Spellmason NPC!

New mod: Bogiac's Spells!

Vastly improved FPS for the following Target Spells (especially when targeting TONs of units):
optimize: Clone FPS
optimize: Target Similar and Target Kind
optimize: Connect

Improved mod API
mod-api: Expose Obstacle in the API
mod-api: Expose seedrandom in the rand export for the API
mod-api: Add Upgrade.ts to spellmasons api
so that modded spells can grant other spells to player
Thanks @Rosan
mod-api: onLiquid event
The onLiquid event is called when a unit either first enters liquid, starts a turn in liquid or exits liquid.
For the first two scenarios `currentlyInLiquid` will be true, when exiting liquid, it will be false.
This is for the modder Rosan!
admin-toolbar: Add hotbar shortcut to give all cards
from a mod

Other Improvements
juice: Improve resurrect animation with outer glow (lightsaber style)
juice: Add a small pause after merge
and swap so you can take in what just happened

fix: BountyGolem's not triggering bounties
when they kill an enemy with a bounty.
Thanks Scojbo!

[ 2024-10-26 11:01:08 CET ] [Original Post]
Update v1.45.2

This patch contains LOTS of FPS optimizations and bug fixes! There's still more optimizations on the horizon but I wanted to get these into your hands!

Optimizations:
- Optimize: floating text so if there are more than 20 of
a single kind it will just aggregate a message
Thanks Xulqelyat!

- optimize: Target Circle

- optimize: Target Column

- optim: Throttle skybeam
This massively increases efficiency for when lots of enemies are teleported to the same place all at once.
Hugely reduces lag.

- optimization: Update server to run entirely on bun.sh
rather than just websocketpie (this should make many things on the server faster)

Gameplay Balances:
- balance: onKillResurrect Rune
to make it less high %. It was way too high (50% max is too much)
and you could get there too cheaply.
Thanks Xulqelyat!

- balance: Exploit: Repeated self rez for infinite mana
Prevent resurrecting player units more than once in one turn to disallow infinite mana exploit where resurrecting yourself gives you mana

- balance: Change Death Wager cost
"Reset all spell costs back to their default. Sets your current health to 1. You must be at max health to cast. This spell must be cast alone."

So it will no longer affect max health (no permanent effect).
I think this will make it much more viable and strategic.

fix: Always updateCardBadges after cast so spells like DeathWager that affect card costs will show the proper badges.
Thanks Jace, SquishyFish, Monarch and Xeno!


Bug Fixes
- fix: Un "frontload" plus radius
because it is in contradiction to how the spell's copy describes it and also users may want to use it more surgically.
Thanks Darth_Dan!

- fix: last will to only notify if it's able
to spawn a potion.
Thanks Darth_Dan!

- fix: prevent projectiles from colliding with caster
(because you can step in front of your own stream of arrows)
Thanks Xulqelyat!

- fix: Prevent infinite recursion with takeDamage events
Once the takeDamage events start to process, any further damage cannot retrigger takeDamage events
This ensures that a unit's onDamage events can't reflect damage back on itself which would cause infinite recursion
Removes `hasRedirectedDamage` which is no longer necessary due to this new method of `takingPureDamage` which covers
that case too
Also fix prediction units from having a ref to themself via prediction copy, only real units should have that ref.
Thanks Xulqelyat!

- fix: Prediction purify from actually removing
soul shard haver from units when soul shard owner was hovered
with prediction purify.

- fix: Far Gazer not showing stamina change on upgrade

- fix: Res immune applies to players only

- fix: Update mana badges when clearing
queued spell.

- fix: Logging death on prediction instead of only on real
Thanks Darth_Dan!

- fix: Increase potion spawn radius on alchemist so it
doesn't spawn on top of you

- fix: Increase spawn radius for purple portal
so that it doesn't spawn too close to you causing it to trigger immediately
In multiplayer, this made the game advance as soon as you cast the last kill spell.
Thanks @Jackson

- fix: findValidSpawn to use hex
so we don't get unexpected far-away clones

- fix: Remove "Choose a place to spawn" if player is already spawned on load

- fix: Prevent competing Goru's from using each other's
primed corpses.
Thanks FfrankF!

- fix UI: Unit attack range circle not moving with them

- fix: Server Loop: "Could not find valid spawn..."
To address infinite loop that reported 'Could not find valid spawn point in radius'
over and over, if no spawn point is found just return the center.

- fix Server Crash: If headless has to emergency exit force moves
clear all force moves so that they don't continue to emergency exit next time the function is called.

- dev: Drastically speed up starting up headless server using bun.
- fix: Save remembers camera location

[ 2024-10-15 13:47:42 CET ] [Original Post]
Performance Optimizations!

Backwards Compatibility warning
Some of the optimizations in this update are not backwards compatible with
old save files. If you still want to play on an old save, you can do so by
right clicking on Spellmasons in your Steam library, choosing "Properties" >
then "Betas" then v1.43.4 and restart Steam. This will ensure your client is
on the previous update instead of this one.

FPS Optimizations

The game now runs a lot better when there are tons of units on screen.
A few notable changes went into this:
1. Individual sprite outlines have been moved to outline the entire unit container.
Not only does this look much cooler in crowds but it also makes a MASSIVE difference in
FPS when there are over 1000 units on screen. If you still want individual unit outlines
(optionally with different colors and custom thickness, it is still available in the Accessibility
2. Dynamically colored sprites (such as Blood Golem, Blood Archer, Dark Priest, etc) now have their
own sprites instead of being dynamically tinted at runtime. This saves on FPS.
menu but it will slow the game down when there are many units on screen.)
3. Spellmasons is constantly predicting what will happen next turn. When there are over 1000 units
on the screen, this would really bog down the FPS. Significant prediction enhancements have
been made for enemy unit targeting to resolve this issue.
4. Card mana and health badges are no longer updated when predictions run. This was a totally superfluous
function call left over from long ago and will improve FPS. They are still updated when they need to
be like when a spell is added, removed, etc.

Other changes:

Content: New spells "Give bounty" and "Target bounty"

fix: removePickup actually removing
pickup emitter and doing other cleanup even when `prediction = true`

Thanks Hex Obsidian

fix: Prevent multiple runPrediction calls from triggering simultaneously

fix: Don't change player unit movespeed when slowed, only stamina
otherwise it makes their movement jittery due to how multiplayer handles player movement.
Fixes super speed when units were "slowed"

Thanks Monarch and Xulqelyat

fix: conserve to not always working correctly

fix: Fully overwrite players array
when loading a saved game.
This fixes the case where playing a game with more players and then loading a game with less would leave you with ghost player objects that would softlock the game.
Allow multiplayer saves to be played in a singleplayer context (as hotseat).

fix: Add protections to prevent changing a player unit's faction to enemy
Thanks FfrankF, evilcuttlefish and HeyShadowPhoenix

fix: Black Coin desync on Multi
Any time getUniqueSeedString is called with globalThis.player on the server it will desync compared to clients.

fix: Show prediction markers on prediction units
This fixes the issue where cloned units wouldn't show
prediction markers because the unitsPrediction array wasn't
the one being iterated.

fix: runPredictions while player is spawning

Otherwise predictions don't update while choosing a spawn location

fix: unit attention markers persisting after death

fix: infinite mana merge exploit

Limit changeling to 1 max.
Prevent stacking teleport in the same location to spawn a bunch of changelings
and make units that recieve merge immune for 2 turns to prevent infinite mana growth

Closes #1108

[ 2024-09-27 11:31:21 CET ] [Original Post]
Runes have arrived!

Major Feature: Runes

You can now upgrade Runes in the spellbook. Runes deeply expand the possibilities of your run: For example, "Inflict Poison" adds 1 stack of poison every time you deal damage. If you're going for an archer build, this makes all of your arrows poisonous. Combine that with "Endless Quiver" which ensures that your arrow spells do not get more expensive, and you've become quite deadly! I'll leave it up to you to discover more unique and clever rune combinations to elevate your build!

Major Feature: Champions

Champions (quietly released in the last update) provide a novel challenge, especially to seasoned players. They are larger, stronger units with special modifiers (like Damage Limiter, Slime, Target Immune - and more). You'll have to be extra clever to deal with them

Change log:

Features
- Runes can be locked so that when they reroll each level (or when you manually reroll), your favorite runes will stay put so you can continue to invest in them.
- Runes have a chance to be discounted for 20% or 40% off
- Deterministic events. Events (like poison on turn end) now trigger in deterministic order. This means regardless of which order curses or blessings are added to a unit they will trigger in a sensible order. This should prevent confused expectations
- Bosses (Goru and Deathmason) now spawn as Champions in the loop levels. Yikes!! Good luck...
- Healthbars now only appear if a unit is damaged (or an ally so you can tell they're an ally). I think this makes the game a lot prettier and less cluttered especially when there are tons of units on screen. Please let me know what you think of this.
Enhancements
- Removed shader that was causing FPS drops
- Note: I have LOTS of planned FPS / Optimization improvements that will be coming in the following update.
Fixes
- Swapping with pickups no longer triggers the pickup. Thanks @Liese!
- Displace's teleport location is now unique to each player
Balances
- Bolt has been rebalanced. It now starts with 1 chain and gets +1 chain per stack
UI
- Fix menu buttons highlighting on hover in the main menu
- Fix the alignment of the caution "Self damage / will die" popup underneath queued spell


Huge thanks to all the awesome folks in the Discord who helps beta test this.
Xulqelyat, Chain, Xeno, Whisky, SquishyFishy, SPGALTRM, Liese, NoZ, Baalstrum, Sippy, TheDocisHere, and others provided TONS of incredible feedback.
And extra big shoutout to SoulMuncher who has been absolutely instrumental in developing this update.

[ 2024-09-01 14:32:13 CET ] [Original Post]
Update v1.41

This update is rather large and the big "Runes" update is not quite ready yet; but I wanted to get these fixes and improvements into your hands since it's been a while since the last update.

But this update does have some great new features! Thank you everyone for your continued support!

Change log:

Content:
- New Spell: Cursify
- New Spell: Add Ricochet
- New Spell: Add Pierce
- Split works on pickups
- New mod! DaiNekolchis Tome of Spells!
- New attributes for minibosses (Now named "Champions")
which make them much more formidible especially in the late game
- Target Immune
- Defiance
- Confidence
- Slime
- Damage Limiter
Thanks NoZ and Baalstrum

Improvements:
- Improve smoothness of camera when moving it with WASD
- Upgrades are now always available in the Spellbook via the yellow bookmark on the right
- Add Crown sprites to minibosses so they are easily identifiable
- Improved targeting prediction (#894)
- Frontload cards like "Plus Radius", "Add Bounce", and "Add Ricochet" so they can be added to the end of a spell instead of undoing the whole spell queue to put more at the beginning
- Protect user from accidentally ending turn while inventory is open. Inventory must be closed to use Spacebar to end turn.
- Show selectedUnit's prediction unit range
instead of the unit itself so that if you move them
with a movement spell it shows what their range will
be
- Lots of missing translations added
- Modifiers now have an explicit order so any given set of modifiers (e.g. Debilitate and Split) will have the same effect regardless of in which order they were added

Balance:
- Increase the number of minibosses on loop levels
- Make minibosses having multiple modifiers; probability increase drastically for each loop level
- Bolt deals more damage when more units are targeted

Music:
Normalized volume of tracks
Added "Spellmasons Theme" to soundtrack!!
(Theme plays only on the menu screen)

Sound:
Normalize all sound effects

UI:
- "Class" upgrades are now available in the persistent Upgrade Menu in the Spellbook
- Add modifier descriptions to tooltip content
- Color Blessings Gold and Curses Purple in tooltip
- Show inventory book icon glow if you are able to purchase an upgrade

Fixes:

- **BIG FIX**: unit and pickup id desync
HORRAY! This has been the cause of many-a-desync.
underworld's lastPickupId and lastUnitId are now only updated
if !prediction. This ensures that the headless server and the clients
always have synced ids.
- fix: Loading Hotseat Multiplayer games
in a singleplayer context.
Thanks Sippy for reporting!
- Modifier.Init wasn't using prediction in load unit (#823)
- Cards wont reappear after reroll within the same upgrade selection. Omitted cards reset each time an upgrade has been picked.
- Fixes an issue where player could get "No upgrades to choose from" even when there are upgrades left to get.
- Prevent showing upgrade button if there are no upgrades to choose from.
- modifier subsprites and visuals missing on load
Refactors modifier `init` to `addModifierVisuals` to better
describe what it does.
It is separate from `add` because `add` setup up state that
is still present on save/load, whereas visuals such as
subsprites or particles have to be reinitialized on load
- Fix shield and bloat not persisting through loads / mutliplayer late join
- Fix player being unable to cast while immune to freeze
- Polymorph preserves currentHealthRatio (#841)
- Clone supports pickup power property
- Fix: RecalcDifficulty no longer overrides Unit Stats
- Overriding unit stats based on source stats would cause modifiers and other stat changes to be "undone" any time the game difficulty was recalculated
- Blood Curse guarantees integer stats
- Fix an issue where the scale modifier applied by split was not changing properly with quantity
- fix: Soul Shard Owner purification from making soul shard havers invulnerable.
- fix: Consistent camera movement speed. Camera will move and lerp at roughly the same speed across all reasonable framerates
- fix Player Health/Mana bar visuals (#869)
- The value of incoming shield is now displayed during prediction
- Changes to max Health/Mana are now shown in the lower UI bars the same way they are shown in the overhead prediction bars (i.e. blood curse shows as doubling current hp and preserving max health ratio)
- Health/Mana gain visuals were swapped such that increases give a "fuller" looking bar, and decreases give an "emptier" one
- Fixed an issue where overfilling mana would always display mana cost bars, even when no prediction was running
- Fixed inaccurate and overlapping mana cost bars
- Overfilling mana is now much more clear, and you can see each stage of mana bar as it appears, instead of mana just appearing "full" until post-prediction
- The Health/Mana bars now look the same in prediction as they will after the effect occurs (predicting blood curse no longer shows hp going to full, overfilled mana displays correctly, etc. healing/damage and mana gain/loss visuals are still present)
- Fixed "sheild" typo
- fix: Player clones now deal damage
- fix: Don't restore freeze sprite
when in "freeze immune" state
Docs:
- Improve Modding Documentation (#870)
- Doc: Clarify why split does not affect max mana

[ 2024-08-09 20:06:04 CET ] [Original Post]
Patch v1.39.1

Removed cooldowns
After considering, I've determined that the idea of a cooldown itself is
against the design of Spellmasons. This was just a bandaid to
a few select spells being overpowered. I've found it better to
alter the spell logic itself (in the case of freeze to not allow stacking)
and to make them more mana expensive (in the case of resurrect)
which will prevent them from just being cast turn after turn.

Also the modifier itself can prevent the unit from being
refrozen (see freeze) which is much better than cooldowns
because it also prevents refreezing in multiplayer.

Balance: Freeze
Removes cooldown
Freeze no longer stacks

Balance: Increase Merge spell rarity

fix: Prevent empower from targeting players to prevent confusion
i18n: Clarify that Empower does not affect players

art: Add slightly new cast animation

audio: Only play "endTurn" sfx once per turn
Thanks Hazzie and Nord from Youtube for
this suggestion!

fix: Backfill stat upgrades for players who
join late.
Thanks Waterbending Squirrel!
Fixes: #567

audio: Smoothly switch songs
Don't switch songs every time a level is beaten, switch
when the song is done
Closes #805

content: Add Ultra Clone as upgrade to clone
in order to balance out the clone + merge exploit which
was mainly possible because clone with adding the clone as a target
yields exponential results when stacked. Now the basic clone does
not add clones as a target

fix: Intercept END_TURN message
and do not send the original. Send a new END_TURN message as client with playersTurnEnded attached.
(Note: this already worked except it still sent through the original END_TURN message, this fixes the original from being
sent through and only sends the transformed one through)
Resolved: #811

log: Improve error message for proper aggregation
on remote logger

experiment: MultiColorReplaceFilter
Decrease epsilon for blood golem to see if
it resolves #695

UI: Fix default "Refund" text
Before if no text was provided, none would appear for refund.

balance: Exclude Execute from starting damage spells (#807)
- Since it cannot deal damage on its own

[ 2024-06-17 01:33:02 CET ] [Original Post]
Patch v.1.38.1

Mostly fixes and quality of life improvements in this patch.


fix: rare bug where game was stuck because NPCs didn't end their turns
Big thanks to Un4o1y, Xeddar and Adriller

ref: Remove client side timeout for cards.
When there are many enemies on screen the game's fps can slow
which can cause cards to timeout which means the result of a cast may not match the prediction. This is bad.
Instead, I will just leave the timeout on the serverside
so the server will not hang.

perf: Optimize ancient attack for FPS
also optimize Blood splatter.
Thanks @Whisky

ref: END_TURN syncing
Resolves the issue where 1 player ending their turn sometimes
just progressed the turn phase without the other players being ready

i18n: Translate card rarity
Update Polish
Thanks @Whisky!

fix: Bolt radius increases for submerged units (#797)
Thanks R?c??l?sc?nc?/recoalescence

fix: Teleport pickup prediction (#787)
Fixes an issue that cause displace, teleport, and similar "set location" spells to trigger real world pickups while in prediction mode
Thanks @Whisky

fix: Primed Corpse particles not reinitializing on units that recently had them

fix: Player channeling animation while dead (#781)

content: Plus Radius can now be cast on its own (#786)
* Plus Radius can now be cast on its own
- To let players increase Urn Radius
* Add refund for plus radius fizzle

ref: Change up order of color replace colors
to see if it affects the bug where blood archers / golems aren't tinted

copy: Fix modifier name "Primed Corpse" since it is visible to players
Thanks Chumler

optimization: Save files take up less disk space

menu: Server list will be sorted by version number so servers on the latest version will be at the top

menu: Enemies are now shown in the codex

[ 2024-06-02 15:40:44 CET ] [Original Post]
Patch v1.37.0

Big thanks to everyone who have been reporting bugs on Discord! There's some significant fixes in here relating to desyncs, the "turn wont continue" bug (hopefully), and the memory leak.

Changelog:
fix: Softlock fix attempt 2
All spells now have builtin timeouts with error reporting to prevent
softlocks (where the game is working but the turn wont continue).
This *should* resolve the softlock issue or in the least tell me what's
causing it.

fix: large memory leak
HUGE THANKS to DeathmonkeyJ (Github) and @Jace (Discord) for pointing me in the right direction

fix: Force Move desync fix
All spells that use force move (push, pull, etc) should be MUCH more reliable
in multiplayer now

[ 2024-05-21 02:41:25 CET ] [Original Post]
Hotfix patch v1.36

Hello everyone!

It's been quite the week with lots of new folks joining the Discord. Thanks all for being a part of the community!

A number of players have reported irregularly getting stuck in multiplayer games where all players are ready but the game won't progress.
This update aims to fix that, but I have had a devil of a time reproducing the issue, so I am not 100% sure that it will. Fingers crossed.


Changelog

fix: Protect specific spells from potentially hanging server
Burst: 52
Bolt: 46
merge: 28
Connect: 11
Triple Arrow: 8
Multi Arrow: 4
clone: 4
Phantom Arrow: 4
meteor: 1


fix: Add end turn protection

Many players have been experiencing issues
where all players have turn ended on their clients
but the game does not progress

It seems there are multiple causes
> Re-readying up would have one of a few effects for us:
1: It unlocked for us
2: It made the noise over and over before unlocking after a 15-40 sec wait
3: It was completely stuck requiring us to save and restart the server completely (because when we would try to rejoin some players were in the game alone at the starting map even while others were still in the game)
4: A few of us had full whitescreens with a force quit required
~Wispy

This change handles Cause 1, where somehow the
clients have that everyone is readied up but the
server is missing one.
A client, when ending turn, also sends an array of
all clientIds that have ended turn.
If any of them are endedTurn == false on the
server is will end their turn.

This should prevent players from having to re-ready up

fix: NPCs casting on wrong faction units
- Thanks @Viz and @CandyKiller

ui fix: card-inspect scale
where cards had greatly varying sizes
(slash was super small)

menu: Update default ally unit outlines to be 2px
consistent with enemy default outline

fix: All bolts play at once

fix: Burst quantity damage (#736)
Stacks of burst were being double multiplied

fix: Arrows being slow to cast in multiplayer

fix: typos
Thanks to WestonVincze for contributing!

[ 2024-05-19 10:32:18 CET ] [Original Post]
Anniversary Update

It's been a over a year since Spellmasons was released publicly and it's been a wild ride! I'm so grateful for the community - tons of suggestions (and bug fixes) from Discord have been implemented in the 33 updates that have been released since launch!

This is the biggest content update to date. Enjoy all the new spells and madness!

Here's the full change log:

New Boss!
Goru: the Corpse Warlock

New Spells!
- Alchemize
- Execute
- Merge
- Meteor
- Polymorph
- Recall
- Shatter
- Soul Bind
- Soul Shard
- Stomp
- Target Curse
- Target Injured
- Empower
- Enfeeble
- Bolt
- Dark Tide
- Blood Bath
- Fling

New Music!
2 new songs in the soundtrack

New Trailer!
https://youtu.be/NNAzAQcNUXc?si=PsdDjUjowZFW0B1a

Other changes
- content: Remove cursed mana potion
because it is anti-fun.
Thanks to Kyte from Steam Community
- i18n: Save dialog, modifiers, undying
- menu: Deduplicate previousCustomUrls
- ref: Allow purple portal to be used mid-game (#653)
- fix: Upgrades work in the + levels
- fix: shadows overlapping newly spawned units
- fix: Prevent units disappearing when too close to Wall
Thank you @Viz for reporting
- mods: Remove broken explosive archer mod
- fix: Protect against MessageQueue softlock
Thanks @JCDreamz for reporting

[ 2024-04-27 02:12:44 CET ] [Original Post]
Stabililty Update

There's a big content update coming on April 27th, and this update contains all the fixes and improvements that SoulMuncher and I have been working on over the past few months while developing the new content.

Please let me know in Discord if you encounter any issues and thank you for your continued support!

Change log:

- art: Add particles to skyBeam
and reposition it slightly to better cover the player's feet
- art: Default to 1px unit outline
Unit outline can be modified or turned off in Accessibility settings.
I initially added the outline to help colorblind users distinguish between
enemies and allies (you can change the color and thickness), but I found it to be
very useful for me too as it helps distinguish units from the background so I've turned
it on to a default.
- art: Add shadows below walls
so they feel more connected to the environment.
- art: Update animated tombstone
Tombstone appears instead of a dead body when gore is turned off in settings
- art: Spellmasons play the bookIdle animation
when viewing their inventory.
Fixes bookOpen from playing every time a spell is cast in multiplayer
even if no other player is casting
- fix: poison bug
- fix: clone
Too many stacks would break the game due to the
absurd number (limit to 10 - which is still enough to practically cover the whole map).
Fix clone prediction badges, it now shows the actual number of
cloned units because they no longer overlap
- fix (IMPORANT): Synchronization bug
This one, I believe, is rather significant. It should dramatically reduce desync issues after casting where you would cast a spell and it would suddenly be "undone" as if it never happened
- fix: forceMove timeouts when multiple (#575)
force moves were added to a unit or pickup
- fix: flamestrike bug
- fix: contaminate extras
* fix: radiusBoost refactor for mods
* fix: Contaminate not spreading modifier "extras"
- fix: Targeting Unspawned Players
Fixes a bug that allowed unspawned players to be targeted, which could cause a desync in the game over state, and adds further support for additional universal targeting catches by passing underworld through as a parameter to the add target function
* Fix Target Similar Targeting Unspawned Units
* Added warning for future bug catching
* Fixed prediction discrepancy
- fix: "Good Looks" upgrade filters out Doodads now
So that choosing good looks doesn't explode urns
- fix: Units being removed for being "out of bounds"
when they were just close up against an upper wall.
Unit's center point is the center of their image, and since this game is 2D but
allow's "tile overlap" because it is appearing as isometric, the pathing bounds
are pulled up by 10 (-10) and so when checking if a units' center point is
inside a wall, we need to + 10 (down) to account for the fact that they can overlap
by 10 with a wall that is above them.
- fix: Squiggly force move lines
when multiple forces were applied to the same object.
Now forces get summed.
Also fix prediction and headless fully processing
forcemoves between units dying instead of letting all units die and then
processing all the force moves (like the regular game client always has)
- fix: await endPlayerTurn
This is not in response to a bug, but I noticed that endPlayerTurn
is async and not being awaited.
Based on a visual inspection this only effects hotseat
- fix: contaminate now spreads extra properties of modifiers (curses) such as expanded range
- Thanks to @theytookmysoul aka Wisky
- fix: Good Looks no longer explodes urns
- Thanks @Elvarien
- fix: Game soft locks if whole party is froze
- Thanks @Waterbending Squirrel for reporting
- menu: Add "recent custom server urls"
So that it is easy to rejoin a server with a custom url
- menu: Support quicksave at beginning of level
- menu: Add bookmarks to menu
to help find spells quickly by category
- menu: Style Accessibility menu so it's more organized
Add gore options to a11y menu in addition to
graphics menu
menu: Make actively selected buttons more obvious
- Optimization: makeManaTrail to lower particles
if number of trails gets large
- Optimization: Only run prediction calculations
if the player is hovering over the game space.
If they are hovering over the spellbook or toolbar,
it will not run predictions and thus not bog down
the experience of picking new spells when
the prediction calculation is hefty.
Thank you @Whisky for this idea!
- Localization: Polish
Update Polish translations with Whisky's translation
- Localization: Poison "start" -> "end"

[ 2024-04-14 14:16:36 CET ] [Original Post]
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

[ 2024-02-19 12:27:22 CET ] [Original Post]
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

[ 2024-02-17 12:02:39 CET ] [Original Post]
Update 27: 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 isnt 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

[ 2024-02-10 02:57:08 CET ] [Original Post]
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/client@1.1.3
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

[ 2024-01-13 04:20:00 CET ] [Original Post]
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!

[ 2023-12-20 12:36:57 CET ] [Original Post]
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!

[ 2023-12-08 14:11:54 CET ] [Original Post]
Spellmasons Update #24

- balance: Deathmason
- Deathmason now actually uses mana and can be prevented from spawning portals if he has insufficient mana
- Deathmason no longer casts slash
- balance: resurrect weak so that you can cast it on yourself

- Improve: joining saved games so that you automatically assume control over your old saved player character. This should resolve the issue of people joining saved games and not having control of their old, saved player character.

- optimize: Improve server lag

- Big Fix: Network messages being missed when game is alt-tabbed
- Fix: red and blue portals not getting cleaned up when they are removed
- Fix: invisible portals
- Thanks SoulMuncher and Skillo for reporting this
- Fix: Pickup bugs. Completely redid pickup code to resolve desyncs when colliding with pickups especially when using movement spells
- Thanks WildBerryBlast


Huge thanks to everyone who reported issues and gave feedback!

[ 2023-11-30 14:49:42 CET ] [Original Post]
Fixed server crash bug

This patch fixes a significant server crash bug.

Change log:
fix: Infinite server loop that occurred after you summoned
an urn and then died

fix: Cards in your inventory not decrementing in cost
when your turn ended
Thanks Matt_97 for help debugging this

fix: Resurrect Weak sometimes leaving enemy health and mana
at non-whole numbers

fix: Prevent Upgrade random number generator from showing the same upgrades if you get multiple level ups on the same level with a full toolbar

[ 2023-11-17 14:11:38 CET ] [Original Post]
Hotfix: Spell Predictions

Hotfix: Spell Predictions


Lots of users in the discord have reported issues with Spell predictions not working properly.
This patch resolves that issue and also fixes a bug on the server with movement spells not being calculated properly.

[ 2023-11-14 20:12:52 CET ] [Original Post]
Spellmasons Update #23!

Spellmasons Update v1.23.3


This update adds "Upgradable Spells". Some spells have greater forms that you can upgrade them to once you find them. Have fun discovering what's new. There's more to come in the future!

Also, find "Codex" in the main menu to see all the spells in the game (once you've discovered them!) and make sure to try out the spells in the mods!

content: Tweak arrow upgrade spell cost and rarity
content: Add slash spell upgrades
content: Add arrow spell upgrades
content: Add heal upgrades
content: Add "Resurrect" Variations
Thanks TonyFTW, Skillo and Mattmellow
content: Stacked summons make bigger, stronger units

perf: When moving with spell queued,
only call runPredictions when idle to
prevent lag while moving with spell queued
UI: Fix size of cards on smaller screens
Thanks Lemming Jesus
UI: Prevent tooltip from hiding right spellbar
Thanks LeoninoMalino from the Steam Community
balance: Make summon decoy scale in strength when
stacked like summon_generic.
balance: Remove cooldown for Summon Decoy now that AI targeting is improved and wont
target about-to-be-dead units

Thanks Chase from Discord for this idea
fix: longstanding bug with arrow spells
predicting that enemies will die and then they wouldn't die
fix: urns that had too many onDeathEvents
due to their init function not being idempotent.
Fix urn cleanup cornercase where the urn image would be
left behind (and red) due to the image being restored in a sync.
By changing Image.cleanup to allow maintaining the position x,y
so that the other onDeath events such as bloat can still use it but
the image is still cleaned up
fix: Freeze UX when player is frozen
especially by urn so that it shows the the player
is frozen even when it skips their turn
fix: Game failing to save if you save while a spell is being cast
fix: Improve saving so if you try to save during the enemy turn, it will wait until the start of your turn to save the game
fix: Bug where you're unable to join a multiplayer game after dying in hotseat multiplayer
fix: multiplayer menu bug where
when the game restarts, it reset player.isReady so it was
showing the wrong menu on esc

menu: Add Codex
menu: Add legal

[ 2023-11-13 00:01:58 CET ] [Original Post]
Spellmasons Update v1.22.4

Improvment: New experimental server build running on US-West and Europe regions. These should result in faster communication to clients. Please report any new issues with these servers on the Discord.

Performance: Improved performance when determining spell predictions. Previously when the game had a huge number of enemies, preparing to cast a large spell could cause the framerate to tank. This has been much improved. It has further to go, but the game won't slow down to a crawl when trying to cast large spells in the late game anymore.

UI: Add unit stats (health, mana, etc) to summon cards
Thanks Lemdoran for this suggestion

fix: Spells from Rene's Gimmicks not showing up in multiplayer thought bubbles
fix: Auto-rejoining doesn't work if the game has a password
Thanks Manman
fix: Summon card descriptions update
when difficulty or language changes
fix: Urns don't take poison damage
Add Doodads to action loop so that their
onTurnStart triggers which is used by poison
and other modifiers
fix: urns' additional onDeath events (such as bloat)
not working because the unit was cleaned up before
it triggered
fix: Skipping player turn on load
when you load into a saved game and choose
"join game as player"
fix: Hotseat players not getting mana back
after one player died
Thanks Genthru
fix: Not being able to capture soul ally spellmason
fix: Hotseat players not getting stat upgrades
fix: prevent calamities from affecting Urns
Thansk PandaPhilly for reporting
fix: Prevent friendly npcs from attacking
urns.
Thanks MattMellow
fix: prevent ally npcs spawning from Blue Portals
that are supposed to be used for teleporting

[ 2023-11-02 10:54:54 CET ] [Original Post]
Spellmasons Update v1.21.2

Spellmasons Update v1.21.2

Thanks to Pandize for general feedback!

feature: Teleport Trap! After level 5, at least 2 blue portals will spawn
that will allow players to teleport around the map.
Thanks Skillo
feature: Add urns that explode when damaged each with a unique effect
Thanks Skillo for this idea

balance: Increase poison base damage to 18
balance: Reduce probability of trap pickup spawning
balance: Increase number of pickups along with level size
balance: Immune units (in + levels) CAN be targeted
but cannot be damaged or recieve modifiers
(like curses)

i18n: Update Portugues Translation
Thanks to Iwashi kan

fix: Clones and split units don't provide experience
when killed
Thanks enigmaticbacon for reporting this
fix: Players that rejoin should have endedTurn set to false
so they don't miss their turn when another player ends
their turn.
Thanks Kess from Discord!
fix: Ensure saves can only be made during
the player turn so it doesn't save a corrupted game state
fix: After load, set all player.endedTurn to false
so that loading a game wont skip the player turn
if players rejoin the game in an order where the first
person to join/load had ended their turn during the save
fix: Prevent rerolling from sometimes presents the same spell
you just saw
Thanks Lemdoran
fix: valid spawn logic for blue and red portals
it was denying valid spawn for portals that were close to walls that
should've been valid
fix: Target Arrow granting infinite range if
cast standing right up against a wall
Thanks Stench and others from Discord for reporting this issue
fix: Extra stat points hack
where you get extra lvl up stat points whenever
you load the game
Thanks Salazar for reporting this!
fix: UI: Ensure spell costs are up to date in the inventory
Thanks Mattmellow and others for reporting this
fix: Prevent Deathmason brothers
from attacking immediately after spawning if the original deathmason
is slain by an ally npc.
Thanks flowkrad from Steam and others for reporting this
fix: Ensure mage classes are visible on 1080p
screen
Thanks Coaldust Numbers and others for reporting this issue
fix: big bug in random number choice function favoring certain choices over others
fix: killing a clone of a deathmason from incrementing your "games won" stat
fix: UI: Ensure spell costs are up to date in the inventory
Thanks Mattmellow and Lemdoran for reporting this
fix: Ensure Pickup's emitters follow them
if they move (like pushing a portal)
fix: Attempt to fix duplicate pickup
issue on multiplayer
where a recently triggered pickup
is recreated.
fix: if over max hp, ensure healthcost spells
don't snap hp to max.
It is unusual to go over max hp but sacrifice does it.
Thanks enigmaticbacon
fix: If spellcost is refunded cooldowns are too
Refund freeze if no targets
Thanks Kekis!
fix: Prevent deathmason death from killing all NPCs
unless it is the original deathmason. Any summoned deathmason
should not kill NPCs.
Thanks H4D3S for reporting
fix: hiding broken tooltip images

UI: Allow modifier keys (ctrl, shift, alt) in hotkeys
Thanks Lemdoran and Skillo
UI: Assign hotkeys to side bars spell slots
Thanks Lemdoran and Skillo
UI: Hide broken images in UI Prompt

[ 2023-10-25 18:28:20 CET ] [Original Post]
Spellmasons Update v1.20.0

feature: On loop levels, half of the enemies are
immune for 1 turn.
This makes levels after the deathmason a better challenge

balance: make Necromancer class summon spells 30% cheaper
Thanks Antonio! and Expresso Depresso and others for feedback

balance: Temporarily remove bloodmason class
until he can be properly balanced.

improvement: Ally deathmasons now summon
blue portals which heal you if you walk through them instead of
hurt you like red portals do. (If you do not walk
through them, they still spawn allies)

fix: Prevent Deathmasons from health-sapping each other.
Thanks Antonio! for reporting this!

fix: Calamities not increasing health and stamina stat of enemies
Thanks Antonio! for reporting this!

fix: Spawn locations for deathmasons' brothers

fix: Cloned player blood cursed
also secretly blood cursed player without reporting in UI.
Thanks MeBeDerp for reporting this!

fix: Enemy priest resurrecting Player
and changing player's faction.
Thanks Ian for reporting!

fix: deathmasons teleporting to the same portal
causing them to overlap

UX: turn off player damage sfx for timemason
so it's not annoying

UI: Add TIMEMASON_DAMAGE_AMOUNT to timemason card
UI: Fix size of mana badge
modified by usage when large in card-inspect
UI: Limit uiZoom lower bound to 0.1
Thanks Hagbard from Discord for reporting the issue

[ 2023-10-09 19:49:19 CET ] [Original Post]
New Spellmason Classes!

Spellmasons Update v1.19.1


balance: Increase difficulty of early levels
balance: Make Ancients cost more in the level budget for spawning
balance: Increased damage of poison spell from 10 to 15 damage per turn

content: Add Mage Classes
content: Revise per level upgrades to be stats points rather than perks
content: Add 2nd stage of Deathmason battle
content: Change to lvl up / experience system instead of scroll pickups

performance: Add perf option to disable emitters
Thanks to @XzeroAir on Discord

art: Fix target similar and connect lines
animating father than they should
UI: Make level up progress bar in tooltip
UI: Add victory stats to class selections

fix: Bug where ancients
spend mana per target instead of per cast
which caused their mana to go negative at times.
Thanks @Expresso Depresso for finding this bug!
fix: Undesirable smoke on pickups
fix: Priest should resurrect ANY dead unit into their faction
not just corpses of allies

[ 2023-09-15 16:07:13 CET ] [Original Post]
Spellmasons Update v1.18.0

- balance: Prevent deathmason from purifying self
- balance: change decoy health from 20 to 70
- Thanks Krowbar for this suggestion!

- UI: Cast Range perk displayed as % instead of meaningless number
Thanks Krowbar for this suggestion!
- menu: Show mod contents in description
- UI: Add mod name to cards

- fix: Make lastWill immediate so it doesn't
cause desync on multiplayer
- fix: mods registering multiple times
which messed up probabilities (especially with pickups)
- fix: Prevent allowing rejoin to failed game
by changing difficulty.
Thanks Krowbar for finding this bug!
- fix: Prevent Split players from being permanently
split when they die
Thanks to sJacob for pointing this bug out!

[ 2023-08-03 13:30:32 CET ] [Original Post]
Improved AI - Improved Difficulty

- Feature: Smart Targeting
Improve AI targeting so that AI battles are more realistic.
AI units will not all focus on the closest enemy and overkill them
making AI battles take forever.

- balance: Make summon spells cost less mana
- balance: Keep Capture Soul spell after use
Capture Soul no longer disappears from your spells when used
- balance: When Ancients spawn, spawn more of them.
- balance: Higher difficulties now make harder enemies spawn on earlier levels and allows for spawning more enemies than it would otherwise

- i18n: Add German translation from Feilz.

- accessibility: Touchpad move keypress support
https://steamcommunity.com/app/1618380/discussions/0/3810656323972884104/

Feel free to join our Discord to let me know what you think of the update! Spellmasons Discord

[ 2023-07-21 19:49:33 CET ] [Original Post]
Rene's Gimmicks

Rene's Gimmicks adds 5 new spells:

  • Burning Rage
  • Caltrops
  • Sadism
  • Summon Trap
  • Vampire Bite
Thank you @Edeusz from Discord for your awesome mod!

This update also adds
- Difficulty options in multiplayer
- A fix for Target Arrow allowing summoning out of bounds (Thanks @Monarch for reporting this)
- Fix Fast Forward from Wode's Grimoire for some advanced spell combinations

[ 2023-06-28 14:05:36 CET ] [Original Post]
Gripthulu

content: Add new unit: "Gripthulu"
Thanks MrMarblz and scojbo for encouraging me to resolve issues with "enemies that move players"
content: Add spell: Explosive Arrow

balance: Ancient can attack 3 targets simultaneously (previously only 1)
balance: Adjust unit spawn budget for multiplayer
so that there will start to be more enemies in games of 3 players and beyond
balance: Make Ancient cheaper in level spawn budget
balance: Fortify so it stacks 50%, 75%, 87.5%...
Thanks TonyFTW

src: Resolve desyncs
between spells cast during player turns

fix: Resolve some users getting a blank page in the mods menu
fix: Spell cooldown decrementing in multiplayer
right after you end turn which allowed casting it again.
Thanks The Joe for this bug report
fix: Target Cone odd targeting when stacking
Thanks MuditaMan
fix: (spell) Prevent suffocate from ever
increasing turns left to live.
Thank you scojbo
fix: Scroll disappear particles showing
when hovering prediction spell (undead blade) over portal.
Don't check if should spawn portal (or check game over) for prediction cast
fix: Priests getting damage boost from Calamities
Also add stamina as calamity to boost enemies
Thanks TonyFTW
fix: Able to kill unspawned allies with targeting spells.
fix: "F" to see range when spawning
Thanks to MrMarblz for pointing this out
fix: Aberrant UI line when simulating force move
into liquid.

Feel free to join our Discord and let me know how your experience with Spellmasons has been!

[ 2023-05-19 12:14:22 CET ] [Original Post]
Wode's Grimoire

Spellmasons Update v1.14.0 - Wode's Grimoire


The first community mod Wode's Grimoire is now available in Community Servers. Huge thanks to Blood Spartan and his unnamed friend who did the art for this incredibly fun mod! You can try it now by clicking on "Mods" in the main menu and enabling it.

If you are interested in making your own mod, you can checkout my modding playlist on youtube https://youtu.be/qyGxK-tdSqs or the modding repository on github https://github.com/jdoleary/spellmasons-mods.

Changes in this update:
- content: Add new unit: "Ancient"
- content: Add new type of Calamity "Stat Calamity" that makes enemies more dangerous

- balance: Continue to allow gaining perks after looping
Thanks S4m for criticism that led to this balance

- src: Improve statCalamity percentages
- src: Choose available statCalamities based on
which units are in the current level so that the next level has
increased difficulty due to calamity.
- src: Add mana refunds for slash
and target_arrow without targets

- UI: Add attack range to tooltip
Add words ("mana", "health") to tooltip
- UI: Add visible level count UI when inventory is open to the top right corner.
Thanks MrMarblz for this suggestion!
Note: Levels past the Deathmason are now displayed with a trailing "+"
to denote that it's a loop level
- UI: Make "Spawn instructions" less obtrusive after level 3. Thanks Mr. Marblz for this suggestion
- i18n: Translate stat calamities

- api: Add pixi particle emitter to modding api

- fix: Prevent Last Will from stacking like the card says it doesn't.
Thanks to MrMarblz for pointing this out
- fix: Fix link to source code in Mods menu
- fix: desync issue
where player loses control of themself.
This was reproducable by having 2 players in a multiplayer came, killing one unit and then
casting Harvest on them. Then the underworld's units array would be
filled with a bunch of units that weren't cleaned up and some were
the player units that still shared the same id, but these 2 changes (changing the
id's of cleaned up units) and removing cleaned up units right
after a sync resolves this issue.
- fix: Support player thought spell icons from mods
Modded icons still have to be manually added to the sprite sheet.
- fix: Add SYNC_SOME_STATE
after every SPELL to attempt to remedy desync snowballing
that sometimes occurred on the same player turn when
multiple spells are cast by having the server only send a
SYNC_SOME_STATE message after every SPELL message
- fix: Archer movement bug
Thanks to scojbo and others (not recorded) for mentioning this issue
- fix: statCalamities not applying double whenever a 2nd or beyond
is chosen. When a new statCalamity is chosen, only apply that one an
extra time to already existing units
- fix: Prevent unspawed players from being targeted by ally magic.
This only impacts multiplayer. Thanks mrman227 and others to reported this issue
- fix: Allow Capture Soul for minibosses
Thanks MrMarblz for pointing this out
- fix: Ghost Archer doing 20 more damage than predicted. Thanks Jackson for pointing out this bug!
- fix: Admin "Regenerate Level" command
- fix: spell mana cost calculations
To allow for mana from manasteal to be used in the same spell.
This uses what mana is left from the prediction player
to see if they have enough mana to cast in the first place
Thanks TonyFTW and JamesGamesA_Lot
- fix: Desync caused by sending initialTargetedUnitId
or initialTargetedPickupId as array. They should be numbers.
Also; somehow in javascript `3 == [3]`

[ 2023-05-01 18:31:20 CET ] [Original Post]
Necromancer's Rejoice!

- Spellmasons source code is now public. Check it out at https://github.com/jdoleary/Spellmasons
- Balance: Add cooldown to some cards to make players wait a number of turns before casting them again
- Balance: Make fortify more meaningful
- Balance: Made capture soul's cards more affordable (Necromancers rejoice!)

- fix: hotseat multiplayer skipping player turns after any player dies
- fix: hotseat multiplayer loading and forgetting which spells were in the toolbar
- fix: Once you hit 0 health from using Death Wager you can no longer cast any spells. Thanks ObsuredCrow
- fix: errors in Copy
- fix: issue where game wouldn't change turn phase if a non spanwed player was disconnected from the game in multiplayer
- fix: Deathwager allowing player health to go to 0 and preventing them from casting (now it won't let you cast it if you have only 1 health) - Thanks ObscuredCrow
- fix: "Insufficient Mana" warning to allow for spells that give you mana to affect the chain. For example, if you mana steal in a chain of spells you are now able to use that new mana in the rest of the chain - Thanks MuditaMan for reporting this issue.

- i18n: fix: newlines messing up localization for some languages

- UI: Add cooldown badge to cards that have a cooldown
- UI: Fix alignment of modifier icons in tooltip

- Menu: Add "Source Code" link to the Mods menu to take players to the github

- Mod: Expose Events.ts in API - Thanks Blood Spartan
- Mod: Allow F12 key to open console at any time

[ 2023-04-14 18:44:55 CET ] [Original Post]
Fixes mods not allowing multiple spritesheets - other misc. fixes

Spellmasons Update v1.12.0


- Thanks to the following community members for reporting issues or making suggestions included in this update!
  • Blood Spartan
  • Vivid Empress
  • MrMarblz

- Quality of Life: Speed up target_kind

- fix: Prevent choosing calamities that you've already chosen
- fix: Protect against unit being loaded in with null stamina
- fix: Spell displace sometimes pushing enemies into walls
- fix: Keep perks fresh when user is selecting multiple
perks on one level, which can happen if player is joining a game late.
- fix: Perk labeling
- Fix: calamities not being given after you run out of spell upgrades

- UX: Don't show player thoughts when hovering over non-game space such as inventory or toolbar.
- mod: export cards/util to API
- mod: mod loading bug where only one mod with a spritesheet could be loaded or else it would error out

[ 2023-03-31 20:32:22 CET ] [Original Post]
Improved unexpected disconnect handling, fixed hotseat multiplayer bugs and more

Spellmasons Update v1.11.0


Thanks to Madgod, Spud Bud and Expresso depresso from Discord and Expirium from Steam Forums for reporting issues that have been resolved in this update!

Improvements:
- Language Translations: Add missing translations in multiplayer menu and other miscellaneous places
- src: Auto save game on accidental network disconnect so players don't lose their progress
- tutorial: Skipping Tutorial also skips all Unit introductions
- UI: Move player spells under their perks since the spells list can get rather long
- menu: Improve Disconnect handling
- Fix: Issue where Disconnect View doesn't show up if you are in the lobby when the server disconnects
- Fix: Issue where if the server disconnects when you are in the lobby and then you ready up the map will be out of sync and you'll see units off map
- Ensure that auto rejoin will only join an existing room and not host a new room if the server crashes. This resolves the issues where players would suddenly and unexpectedly get kicked back to level 1. Now if the server crashes players can resume where they left off from the autosaved backup (though they will have to manually load the backup in a new lobby).

Bug Fixes:
- fix: Prevent Hotseat Multiplayer from getting stuck in the Lobby Menu
- fix: Not enough portals bug in Hotseat Multiplayer, now if one player enters a portal, it will just move on to the next level.
- fix: Prevent "smoke" from cursed potions from emitting during a spell prediction involving Last Will
- fix: Insufficient Mana spell from actually casting on Server but not on clients resulting in desync
- fix: calamity miscalculation in multiplayer where the calamity options would be chosen based on which player last cast instead of each individual player
- fix: Poisoner AI
Previously, it was trying to move closer to a different
unit than it was targeted which resulted in weird behavior where it
would sometimes not attack.
- Fix: UI tooltip showing last selected unit gif
even when pickups are selected
- copy: Fix typo in multiplayer error message.

[ 2023-03-21 12:04:14 CET ] [Original Post]
Multiplayer Potion / Pickup bugs fixed

Spellmasons Patch v1.10.1


- fix: Target Arrow allowing infinite cast range
- Thanks to hexingMagus from Discord for reporting this
- fix: Potions duplicating their effect multiple times
- Thanks Jacobzeba01 and Madgod from Discord for reporting this
- fix: Issue where multiple levels would be generated simultaneously resulting in enemies appearing out of bounds
- Thanks Jacobzeba01 for reporting this
- fix: Prevent Ally Priest from adding Summoning Sickness to resurrected player unit which made the player lose their next turn
- Thanks Firecat from Discord for reporting this
- fix: Prevent Burst from timing out if cast on only dead units

[ 2023-03-13 17:33:23 CET ] [Original Post]
Harder Endgame, Perk Balancing & More

Spellmasons Update v1.9.1


This is the first "content" update since launch! I finally have balanced the perks so the end game isn't too easy and have added "Calamity" Upgrades: after you beat the Deathmason, rather than picking perks you pick "Calamities" which weaken you instead of empower you. Now, continuing on past the Deathmason will become harder and harder. How far can you make it before you perish?

Also, I'm excited to announce that I'm working with Spellmason's artist again to produce brand new spells and enemies for a future update!

Changes in v1.9.1:
- content: Restore Contaminate Spell
- content: Add Target Arrow Spell
- content: Add Cursed Mana Potion
- content: Last Will yields a higher than usual probability of returning cursed mana
potions
- content: Introduce Calamity Perks after beating the Deathmason

- balance: Flat rate perks instead of %s

- AI: Improve ally Spellmason AI behavior so it will pursue and attack enemies

- balance: Make freeze and debilitate take longer to return to default mana cost.
Thank you Scojbo from Steam for this recommendation

- translations: Implement language translations for perks and add misc missing translations

- fix: Stop dropping scrolls once players have all the spells
- fix: Protect against red portals spawning player out of bounds
Thank you AlienSmoke from Discord for reporting this bug
- fix: Burst so that it uses the latest caster position so it will combine properly with movement spells such as dash
- fix: Dark Summoner explanation to match new behavior

[ 2023-03-10 15:59:47 CET ] [Original Post]
Small bug fixes

Resolved "infinite spell upgrades" bug
Resolved bug where players could skip multiple levels when going through a portal

[ 2023-03-07 13:44:43 CET ] [Original Post]
Desyncronization Improvements and Gameplay balances

Spellmasons Update v1.8.0


I have high-hopes for the desync fixes in this build. I think it will resolve many of the desyncs that people have been encountering. Please continue to report any desync issues that you encounter in our Discord channel - the reports so far have been monumentally helpful in uncovering these issues. I have still detected a few minor desync issues but as of this update I, personally, have not found any remaining major issues.

Thank you to everyone who messaged on Discord to report issues and thank you all for your support!

Changes in v1.8.0:
- gameplay balance: Dark Summoners
so they start with 40 mana out of 60 so it takes them
one turn before they can cast and make them regen mana slower.
Thanks to Sander and Shurimoo for the suggestions
- gameplay balance: Dark Summoner summons
Dark Priests and Mana Vampires instead of more summoners
to prevent overpopulation from crashing the game

- Translations (i18n): Add Japanese and French and Korean
- Thanks to Cie, Skornett and Vedmin_Studen for the translations!

- refactor: Scrolls
Scrolls still trigger the "pick upgrade" screen, but they will no longer disappear after a number of turns have passed. This should resolve numerous issues encountered with scrolls.

- fix: desync: Update lastUnitId when loading Player
- fix: Extra desync protection, send lastUnitId along with SYNC_PLAYERS message
When lastUnitId is out of sync it opens the possibility of a desync
where there can be multiple units that share the same ID which can
result in different results on different clients if one client has the
shared id bug and another client does not.
- fix: Killing ally player allows scroll to drop
Scrolls will only drop when killing enemies now
- fix: menu: Fix blank mods screen
- fix: Bug where freezing yourself would result in
you missing 2 turns instead of one because
your turn got ended before the modifier got added to
your unit which meant when the onEndTurnEvent fn ran,
there was no freeze modifier to remove and so it didn't get removed
until the next turn.
- npm: @websocketpie/client@1.0.0
Upgrade wsPie client so that it doesn't handle client messages immediately by default.
Client messages will bounce off the server before being handled to
alleviate desync issues
- optimize: Throttle PLAYER_THINKING messages
Prevent messages from sending with no cardIds (unless it's clearing a previous thought)
Before this change the server was being inundated with messages because
every client was sending a player_thinking message on every mouse move

- UX: Give players immediate feedback if they send
SPAWN_PLAYER while other messages are still processing
- UI: Fix updating unit health and mana bars
at the start of player turns and after ending player turns.
This is triggered manually so that the player doesn't have to move their
mouse to get the updated prediction UI

[ 2023-03-03 18:12:22 CET ] [Original Post]
Modding and Hotseat Multiplayer are now available!

Spellmasons Update v1.7.1


Two long awaited features have arrived: Mod support and Hotseat Multiplayer!

My next priorities will be to improve the end-game difficulty curve and to continue to work on fixes (desync issues and more).

Changes in v1.7.1:

- feature: Add mod support for Units, Pickups, Spells, Art, Audio
- Supports singleplayer, multiplayer, saving/loading games with mods
- feature: Add Hotseat Multiplayer so players can play together on a single computer
- Supports saving/loading games with hotseat multiplayer

- UI: Add scrolling to spell queue box for super long spells do it doesn't cover too much of the screen
- UI: Ensure "Game Over" button is always visible even in cases where stats are super tall.
- UX: Increase speed of "Slash" for super long combos
- UX: Limit how many visual stacks of "Rend" animate to prevent the player from having to wait too long for a super long "Rend" combo

- fix: Prevent player's turn from ending mid cast. This addresses the desync that occurred when a player would resurrect themself at the end of a spell that killed them.
- fix: Prevent game over screen from popping up if you resurrect yourself
- fix: Gold circle under player character's feet not showing up sometimes

[ 2023-02-17 17:26:14 CET ] [Original Post]
v1.6.1 Update

Spellmasons Update v1.6.1


- fix: Desync occurring anytime "slash" was followed by a spell that took remaining health into account (such as "Bleed" or "Capture Soul") on multiplayer
- fix: Fix desyncs involving spells' initial targets
- fix: Deathmason crashing the game after resurrecting him
- fix: Issue with Deathmason's red portals
- fix: prevent loading corrupted savefile
- fix: enter portal crash loop
- fix: Only living units can acquire pickups
- fix: Skipping a level when an NPC ally finishes a level while you're dead

- AI: Make ally AI Spellmason follow you rather than pursuing enemies

- balance: Prevent cloning scrolls (I want to do something cooler with this in the future when you attempt to clone a scroll to reward players for being creative but for now I just have to prevent it because it totally breaks the balance of the game)

- UX: Improve explanation if server is behind in version
- UX: Add special message for when servers are down

[ 2023-02-09 14:02:50 CET ] [Original Post]
v1.5.2 Update

Spellmasons Update v1.5.2


- balance: Units that remain in liquid at the end of their turn will take damage again
- balance: Make ranged units move out of liquid once it's their turn

- fix: Player sometimes clicking on spell upgrade and not getting it
- fix: "Target Similar" spell so it matches units of the same faction as the initial target (prevents accidentally targeting allies)
- fix: Desync issue where clients experienced random number generation drift
- fix: Add 70 character limit to player names
- fix: Make Deathmason's particles disappear when he dies
- fix: Prevent "Conserve" from being able to kill you
- fix: Issue where under some circumstances players could pick more than one spell upgrade for a single scroll pickup (was known to happen when a whole lot of enemies were killed at once and no enemies remained on the level)
- fix: Sync health, mana, and stamina at the start of every turn (this fixes the issue where some changes to health/mana/stamina weren't reflected in the bars until the user moved their mouse)

- UX: Add glow to floating toolbars when dragging a spell to denote that they are available to recieve a spell
- UI: Prevent "no more spells" message from taking too long to clear out in late game after you clear a large number of enemies
- UX: Prevent camera from snapping to the center of the map after player dies

[ 2023-02-07 12:57:23 CET ] [Original Post]
v1.4.0 Update

Spellmasons Update v1.4.0

2/5/2023

- fix: Resolve portal not spawning on tutorial level
- fix: Prevent the camera from snapping to center of the map after player death

- UX: Delay game over modal on death so it does not obscure how the player died

- feature: Any unit (including the player) that remains in liquid at the end of their turn will take damage from that liquid again

[ 2023-02-05 12:26:04 CET ] [Original Post]
v1.3.1 Update

Spellmasons Update v1.3.1

2/4/2024

- Feature: Support auto reconnect attempts when client loses connection to the server
- Quality of Life: Increase arrow speed when firing an absurd amount of arrows (thank you Omni from Discord!)

- fix: **significant** Pickup (portals, potions, etc) synchronization by sending pickup creation over the network and stabilizing pickup ids
- fix: "Target Kind" spell so it wont target you or allies
- fix: Deleted save files getting restored after reboot
- fix: Localization screen not showing all language options on some resolutions
- fix: When a player dies, their turn is now ended automatically

[ 2023-02-04 13:16:19 CET ] [Original Post]
v1.2.0 Update

Spellmasons Update v1.2.0

2/3/2023

My priority has been resolving the multiplayer sync issues so that people can play reliably together online without experiencing issues. This update includes a significant fix regarding the sync issues but there is more to come before it will be perfect.

Thank you to everyone who has contributed to bug reports and suggestions in Discord!

Improvements and Fixes

- fix: Overhaul unit synchronization issue. This will address many (but not all) of the synchronization issues people have been experiencing in multiplayer
- fix: Pickup synchronization issues that resulted from v1.1.1
- fix: Summoner appearing submerged even after he teleports out of liquid
- fix: Another sync issue with "Bleed" spell causing the server to pause for a short time
- fix: "Connect" spell prioritizing the wrong unit / pickup / corpse connections
- fix: Multiple targeting spells not combining properly
- This is a regression bug introduced in v1.1.1. With it fixed, now spells like "target cone + push + target circle" will work as expected

- UX: Limit length of multiplayer thought bubbles so they don't cover too much space if an ally is casting a large spell

- feature: Re-enable Loading saved games in Multiplayer
- Note: This feature is still a little clunky if you are rejoining a save where the same players are not present. It allows you to assume control of a different player character while in the lobby if, for example, you were to load your save game on another computer or with different friends than you saved it with.
- I expect Loading multiplayer saved games may not work perfectly, but I put it back in so people can at least try it. Please let me know in Discord if you encounter any issues with it

- Quality of Life
- Increase speed of high quantity arrows so the spell animation doesn't last too long

- Language Translations: Add support for () zh-CN and () zh-TW. Thank you Cie from our Discord Community
---
I have a future update planned for the spell system that will ensure reliable synchronized results between clients every time - this will become available in the next update (v1.3) and I believe it will be the last of the major fixes needed to resolve server reliability so stay tuned!

[ 2023-02-03 11:49:18 CET ] [Original Post]
v1.1.1 Bug fixes and Improvements

Spellmasons Patch Report v1.1.0

2/1/2023

The biggest issue reported after launch was the desyncronizations in multiplayer servers (mostly in Community Servers, rarely in LAN servers). I have found and fixed a few specific issues causing desyncs; however, I'm not fully confident that the desync issues have been fully fixed - as I have been unable to reproduce the issue in my own multiplayer testing. Please report any further issues you find in our Discord channel. https://discord.com/invite/q6sUCreHeJ

Thank you to everyone for being understanding as I work through these issues. It is my top priority to provide a reliable experience where you can enjoy spellcrafting with your friends and I am confident the server issues will be fixed soon.

I have also resolved a good number of much simpler issues described below.

Improvements and Fixes

- balance: Remove Nullify spell because it was way too powerful in the endgame (I may rethink a way to reintegrate it later)
- balance: Increase enemy difficulty after "looping" (after level 12)
- balance: Increase clone expense scaling (it now takes longer to return to base mana cost)

- menu: Add link to "How to Host" youtube video in multiplayer menu in case you'd like to host your own server
- UX: Make WASD camera speed relative to zoom level for more precise camera control

- improvement: Handle multiplayer thought bubbles concurrently. They no longer wait until other players are done casting to be processed and visible to the other players.
- optimize: mana steal particles

- fix(Multiplayer sync issues): Resolve "Rend" spell timing out
- fix(Multiplayer sync issues): Resolve potion pickup discrepancies
- fix(Multiplayer sync issues): Resolve red portal spawn locations and teleport locations
- fix(Multiplayer sync issues): Resolve player location discrepancy between clients and server (off by decimal values)
- fix: Prevent multiplayer server crash after quitting a game when you have living allies and all enemies are dead
- fix: Prevent Deathmason red portals from overlapping which could cause more damage to the player character than expected
- fix: soundtracks overlapping bug
- fix: "0.1%" to "10%" on Fortify spell description
- fix: Remove Priest unit's unused Damage stat
- fix: Prevent ally Deathmason from killing you with "Sacrifice"
- fix: Ally Deathmason now spawns new enemies on the correct faction
- fix: Prevent miniboss priest from going into negative mana
- fix: target + movement spells not combining properly
- fix: ensure particle emitters are cleaned up properly
- fix: Sometimes not enough Perk choices generating
- fix: Prevent ending your turn before you choose a spawn
- fix: Spell upgrade choices not refreshing between new games
- fix: "Ready" button not working in lobby if you quit and rejoin game
- fix: Allow overwriting save files with the same name rather than keeping duplicates
- fix: Temporarily disable "Contegous" until it's reliablity can be assured under any circumstance

[ 2023-02-02 11:39:17 CET ] [Original Post]

Minimum Setup

  • OS: Ubuntu 14.04. Fedora 24. Debian 8
GAMEBILLET

[ 6520 ]

3.75$ (85%)
34.59$ (42%)
16.79$ (16%)
26.65$ (11%)
3.93$ (21%)
20.72$ (17%)
7.07$ (12%)
16.57$ (17%)
12.42$ (17%)
4.95$ (17%)
4.87$ (19%)
4.19$ (16%)
29.02$ (17%)
16.57$ (17%)
4.95$ (17%)
8.19$ (18%)
25.19$ (16%)
26.65$ (11%)
13.34$ (11%)
24.87$ (17%)
16.57$ (17%)
49.77$ (17%)
13.34$ (11%)
24.87$ (17%)
24.87$ (17%)
5.15$ (83%)
33.17$ (17%)
17.75$ (11%)
12.59$ (16%)
4.07$ (18%)
GAMERSGATE

[ 2504 ]

1.5$ (70%)
0.5$ (75%)
0.68$ (91%)
0.85$ (83%)
1.84$ (74%)
2.76$ (86%)
2.03$ (86%)
1.02$ (74%)
0.51$ (91%)
1.7$ (91%)
1.84$ (74%)
14.88$ (70%)
0.6$ (91%)
1.19$ (83%)
1.91$ (87%)
0.75$ (81%)
0.9$ (91%)
1.28$ (87%)
1.24$ (89%)
2.55$ (91%)
1.84$ (74%)
8.49$ (58%)
1.5$ (92%)
1.31$ (81%)
5.1$ (66%)
0.6$ (91%)
0.43$ (91%)
0.43$ (91%)
3.06$ (74%)
1.58$ (77%)
MacGamestore

[ 4798 ]

2.24$ (85%)
1.99$ (80%)
38.99$ (13%)
1.09$ (84%)
13.99$ (7%)
1.49$ (85%)
3.74$ (75%)
27.49$ (8%)
1.28$ (87%)
17.49$ (13%)
3.99$ (73%)
4.89$ (88%)
7.99$ (84%)
1.19$ (88%)
1.19$ (76%)
1.19$ (88%)
3.99$ (90%)
1.19$ (76%)
0.79$ (84%)
0.99$ (80%)
3.99$ (80%)
6.24$ (75%)
0.99$ (90%)
31.99$ (20%)
1.39$ (90%)
67.19$ (16%)
1.04$ (85%)
6.99$ (86%)
2.09$ (70%)
1.19$ (91%)

FANATICAL BUNDLES

Time left:

356215 days, 11 hours, 20 minutes


Time left:

356215 days, 11 hours, 20 minutes


Time left:

4 days, 18 hours, 20 minutes


Time left:

0 days, 18 hours, 20 minutes


Time left:

10 days, 18 hours, 20 minutes


Time left:

21 days, 18 hours, 20 minutes


Time left:

24 days, 18 hours, 20 minutes


Time left:

25 days, 18 hours, 20 minutes


HUMBLE BUNDLES

Time left:

5 days, 5 hours, 20 minutes


Time left:

5 days, 12 hours, 20 minutes


Time left:

6 days, 12 hours, 20 minutes


Time left:

6 days, 12 hours, 20 minutes


Time left:

8 days, 12 hours, 20 minutes


Time left:

13 days, 12 hours, 20 minutes


Time left:

15 days, 12 hours, 20 minutes


Time left:

20 days, 12 hours, 20 minutes

by buying games/dlcs from affiliate links you are supporting tuxDB
🔴 LIVE