atomic pair - purchasing couples them, so neither moves alone.
SkillData.Level is gone. It was an [Export] on a cached Resource: one
instance per process, so the level never persisted, leaked between save
slots, and made "unowned" indistinguishable from "level 1". Level now
comes from the Playthrough and is passed to ISkill.Initialize.
SkillManager reconciles from SkillSetChanged instead of being told by
each caller. The old shape was "record it, then tell SkillManager" as two
calls at four sites; AddSkill's early return when no player is registered
left the skill owned but inert. Reconciliation also tracks the level each
component was built at, so an upgrade rebuilds it rather than being
patched in from outside.
SkillUnlockerComponent collapses to one TryBuy - unlock and upgrade were
two methods each doing affordability, debit, level mutation and manager
notification in order.
The guard three components copy-pasted around Upgrades[Level - 1] - and
which BrickArmor omitted - now lives once in SkillComponentBase.
Hud reads coins from CoinsChanged instead of rebuilding translated
strings every frame. Lives still polls; it moves with the death path.
slice 7 regression. level_village_2..5.tscn each reference their own
LevelResource for the death screen label, so pointing the resource back
at the scene forms a cycle Godot cannot resolve - "Parse Error: Busy"
and the level fails to load entirely.
ScenePath was a string for exactly this reason. Reverted, and the rot it
allowed (forest_1 aimed at a nonexistent scene) is now caught by
LevelCatalogue.Validate checking every path resolves, plus a repo-level
structural check - fixed by validation rather than by typing.
project.godot: restores the C# feature flag and dialogue_manager
uses_dotnet, which `godot --headless --import` strips on every run.
new progression.adapters project, no engine reference. Stores take a
directory path; Godot resolves user:// with GlobalizePath and passes it
in, which is what makes them testable at all - originally I'd written
this slice off as untestable.
version lives in a file envelope, not the snapshot, so the domain only
knows the current shape. A newer-build save reports Corrupt with a
reason instead of masquerading as "no save" and getting overwritten.
atomic write via temp + rename. One file per aggregate: saving a run
leaves the profile file byte-identical, asserted.
guard rail fixed - it was matching prose in doc comments, now anchored
to using-directives plus a project.assets.json check. 63 tests.
LevelResource gains a stable Id and swaps the string ScenePath for an
editor-tracked PackedScene. The old path field was never read and had
rotted - forest_1 pointed at level_forest_5.tscn, which doesn't exist,
and borrowed LEVEL_5_NAME so it would have displayed "VILLAGE - 5".
LevelCatalogue lists levels in campaign order and produces the domain's
Campaign; an authoring mistake fails at boot because Campaign.Of rejects
blank and duplicate ids. Not a domain port - nothing in the domain
resolves a level to a scene.
All 8 scenes now have a resource; campaign keeps the existing 6
(tutorial_1, village_1..5). village_6 and forest_1 are catalogued but
deliberately out of the campaign.
GameManager.LevelScenes stays until slice 10 rewrites GameManager.
* Refactor collectable components to C# and update resource scripts for consistency
* Update resource paths and refactor properties for consistency
* Refactor UI components to inherit from Control and update node paths for consistency
* Update node paths and group assignments for consistency across scenes
* Refactor GameManager and PlayerDeathComponent for improved state management and logging; update scene connections for player death handling
* Add PhantomCamera components and UI elements for improved scene management; refactor existing components for better integration
* Refactor skill components and update resource paths for consistency; enhance skill management in scenes
* Add new UID files and update scene configurations for dialogue components; refactor skill management and input handling
* Add next level command and refactor player retrieval in GameManager; update scene files for consistency
* Add skill upgrade system and refactor skill components for enhanced functionality; update resource paths and configurations
* Enhance ChargeProgressBar and Marketplace functionality; add owner exit handling and update skill button states
* Refactor ChargeProgressBar and SkillManager; update skill handling and improve component interactions
* Refactor player and level configurations; streamline FlipPlayerComponent and reposition Spaceship Enter
* Implement BeamComponent in C# and enhance marketplace button functionality
* Add core game components including ConfigFileHandler, GameManager, SaveSystem, and UIManager
* cleanup
* Add new components: CanPickUpComponent, CollapsableComponent, DestroyableComponent, EffectInflictorComponent, StatusEffectComponent, and StatusEffectDataResource
* Add new components: EnemyDeathComponent, EnemyWaveTriggerComponent, and ExitDoorComponent
* Add new components: ExplosiveComponent, FadeAwayComponent, FireEffectComponent, FlipComponent, GravityMotionComponent, LaunchComponent, and update PlatformMovement with LastDirection property
* Add new components: HealComponent, HitComponent, HomingMissileMotionComponent, LeverComponent, and TriggerLeverComponent
* Refactor GameManager session state handling and add new components: CanBeLaunchedComponent, IceEffectComponent, JumpPadComponent, KillPlayerOutOfScreenComponent, KnockbackComponent, LifetimeComponent, MagneticSkillComponent, OutOfScreenComponent, PeriodicShootingComponent, PlayerDeathComponent, ProgressiveDamageComponent, ProjectileComponent, ProjectileInitComponent, RequirementComponent, ScoreComponent, ShipMovementComponent, ShipShooterComponent, and SideToSideMovementComponent
* Add new components: CannotStompComponent, SkillUnlockedComponent, SpaceshipEnterComponent, SpaceshipExitComponent, SpinComponent, StompDamageComponent, StraightMotionComponent, TerrainHitFx, TooltipComponent, TrailComponent, and UnlockOnRequirementComponent
* Add new components: BrickThrowComponent, BulletComponent, CageComponent, ChaseLevelComponent, CleanupComponent, and ThrowInputResource classes; implement game saving and loading logic in SaveSystem
* Add audio settings management and platform movement component
* Add ChargeProgressBar, Credits, and GameOverScreen components for UI management
* Add UID files for ConfigFileHandler, GameManager, SaveSystem, and UIManager components
* Add README.md file with game description and features; include project license and contribution guidelines
* Add Hud component for UI management; display health, coins, and lives
* Add MainMenu and Marketplace components; implement game management and skill unlocking features
* Add PauseMenu, SettingsMenu, and SkillButton components; enhance game management and UI functionality