Skip to content

1.5.0 — Gesture onboarding, Music/SFX split, smoother tray#8

Merged
yet300 merged 7 commits into
mainfrom
1.5.0
May 24, 2026
Merged

1.5.0 — Gesture onboarding, Music/SFX split, smoother tray#8
yet300 merged 7 commits into
mainfrom
1.5.0

Conversation

@yet300
Copy link
Copy Markdown
Owner

@yet300 yet300 commented May 24, 2026

Summary

Release 1.5.0 (versionCode 12). User-facing polish plus a couple of internal cleanups.

  • Wordless gesture onboarding. The two-step text spotlight tutorial is replaced by an animated hand + ghost piece that loops the core drag gesture. It auto-dismisses the moment the player engages (drag or tap-to-select), fading out with a confetti burst. Dismissal is local/immediate (decoupled from the async "seen" persistence, which previously made it lag). The now-unused tutorial strings were removed across all 37 locales.
  • Music / SFX split. The single sound toggle is now two independent toggles — background Music and SFX/voice — in Settings, with localized strings. SettingsRepository.soundEnabledmusicEnabled + sfxEnabled (and matching setters/store/mappers).
  • Smoother tray. When a piece is placed, the surviving tray pieces slide left to fill the freed slot instead of reflowing. Slot identity is now owned by Decompose components (PieceTrayComponent / TraySlotComponent), keyed on pieceId, so per-slot animation state survives a placement.
  • Dependency bumps. Compose Multiplatform 1.10.3 → 1.11.0, Metro 1.0.0 → 1.1.1.
  • Refactor. AnalyticRepositoryImplAnalyticRepository.
  • Version bump. gradle.properties and iOS Config.xcconfig → 1.5.0 / 12; added changelogs/12.txt.

Commits

  • Slide tray survivors to fill placed slot via Decompose components
  • Split sound toggle into Music and SFX
  • Add localized string resources for music and sound effect settings
  • Update Compose Multiplatform and Metro versions
  • Replace text tutorial with wordless gesture onboarding
  • Rename AnalyticRepositoryImpl to AnalyticRepository
  • Bump version to 1.5.0 (versionCode 12)

Test plan

  • First launch (fresh install / cleared settings): gesture tutorial appears, hand loops the drag, dismisses with fade + confetti on first drag or tap. Verify on iOS device/simulator specifically.
  • Tutorial never reappears after being dismissed (persisted).
  • Settings: Music and SFX toggle independently; existing users migrate sensibly.
  • Tray: placing a piece slides survivors left smoothly; entrance/idle animations intact.
  • ./gradlew :composeApp:compileAndroidMain and the iOS build both succeed.
  • Unit tests pass (settings/tray/root components have updated tests on this branch).

🤖 Generated with Claude Code

yet3a and others added 7 commits May 19, 2026 18:40
The engine emits a compacted currentPieces list, so before this change
the surviving piece would jump left into the placed slot in a single
frame, and because the entrance animation was keyed on the joined ids
of all three pieces every placement also re-played the fly-in for the
survivors.

Move tray ownership into a PieceTrayComponent/TraySlotComponent pair
(per-piece, modelled on the Decompose cards sample). The parent
reconciles each engine emission by keeping the same slot instance for
any pieceId still alive, so survivors retain their UI animation state
across placements. In the Composable, LookaheadScope + animateBounds
turns each list shift into a fixed-distance leftward slide of one slot
width, and the entrance Animatable keys on pieceId so only fresh
pieces animate in.

Selection state moves from a local Compose var in GameContent into the
tray component (Value<TraySelection> — wrapped because Decompose Value
requires a non-null type argument). GameContent now reads the
selected piece from the component and calls clearSelection() after
tap-place, revive, and restart.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
A single soundEnabled flag previously gated background music, placement
SFX, line-clear SFX, and voice lines together — so a player who wanted
quiet background music with placement clicks (or vice versa) had no
way to express that. The Settings screen had one row for "Sound" and
that was the only audio knob in the app.

Replace the single flag with two independent ones on
SettingsRepository: musicEnabled (gates DefaultAudioRepository's music
combine) and sfxEnabled (gates the placement / clear / voice helpers).
Add a one-time migration in SettingsBackedSettingsRepository that
seeds both new keys from the legacy blockblast.sound value and removes
the legacy key, so existing muted users stay muted on upgrade.

Surface a second toggle row in MainSettingsContent so both flags are
user-controllable. Update every test stub and the SettingsStore /
SettingsStoreFactory / Mapper plumbing to carry both fields through.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
- Add `music`, `music_subtitle`, `sfx`, and `sfx_subtitle` keys to localized `strings.xml` files for 36 languages.
- Provide translated strings for background music and granular sound effect descriptions (placement, clearing, and voice lines) to support expanded audio configuration options.
- Update `composeMultiplatform` to 1.11.0.
- Update `metro` to 1.1.1.
Swap the two-step text spotlight for an animated hand + ghost piece that
loops the drag gesture, fading out with a confetti burst once the player
engages. Remove the now-unused tutorial string resources across all locales.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@yet300 yet300 merged commit 8c31afb into main May 24, 2026
3 checks passed
@yet300 yet300 deleted the 1.5.0 branch May 24, 2026 07:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants