





🌟 Special thanks to our amazing supporters:
✨ $10 Tier: [Geeks Love Detail]
🌈 $5 Tier: [Arch Toasty][Benedikt][David Martínez Martí]
Patch Notes - Version 1.54.0 Balance Changes
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!
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:
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!
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
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.
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.
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
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
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
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
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!
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
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"
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
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
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
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
- 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!
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!
- 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!
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
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
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
- 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!
- 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
Rene's Gimmicks adds 5 new spells:
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!
- 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
Resolved "infinite spell upgrades" bug Resolved bug where players could skip multiple levels when going through a portal
[ 5971 ]
[ 1959 ]
[ 1817 ]