1. Spellmasons
  2. News

Spellmasons News

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

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.

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

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

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