Releases: playstructs/structsd
Pyrexnar
Like Opheliora but far less tragic.
- Fixed bug in Proxy Join
- Fixed tests that should have been there in the first place
Full Changelog: v0.14.0-beta...v0.15.0-beta
Opheliora
This release is a doozy. It's a significant step towards a mature codebase with working economic tooling and a battle engine tuned for fun.
Combat Engine Rewrite
The attack system was architecturally overhauled. All combat resolution logic has been centralized into AttackContext as a dedicated combat engine, replacing the previous approach where combat methods were scattered across StructCache. Every combat method now returns a typed result struct (EvasionResult, BlockResult, VolleyResult, CounterResult, RecoilResult, PlanetaryDefenseResult), and zero event writes happen during resolution. Event construction is consolidated into exactly two methods: EndShot for per-target details and Finalize for the overall attack event.
This restructuring was necessary to fix a bug where multi-shot weapons (like the Starfighter's Attack Run with 3 projectiles) were aggregating all shots into a single EventAttackShotDetail row. Damage totals were mechanically correct, but per-projectile hit/miss breakdowns were invisible to clients. Each projectile now gets its own event row, matching the proto's intended repeated EventAttackShotDetail design.
Counter-Attack Overhaul
The counter-attack system received several interrelated fixes. Structs now track counter-spent state per attack, ensuring each defender counters at most once. The ordering has been corrected so defensive counter-attacks occur before block attempts, and counter-attacks now properly fire even on evaded shots. Attack Runs were being countered too aggressively — all of these changes together bring the combat loop in line with the intended game design.
Allocation System Rework
The allocation system has been significantly reworked. The controller identifier is now PlayerId rather than an address, account abstraction has been added, and source capacity underloads are properly guarded. Allocations on import have been fixed (consensus-breaking), and provider allocations now validate the controller correctly. This touches the economic core of the chain.
Permission System Overhaul
Permissions have shifted from struct-level to a rank-based model. Guild rank now gates capabilities like kicking members. Struct-specific permissions have been removed in favor of the new system, and orphaned permissions are cleaned up. This is a meaningful governance change for guilds.
Additional Fixes
targetPlayerId moved from EventAttackDetail to EventAttackShotDetail in the proto (API-breaking for clients parsing attack events)
Planetary Defense Cannon return value was never being set — now correctly reports when cannons fire
EvadedCause was being populated even on failed evasion attempts — now only set on successful evasion
All combat logging downgraded from Info to Debug to reduce production noise
commitAll() reordered for indexer compatibility
| Issue | Type | Author |
|---|---|---|
| Update Attack Events | API | netlag |
| Attack-Run countered too aggressively | Gameplay | netlag |
| Structs can only Counter-Attack once per Attack | Gameplay | abstrct, netlag |
| Planetary Defenses now accurately stack | Gameplay | abstrct |
| Guild Rank limits Guild Kick Capabilities | Gameplay | abstrct |
| Prevent Defender Block on evaded shot | Gameplay | abstrct, jpeg |
| Defensive Counter-Attack should occur before Block | Gameplay | netlag |
| PDC was counter-attacking when should be prevented | Gameplay | jpeg |
| Counter-Attack should fire on missed shot | Gameplay | jpeg |
| Guard Source Capacity Underload in Allocation | Suggestion | abstrct |
| Use AttackContext for managing attack results | Suggestion | abstrct |
| Delete orphaned permissions | Suggestion | abstrct |
| New Guild Rank Permission System | Suggestion | abstrct |
| Remove Struct specific permissions | Suggestion | abstrct |
| Proxy Join Error Handling Improvements | Bug | abstrct |
| Address Register Error Handling Improvements | Bug | abstrct |
| Allocation Controller needs validation | Bug | abstrct |
| Provider Allocations use controller incorrectly | Bug | abstrct |
| re-order commitAll() for indexer | Bug | abstrct, netlag |
| Add account abstraction to Allocations | Feature | abstrct |
| Allocation Refactoring | Feature | abstrct |
| Fix Allocations on Import | Consensus,Feature | abstrct |
| Allocation Controller now PlayerId | Core | abstrct |
| Improve Permissions | Core | abstrct |
Full Changelog: v0.13.0-beta...v0.14.0-beta
Nebulon
Mystigon
Various bug fixes, gameplay tweaks, and a casual complete refactoring of the caching framework.
| Issue | Type | Requester |
|---|---|---|
| Energy issue during Build Cancel | Bug | jpeg |
| GoOffline() running too often | Bug, CLI | abstrct |
| Improved test coverage | Consensus | abstrct, netlag |
| Improved genesis import | Bug, Consensus, Core, Feature | abstrct, jpeg, netlag |
| Agreement Update bug | Bug | abstrct |
| Provide Create allowed for empty denom on Rate | Bug | abstrct |
| CounterAttack not doing a full readiness check | Bug, Gameplay | jpeg |
| Fix AttackCounterable as Struct-Level Override | Bug, Gameplay | jpeg |
| Add seizedOre to raid status | Feature | netlag |
| Jamming satellite effects linger after death | Bug | jpeg |
| Randomness Checks seem wrong | Bug | jpeg |
| Error on Fleet Movement to Populated Planet | Bug, Core | netlag |
| General Context Manager | Feature | abstrct |
| Energy Bug during PlanetExplore | Bug, Economy | abstrct |
| Possible Fleet PeaceDeal issue | Bug, Core | abstrct |
| Consistency Bug | Bug | abstrct, netlag |
| Always Delete Attribute on zero? | Suggestion | abstrct, netlag |
Full Changelog: v0.11.0-beta...v0.12.0-beta
Luxoria
This release is badass. Huge upgrades, squashed bugs, and fun gameplay changes.
| Issue | Type | Requester |
|---|---|---|
| Zero block start hashing issue | Bug | AdamBomb, Dan, LuckyStar, jbowers, jpeg |
| Upgrade to IBC v10 | API, Consensus, Core, Economy | abstrct |
| Upgrade to Cosmos SDK v0.53.5 | Consensus, Core | abstrct |
| Open Hashing by Default | Core, Feature | abstrct |
| Improved error logging for indexing | Core, Suggestion | netlag |
| Missing Returns in Fleet Readiness Checks | Bug | abstrct |
| Double Commit on Same Target | Bug | abstrct |
| Target Struct Existence Not Validated | Bug | abstrct |
| Missing Weapon System Validation | Bug | abstrct |
| Missing Events for Indexer | Bug, Feature | abstrct, netlag |
| Object Deletion Inconsistencies | Bug | abstrct, netlag |
Kalyptrix
Hopefully longer lived than Junctiondale.
Fixes:
- New Command ship now knows where it is.
Junctiondale
The first release ready for Sticky State! New gameplay changes to remove friction from onboarding, and to keep the action moving smoothly.
| Issue | Type | Requester |
|---|---|---|
| Bug during Raid Attacker Defeated | Bug | netlag |
| Struct Activate requires unfun high Charge Bar | Gameplay | abstrct, netlag |
| Improve Import/Export for Genesis | Core | abstrct |
| Remove Online requirement from build cancel | Gameplay | abstrct |
| Event missing for Struct Defender Clear | Bug | netlag |
| Gift an initial Command Ship | Economy, Feature, Gameplay | jpeg |
| Remove charge requirement from build cancel | Gameplay | abstrct |
Full Changelog: v0.9.0-beta...v0.10.0-beta
Isoteria
A number of bug fixes and gameplay tweaks all needed for a smoother experience in the Structs UI and beyond.
| Name | Type | Requester |
|---|---|---|
| New PermissionHash | Core, Feature | abstrct |
| Panic on Aimless Allocations | Core, Economy | abstrct |
| Cosmos Simulation Coverage | Core, Feature | abstrct, netlag |
| Improving Test Coverage | Core | abstrct |
| Update Guild Membership tx handlers | Core | abstrct, cisphyx, netlag |
| Implement guild_membership_cache.go | Core | abstrct, cisphyx, netlag |
| Slashing and Infusions | Consensus | abstrct, netlag |
| Stale Infusion Cleanup | Core | abstrct, netlag |
| Create InfusionCache layer | Core, Feature | abstrct, netlag |
| Add new Messages to AutoCLI | Bug, CLI | abstrct, netlag |
| Resolve Defusion/Infusion Miscalculation | Bug | abstrct, netlag |
| Remove Charge Bar hits for all Hash functions | Gameplay | abstrct, jpeg, netlag, trevor |
| Account abstraction sendTokens wrapper MsgPlayerSend | Core, Feature | netlag |
| Difficulty calc issue in Compute | Bug | jbowers |
| Guild Request/Invite Issue | Bug, Consensus | abstrct, cisphyx |
What's Changed
Full Changelog: v0.7.0-beta...v0.9.0-beta
Helionar
Latest changes for testnet 103. Bug fixes, improved information/state propagation for indexing, and improved workflow changes for managing alpha infusions and guild membership.
| Issue | Type | Author |
|---|---|---|
| EventProviderAddressDetail format incorrect | Bug | abstrct |
| Struct Sweep Delay | Gameplay | netlag |
| Merge Redelegate and GuildJoin | Suggestion | jpeg,netlag |
| Account Abstraction Wrappers for Staking functionality | Feature | netlag |
| GetInfusionByID Split check | Bug | abstrct |
| Improve logging system (Phase 1) | Suggestion | netlag |
| Add retreat event | Core,Feature,Suggestion | netlag |
| EventGuildBankAddres format incorrect | Bug | abstrct |
| Bond issues stake reward | Bug,Economy | abstrct |
| ualpha / alpha denom metadata missing | Bug,Economy | abstrct |
Full Changelog: v0.7.0-beta...v.0.8.0-beta
Ghalaxia
Our Most Boring Release Yet!
Almost nothing exciting is happening in this release, we are fixing some crap and adding technical improvements. The fact that it is a boring release is pretty darn exciting though, our codebase is stabilizing <3| Issue | Type | Requester |
|---|---|---|
| Expand Struct Type Metadata | Feature, Gameplay | jpeg |
| Apply latest difficulty settings | Economy, Gameplay | jpeg, netlag |
| Apply latest Struct Type changes | Core, Economy, Gameplay | jpeg, netlag |
| stake referenced in x/gov params | Bug | abstrct |
| Address Activity and Block Event Time Emit not UTC | Bug | abstrct |
| Balances incorrect when defusing | API, Bug, Economy | netlag |
| Guild Bank Redeem Panic | Bug | jbowers |
| Infuse msg to structs.grid.player.<player_id> | Feature, Suggestion | netlag |
| Defuse timing missing | API, Economy, Feature | jpeg, netlag |
| Improved Test Coverage | Core | netlag |
| docker-structsd missing dependancies | Bug | jbowers |
| ualpha / alpha denom metadata missing | Bug, Economy | abstrct |
| Add player_id to player_address_activity | Suggestion | netlag |
| Null/Zero Permission Setable | Bug | abstrct |
| Internals Addresses to Emit Event | API, Core, Feature | abstrct |
Full Changelog: v0.6.0-beta...v0.7.0-beta