Repository navigation
Release Build #21
Multiply v21 — Release Notes
A big refresh focused on a cleaner, more consistent look across the entire game — plus a major build tooling upgrade and a tidier architecture underneath.
✨ What's new
A refreshed look and feel
Every screen has been rebuilt with a cleaner, more playful design system.
- Welcome screen — new hero card with an animated mascot, a dedicated high score banner, and a pulsating Play button that reacts to your latest stats.
- Game mode selection — replaced the heavy neumorphic cards with a bright hero header and a step-by-step mode → difficulty flow.
- How to Play — bullet lists are out; clear, icon-led step cards are in.
- Settings — reorganized into tidy sections with tile-based difficulty and theme pickers, plus cleaner audio toggles.
- Bubble Mode gameplay — a new HUD bar with stat chips, a redesigned spherical math bubble with a countdown progress ring, a simpler pause overlay, and a friendlier game-over dialog with animated score counting.
- Quiz Mode — polished question cards, new answer tiles with a satisfying selection stripe, a circular score indicator, and streamlined question-by-question recap rows.
Redesigned recap and celebrations
- New star rating system (up to 3 stars) based on your accuracy.
- Animated score counter and circular progress ring.
- Stat cards showing correct, wrong, and accuracy at a glance.
- Confetti effects when you do well. 🎉
- Haptic feedback on score milestones.
Typography and color refresh
- Comic Sans has been retired in favor of the Nunito font family across the whole app.
- New vibrant Material 3 color scheme with improved light and dark theme support.
- A new
MultiplyColorssemantic palette (success, warning, star, etc.) for consistent meaning across screens.
A proper design system
Introduced a reusable set of building blocks:
AnimatedFloatingSymbolsBackgroundMultiplyButton,MultiplyCard,MultiplyStaticCard,MultiplyDialog- A shared
Spacingsystem so everything lines up the way it should.
🔧 Under the hood
New architecture
- New
GamePreferencesRepositorycentralizes all high score and difficulty settings via DataStore. - Both
GameViewModel(Bubble Mode) andQuestionsViewModel(Quiz Mode) now use this repository. - Migrated from the older
onActionpattern to an MVI-styleonEvent+effects(Channel) approach — cleaner state handling and better separation of one-shot side effects. - Navigation renamed from
MutiplyNav→MultiplyNavand updated for the new event-based ViewModels. - Utility classes (
Particle,BitmapFromDrawable,RandomOffset) moved fromutlis→util.
Build tooling upgrade
- AGP 8.13.2 → 9.1.1
- Kotlin 2.3.0 → 2.3.20
- Gradle 9.2.1 → 9.4.1
- kotlinx.serialization → 3.4.0
- Koin BOM → 4.2.0-beta4
- Also bumped: Compose BOM, Material3, Navigation Compose, and other dependencies.
- Migrated to the new Android DSL:
compileSdk { version = release(37) },targetSdk 37,android.builtInKotlin,android.newDsl. - Dropped the standalone
kotlin-androidplugin (now built in viaandroid.builtInKotlin). - Added
foojay-resolver-conventionfor automatic JDK toolchain provisioning.
CI improvements
- The release workflow in
.github/workflows/build-signed-apk.ymlnow uses job-levelcontents: writepermissions instead of an explicitGITHUB_TOKEN.
Full Changelog: v19...v21