Caves of Qud has been in development for over 15 years, but it’s finally nearing its 1.0 release later this year. The team at Freehold Games rolled out its final major update before the 1.0 release, the Spring Molting update. With it comes an overhauled UI designed to make the roguelike much more accessible. Those who have been experiencing Caves of Qud since it entered Early Access many years ago will likely find the update significant. More importantly, the UI overhaul makes using a controller feel natural, which means it’s an excellent game to play on the Steam Deck. Expect even more polish to the UI heading into launch.
Along with the new interface, Caves of Qud now has support for Steam Cloud saves, so players can move between PC and Steam Deck seamlessly. The team has also refreshed the starting town of Joppa, giving it the same lived-in texture as the rest of the world. Hundreds of new sound and visual effects have also been added, along with 40 new achievements, new narrative touches, major bug fixes, and general performance improvements. Veterans who prefer the text-based UI can turn off the modern UI elements in the game’s options.
From now until Caves of Qud’s 1.0 launch, the team wants to focus on two main objectives: finishing the main quest and creating a more hands-on tutorial. Caves of Qud currently doesn’t have a 1.0 release date, but it will exit Early Access in 2024.
You can see the Spring Molting update trailer and the full patch notes below.
Caves of Qud Spring Molting Update Trailer
Spring Molting Patch Notes
Quick note on saves
Old games aren’t compatible with the Spring Molting patch, but you can finish them out before you update. From Caves of Qud in your Steam library, go to Preferences > Betas > “206.78” for the previous branch.
UI
- We added an entire new UI. (ie, we completed work on the modern UI, for folks who’ve been following our progress). More polish will be coming over the next several weeks, but all the functionality is there.
- There are too many changes to fully document, but here’s a partial list of new screens: trade, quests, message log, character sheet, skills, equipment & inventory, tinkering, game summary, every journal tab, status effects, reputation, world generation, interact nearby, books, in-game terminals.
- The new UI has full keyboard, mouse, and controller support.
- The new UI plays natively on handhelds like Steam Deck.
- Added a search bar to relevant screens.
- Added a system menu button to the top-right of the main play screen.
SAVES
- Added full support for Steam Cloud saves.
- Vastly improved the performance of saves and loads.
- Greatly reduced the number of files per save.
- Greatly reduced save size.
- Saves are now more resilient towards breakage, from mods or otherwise.
- Saves now kept in the \Synced subdirectory, and unsynced files are kept in \Local.
- Multiple attempts are now made to delete save games that are in use by another process.
WORLD
- We refreshed the starting village of Joppa.
- Added a new apothecary: Nima Ruda.
- Replaced Warden Ualraig with a more fleshed-out version: Warden Yrame.
- Gave all major NPCS new dialog and new descriptions.
- Widened the range of artifacts that can be turned in to Argyve. Concurrently, we gave some true kin castes fewer starting trinkets.
- Made some significant changes to O Glorious Shekhinah! These changes carry through to the generated village starts, and in fact are slightly different in each village type.
- Gave the village a makeover, with several new walls, pieces of furniture, and monuments.
- Joppa NPCs now point you to questgivers, like the villagers of dynamic villages do.
- We refreshed the Naphtaali faction and culture.
- Replaced or renamed several Naphtaali. Here’s the new roster of creatures: Naphtaali forager, Naphtaali tinker, Naphtaali nimrod, Naphtaali jeer, and Naphtaali sap.
- Replaced chrome idols with unplanished godheds, and their legendary counterparts, planished godheds.
- Refreshed woodsprogs and added them to jungle populations.
- Added Erah the ciderer to Kyakukya.
GAMEPLAY
- Strong feelings creatures have due to actions you take (such as attacking them) now weaken over time instead of reverting suddenly when a map is unloaded.
- Creatures belonging to multiple factions now take your reputation with all those factions into account when determining their attitude toward you.
- Creatures no longer ignore changes to your faction reputation if they have a personal opinion of you.
- Companions no longer revert to their base attitude when they lose track of their leader.
- In general, we made the attitude system governing creature AI much more robust and fixed many of its long-standing bugs.
- Creatures now get mad at you if you tell your companions to attack them.
- Added a new piece of furniture: electric generator.
- Tables randomly have items. on them more often.
- Fixed Yurl having way too much ammo.
- Removed the extraneous grazer golem.
- Creatures no longer get saves vs. dreamcrungle gazes.
- Lampreys no longer wake up from a nearby creature calling for help.
- Hardpoints and Middle Hardpoints are no longer selected as metachrome slots.
MISC
- Added 40 new achievements.
- Added many, many new visual and sound effects.
- Looping music tracks now play seamlessly.
- Added an option to disable interface sounds (Opetions > General > Interface Sounds).
- Made some alterations to the track that plays during Reclamation.
- Added an option to disable text particle effects (Options > General > Use Text Particle VFX).
- Made some tweaks to hindren and mopango dialog.
- Refreshed and polished the dynamic wall generation system used for villages (e.g., “dragonfly chitin tent”)
- Refreshed and polished the display names, tiles, and descriptions of uindentified artifacts and partially identified artifacts.
- Added some new trinkets: Added bubble level, spiral iron, and salt mill.
- Added a wrench and a pestle.
- Added several new item descriptions.
- Tillifergaewicz is now a point of interest.
- Twinning and trining lamprey can be villagers again.
- Reduced memory fragmentation over long play sessions.
- Improved turn-by-turn performance.
- Improved lightray casting performance during the day.
- Improved performance in liquid-heavy zones.
- Improved memory overhead in general.
- Improved memory overhead and performance when saving/loading.
- Reduced memory pressure from reality-stabilizing effects.
- Changed Issachari renderstring to ‘h’.
- Clarified Ruin of House Isner rules text.
- Removed the prerelease inventory and trade options.
- Clarified the disease cure achievements only trigger when the diseases are cured via traditional methods.
BUGFIXES
- We made many, many fixes to long-standing issues around creature attitudes, including creatures losing their
- Fixed Asphodel’s followerss being limited to 8.
- Fixed nonspecific gender verb conjugation.
- Fixed several cases of messages referring to a *PooledObject.
- Fixed the performance impact when many creatures had died or objects had been destroyed.
- Fixed non-human village tinkers and apothecaries not having tier-appropriate stock.
- Fixed twinning and trining lampreys generating erroneous copies.
- Fixed starch and lignin being removed.
- Fixed backswings being able to trigger additional backswings recursively.
- Knowing the Cloaca Surprise no longer significantly slows down game loading.
- Fixed many other small issues.
MODDING AND DEBUGGING
- [modding] Creatures now have action-specific opinions of others. For example, being attacked by someone’s ally now garners the OpinionAttackAlly opinion.
- [modding] Creatures now maintain a history of allegiance. For example: “On the 3rd of Ut yara Ux, <creature> was constructed by a turret tinker.” and “On the 12th of Tuum Ut, <creature> was proselytized by you.”
- [modding] Many invalid components are now removed gracefully when loading a saved game, making it possible to remove a mod from a saved game and continue playing.
- [modding] Made the Leader part more general and functional. Use it to generate a creature with companions.
- [modding] MinEvents now support registration with prioritized execution and optional serialization.
- [modding] Any class can now register for a MinEvent by implementing the IEventHandler interface.
- [modding] Event handlers now use event registrars to handle both registration and unregistration with a single method implementation.
- [modding] Some events are now sent and can be listened for on the global game level, such as AfterPlayerBodyChangeEvent.
- [modding] Added ModSingletonEvent, ModPooledEvent and IModEventHandler, which allow creating modded events with native performance. See XML docs for examples.
- [modding] Object instances can now tokenize themselves for the serializer by implementing the ITokenized interface.
- [modding] IParts can now define a priority which determines their order within the parent object’s list. This has an effect on the orders of event processing and serialization.
- [modding] Inert parts with no functionality, such as those gained from some skills, can now define a skip priority that excludes them from event processing, for a minor performance benefit.
- [modding] Ported blueprint builders to be IObjectBuilders, which are singletons that can process many game objects without creating garbage or polluting the object’s parts.
- [modding] Text variable replacers, such as “=verb:shloop=” or “=player.waterRitualLiquid|capitalize=”, are now moddable by decorating a class and method with the related attributes.
- [modding] Complex and/or custom text variable operations can now use the Text.StartReplace() builder to do every replacement in a single pass.
- [modding] Abilities can now set IsWorldMapUsable to allow activation on the world map.
- [modding] The basic fields of effects are now manually serialized. It’s no longer necessary to call the base Write method.
- [modding] Game state singletons can now handle any embark events that occur after their creation.
- [modding] An error is now generated when a serialized type falls through to the deprecated binary formatter.
- [debug] Added a ‘show attitude’ action to creatures when debug information on object internals is enabled.
- [debug] Added several creature modifier wishes: fungusfriend:*, qudzusymbiote:*, slimewalker:*, slimespitter:*, kindlethumbed:*, firethumbed:*, convert:*, mechanical:*.