1. Spellmasons
  2. News

Spellmasons News

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!

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!

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

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.