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 ]
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!
- OS: Ubuntu 14.04. Fedora 24. Debian 8
[ 5589 ]
[ 1485 ]