Skip to content

Releases: michelbr84/Flapforge

v0.2.5

Choose a tag to compare

@github-actions github-actions released this 09 Sep 20:50

Two navigation fixes on the mobile-surface release, both in the bottom bar
every hub section shares.

Fixed

  • Play in the bottom navigation goes to the home tab instead of starting a
    run.
    On the Shop, Birds, Forge and Goals sections the centre item was
    wired straight to a run: a tap flew one immediately, from a screen whose job
    is to set one up. Play is the hub's own section, so it now unwinds the stack
    back to the hub — ScreenManager.popTo(Class) — where START RUN is, and the
    four sections behave the same way.
  • The run the Birds screen configures reaches START RUN. The mode row
    (Standard / Seeded / Daily) had no effect on the hub's own start, which is
    why the navigation's Play had to launch the run itself; the row now hands
    the hub the run it names — Seeded with the seed of the last finished run,
    Daily with today's settled pick — and the hub's START RUN plays it. Standard
    hands nothing over and clears a previous request, so going back to Standard
    really goes back.
  • The Goals section's navigation is labelled. Its five items were built
    with empty text, like every section's, and Goals was the one that never
    filled them in: the bar showed five icons and no words. It now names Shop,
    Birds, Play, Forge and Goals from the string table and follows a language
    switch, the way the other sections do.

Downloads

Platform File How to run
Windows 10+ Flapforge-0.2.5-windows.zip Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install)
macOS 12+ Flapforge-0.2.5-macos.zip Unzip and open Flapforge.app (unsigned: right-click › Open the first time)
Linux Flapforge-0.2.5-linux.zip Unzip and run Flapforge/bin/Flapforge
Any OS with Java 17+ flapforge-0.2.5-all.jar java -jar flapforge-0.2.5-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …)
Android 13+ Flapforge-0.2.5-android.apk Sideload (debug-signed; allow installs from unknown sources)

Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).

Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.5/CHANGELOG.md · Compare: v0.2.4...v0.2.5

v0.2.4

Choose a tag to compare

@github-actions github-actions released this 09 Sep 19:57

The mobile-surface release (M14): the game now uses the screen it is given.
Until now the 420x640 logical playfield was both the box everything was laid
out in and the box the renderer clipped to, so on a tall phone it sat
centred inside the letterbox colour — 377 dead pixels above it and 377 below
it at 1080x2400, with the footers parked in the middle of the glass. The
surface is now elastic: the scale is still the uniform min(w/420, h/640) and
nothing is ever stretched, but the logical band the game draws in grows and
shrinks with the device, and it ends on the physical bottom edge where the
navigation is pinned. The hub also gains its fifth section, Goals.

Added

  • An elastic layout surface (M14): ui/layout/LayoutMetrics turns the
    real viewport into a safe viewport and then into the bands a screen lays out
    against — a header region, a flexible content region and the persistent
    bottom navigation — with contentTop(), contentBottom(), navTop() and
    aboveNavHeight(), clamped so the content region never falls under 480 rows
    and the navigation never overlaps the header. Every hub screen re-derives its
    bands when the metrics change, and at the classic 420x640 surface every band
    lands on exactly the constant it replaced.
  • Safe-area support (M14): Android reports systemBars ∪ cutout ∪ gestures
    through MainActivity and AndroidHost into the screen stack, so a gesture
    bar or a notch lifts the navigation off the glass instead of under it.
  • The Goals section (M14) as the hub's fifth tab, in the Shop/Birds/Play/
    Forge language, with the five-item navigation and Goals on the gold plate
    and no redundant Back button. Challenges is a carousel of cards with the
    world, tier, rules, progress, reward and unlock a challenge actually carries,
    and a gold call to action that starts it. Achievements is a scrolling list
    under a live summary, each card with its name, description and the real date
    it was unlocked. Milestones is a heading, the level bar and one row per
    metric, with current, target and remaining. Collections is eight rows of
    owned / total (percent) plus an Everything card. Every number comes from
    the profile or from the shipped content — the collection totals are computed
    at runtime, so they cannot disagree with the JSON — and the tabs speak en
    and pt_BR through sixteen new string keys.

Changed

  • The world picker, the run summary, the statistics and the settings no longer
    anchor their footers to a fixed Playfield.HEIGHT - N. They anchor to the
    bottom of the elastic band, and the room a tall screen frees goes to the
    scrolling region instead of to dead letterbox.
  • On a tall screen the world cards grow to fill the list and the run summary
    spreads its rows, rather than one gap growing.

Fixed

  • The statistics screen drew the long prestige value right-aligned past the
    panel border — 471 pixels of text in a 372-pixel column, starting at x = −75
    and overprinting its own label. It now wraps on a word boundary inside the
    row's inner margin.
  • GoalsScreen did not invalidate its layout when the navigation's top moved,
    and the Forge, the bird selection and Goals each compared only two
    coordinates when deciding whether their metrics had changed, which could
    leave cached hit targets stale. All three now compare the whole value.

Downloads

Platform File How to run
Windows 10+ Flapforge-0.2.4-windows.zip Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install)
macOS 12+ Flapforge-0.2.4-macos.zip Unzip and open Flapforge.app (unsigned: right-click › Open the first time)
Linux Flapforge-0.2.4-linux.zip Unzip and run Flapforge/bin/Flapforge
Any OS with Java 17+ flapforge-0.2.4-all.jar java -jar flapforge-0.2.4-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …)
Android 13+ Flapforge-0.2.4-android.apk Sideload (debug-signed; allow installs from unknown sources)

Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).

Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.4/CHANGELOG.md · Compare: v0.2.3...v0.2.4

v0.2.3

Choose a tag to compare

@github-actions github-actions released this 09 Sep 11:44

The forge release: the Upgrades screen becomes the Forge — three trees,
one tab each, laid out in the hub's own visual language, with a live panel
that shows what the coins are buying in the numbers a run is started with.
Nothing that was for sale changed hands: the same eighteen nodes, the same
prices, the same prerequisite graph. What changed is that the player can now
see the tree, read the attribute it moves, and buy it without guessing.

Added

  • The Forge is rebuilt (M13) as five bands. A compact header carries the
    title, the open tree's subtitle, the wallet in its coin pill and the hub's
    forge scene drawn small, so the place reads as the same room the main menu
    shows. Under it the three tree tabs — Flight, Economy, Forge — with a glyph
    each and the selected one in gold. Then the tree viewport: every node laid
    out by tier as a row card under a green tier pill, with the prerequisite edges
    drawn as light-yellow elbows whose endpoints come from the shipped prereqs
    graph, scrolled by the wheel and by the focus. Then the detail panel: the
    selected node's hero glyph over a gold glow, its name, level, description and
    status in words, and one gold call to action. The hub's five-item navigation
    closes the screen with Forge on the gold plate.
  • The attribute summary (M13): under a divider in the detail panel, every
    stat the open tree can touch, with its live resolved value and a five-segment
    pip bar normalised over the stat's own clamp range. It reads the very
    StatSheet a run is started with, and ForgeStatRealityTest proves every
    node moves every stat it claims to touch, in the direction it says.
  • Select, then buy (M13): activating a card only selects what the panel is
    describing; the purchase happens through the panel's call to action, so a
    mis-tap cannot spend. A refusal is surfaced, never swallowed — the toast says
    why, and the wallet, the cards and the live stats stand still.
  • A locked tree is for sale on the spot (M13): the Forge is the second
    screen that sells tree:<id>, through the same atomic route the shop uses,
    so a tree bought here lands in the save byte-for-byte as one bought there.
    ForgePersistenceTest proves it across a restart.
  • Nine new player-facing strings in en and pt_BR: the screen title, the
    three tree subtitles, the level and tree-unlock calls to action, the maxed
    word, the attribute-summary heading, the not-enough-coins note and the
    select-a-node hint.

Changed

  • The screen no longer carries a full-width Back button; the hub's SectionNav
    closes it. BACK and Escape still pop.
  • The tree scrolls by moving its cards, not the canvas, so every node stays in
    screen coordinates and one focus ring runs from the tabs through the cards and
    the call to action down into the navigation. A card scrolled out of the band
    is clipped away and stops answering the pointer.
  • UpgradeManager grew a tree-unlock facade — isTreeLocked, treeUnlockId,
    treeUnlockPrice, canAffordTreeUnlock, buyTree, isTreeEarned and
    claimEarnedTrees — so the screen reaches one manager instead of two. No
    constructor changed, so the hub screens and the existing tests are untouched.
  • upgrade.glide_1.desc said −25% while the shipped effect is −30%. Both string
    files now say what the node does.

Fixed

  • A tree already earned by play is never charged for (M13). tree:forge is
    any_of[world_cleared wind_valley, purchase 900] and tree:economy is
    any_of[level 3, purchase 120]: a profile carried over from a build without
    the tree could satisfy it without owning it, and the Forge would have sold
    back for coins something the player had already unlocked.

Downloads

Platform File How to run
Windows 10+ Flapforge-0.2.3-windows.zip Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install)
macOS 12+ Flapforge-0.2.3-macos.zip Unzip and open Flapforge.app (unsigned: right-click › Open the first time)
Linux Flapforge-0.2.3-linux.zip Unzip and run Flapforge/bin/Flapforge
Any OS with Java 17+ flapforge-0.2.3-all.jar java -jar flapforge-0.2.3-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …)
Android 13+ Flapforge-0.2.3-android.apk Sideload (debug-signed; allow installs from unknown sources)

Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).

Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.3/CHANGELOG.md · Compare: v0.2.2...v0.2.3

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 09 Sep 02:55
c367f36

The shop release: the Shop stops reading like a settings list and becomes a
catalogue in the home hub's own visual language — the second section screen
to adopt the shell the Birds screen introduced in 0.2.1, and the one screen
the player is asked to spend in. Nothing that was for sale changed hands: the
same ids, the same prices, the same purchase paths; what changed is that the
player can now read them.

Added

  • The Shop is rebuilt in the hub's language (M12). The HubHeader names
    it and shows the wallet — once, as a readout, because from inside the Shop
    the coin chip has nowhere to go. Under it the four categories — Birds,
    Abilities, Worlds, Features — as a TabBar with a glyph on every tab and the
    selected one marked in gold. Then a two-column grid of portrait cards,
    scrolled by the wheel and by the focus with a thumb that appears only when
    a tab has more rows than the band: each card carries the thing's own art —
    the bird's portrait in its first palette, the ability's glyph in gold inside
    a slot ring, the world's four-colour thumbnail, a hammer for a tree, a gear
    for a feature, a crown for a legendary card — its name, one line saying
    where it stands, and its state on a wooden price tag, the one piece of
    market furniture the Shop borrows. Under the grid a wooden detail plaque
    with the description, and one gold call to action whose verb is the tab's:
    Buy bird, Unlock ability / Upgrade ability, Unlock world, Unlock
    feature
    . The hub's five-item navigation closes the screen with Shop on
    the gold plate.
  • What you own stays in the Shop. A bought bird, world, feature, tree or
    legendary card keeps its card, badged with a check and Owned and no price,
    sorted after everything still for sale; a tab with nothing left to sell says
    so under the cards it still shows. What the profile starts with was never
    for sale and still never appears, so every tab holds the same cards whatever
    the profile owns — six birds, eight abilities, four worlds, seven features.
  • Every card says how to earn it. In this game everything for sale is also
    earnable, so nothing in the Shop is ever shut: instead of a padlock, a card
    that is not yours yet carries the road that costs no coins as its second line
    — Play 3 runs, Reach level 8, Clear Green Fields — from the same
    ProgressionText.unlockText the Birds, Worlds and Goals screens use, and
    the plaque repeats it as Or earn it: …. A price the wallet cannot cover
    keeps its tag crisp over the dimmed card, with Not enough coins on the
    plaque in the warning colour.
  • Three reusable pieces: ShopCard (a portrait CardGrid.Card with the four
    states and a hit test clamped to the grid's band), ShopArt (the art of
    every kind the Shop sells, resolved once when the card is built) and
    WorldSwatch, the world thumbnail promoted out of the World Select so both
    screens draw the same square. TabBar gained an optional glyph per tab and
    an accented mode that underlines the selected tab in gold; a bar without
    either draws exactly as before.
  • Seven strings in both languages: the five verbs of the call to action, Or
    earn it: {0}
    and Next level: {0}.

Changed

  • The price is on the card and nowhere else. The detail plaque no longer
    repeats it, the call to action carries no number, and the wallet appears
    once. The plaque carries what the card has no room for: the description, the
    free road in, and for an owned ability what the next level does.
  • The Shop has no Back button: Esc (or the Android back gesture) returns
    to the hub, exactly as on the Birds screen, and the bottom navigation swaps
    sections instead of stacking them. Play from the Shop starts the standard
    run in the profile's own world and tier.
  • Reduce flashing caps the call to action's glow on the Shop, as everywhere.
  • The version moves to 0.2.2 across version.properties, the Android version
    code and name, the changelog, the roadmap and the docs.

Downloads

Platform File How to run
Windows 10+ Flapforge-0.2.2-windows.zip Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install)
macOS 12+ Flapforge-0.2.2-macos.zip Unzip and open Flapforge.app (unsigned: right-click › Open the first time)
Linux Flapforge-0.2.2-linux.zip Unzip and run Flapforge/bin/Flapforge
Any OS with Java 17+ flapforge-0.2.2-all.jar java -jar flapforge-0.2.2-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …)
Android 13+ Flapforge-0.2.2-android.apk Sideload (debug-signed; allow installs from unknown sources)

Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).

Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.2/CHANGELOG.md · Compare: v0.2.1...v0.2.2

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 08 Sep 21:56
a482190

The bird-selection release: the Birds screen stops reading like a settings
list and becomes a collection screen in the home hub's own visual language.
Nothing was taken away — the world, tier and mode rows, the ability list and
the stat breakdown are the same rows with the same ids, moved into two panels
that give them the height to be read.

Added

  • The Birds screen is rebuilt in the hub's language (M11). The
    HubHeader names it and shows the wallet (the coin chip opens the Shop, as
    on the hub). Under it the hero: the bird being browsed, large, bobbing
    on an anvil on a floating island, with its name, what it is
    ("Guardian · Selected") and three headline attributes — Mobility,
    Defence and Control, each out of ten, resolved by
    BirdAttributes.of from the bird's own profile and its innate abilities, so
    they describe the bird alone and never move when an upgrade is bought. Below
    it a carousel of the seven birds walked with Left/Right, the arrows at
    its ends or the wheel: a locked tile carries its padlock and its price and
    nudges the padlock when it is tapped, and the selected tile carries the same
    gold border as the hub's call to action. Then the palette swatches of the
    browsed bird, a one-line run-setup bar ("Green Fields · Normal ·
    Standard ›") whose panel holds the world, tier and mode rows, the loadout as
    ability cards (icon, role, name, "Lv 1/3") with the ability list and the
    stat breakdown behind See details, one gold call to action naming the
    single thing to do (Use Ironbeak, Buy · 150 coins, Bird selected,
    Locked · Play 3 runs), and the hub's own five-item navigation with
    Birds on the gold plate.
  • Two reusable hub components, so the other section screens can adopt the same
    shell: HubHeader (title plus a currency chip that is focusable only when it
    has a route) and SectionNav.build(nav, primaryId, routes), which fills a
    NavBar with Shop · Birds · Play · Forge · Goals and marks one item as
    primary — Play on the hub, the section itself on a section screen. With them
    come Carousel, AbilityCard and AttributeBadge.
  • The release workflow names the GitHub release and fills its notes from the
    version's section of this changelog (scripts/release-notes.sh: the
    section, a download table and the compare link against the previous tag),
    and a dispatchable Release notes workflow (release-notes.yml) re-applies
    them to an existing release.

Changed

  • The world, tier and mode rows moved from the Birds screen's body into the
    panel its run-setup bar opens, and the ability list and stat breakdown into
    the panel See details opens. Each panel owns its own focus ring and is the
    ring taking input while it is up, so nothing under the veil can be hovered,
    clicked or reached with an arrow; Esc closes the panel before it leaves the
    screen. Under a settled daily the world and tier rows go read-only and show
    the pick's own world and tier, because that is what the daily will play
    whatever the rows said.
  • The Birds screen has no Back button: Esc (or the Android back gesture)
    returns to the hub, exactly as on the hub's other section screens, and the
    bottom navigation replaces the screen instead of stacking one.
  • Reduce flashing on the Birds screen caps the three glows and leaves the
    motion alone — the bob, the wing beat, the hero's slide and the carousel's
    tween are motion, not luminance, the same line the hub already draws with its
    own bob.
  • The gold call to action ellipsises its title when even its smallest font size
    overflows the plate, so a long translation at a large text scale can no
    longer spill past it.

Fixed

  • Every warning the Eclipse compiler's default set reported over the tree is
    gone (29 of them: unused imports, fields, locals and one private method, five
    missing serialVersionUIDs, two dead-code guards and two deprecated
    Thread.getId() calls). The IDE Problems panel showing hundreds of markers
    is stale language-server state from older checkouts, not this tree: run
    Java: Clean Java Language Server Workspace and reload after pulling.

Downloads

Platform File How to run
Windows 10+ Flapforge-0.2.1-windows.zip Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install)
macOS 12+ Flapforge-0.2.1-macos.zip Unzip and open Flapforge.app (unsigned: right-click › Open the first time)
Linux Flapforge-0.2.1-linux.zip Unzip and run Flapforge/bin/Flapforge
Any OS with Java 17+ flapforge-0.2.1-all.jar java -jar flapforge-0.2.1-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …)
Android 13+ Flapforge-0.2.1-android.apk Sideload (debug-signed; allow installs from unknown sources)

Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).

Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.1/CHANGELOG.md · Compare: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 07 Sep 05:24
d0de647

The home-hub release: the main menu becomes a visual home hub with a player
card, the world plaque, a forge that grows with your upgrades, a next-unlock
card and one gold START RUN; Challenges and Achievements merge into Goals, the
statistics become the Profile, and a bilingual player wiki ships with the
repository. This release also carries the 0.1.1 Android line, whose tag was cut
off main (see 0.1.1 below), so the desktop bundles and the APK build from one
tree again.

Added

  • The main menu is a home hub (M10): a HUD band with the player card
    (the selected bird as avatar, "Player", a crown with the level, the XP
    track and the prestige badge — opens the Profile), the coin chip (opens
    the Shop) and the settings gear; the bird-on-anvil emblem over the title;
    a wooden world plaque ("World 1 · Green Fields ›") that opens the new
    World Select screen (one card per world with its palette, hazards or
    way in, price while locked, and the difficulty row); a forge scene —
    the anvil and the selected bird on a floating island in the selected
    world's palette over that world's backdrop, dressed with a lit hearth, a
    hammer, barrels and a banner as the upgrade trees are built and gold trim
    after a prestige; a Next unlock card naming the nearest measurable
    unlockable with its counter (UnlockEvaluator.nextUnlock, progressOf,
    nearestBranch) that opens the screen where it is earned; a gold
    START RUN with "World • Difficulty" under it and a pulsing glow (capped
    under reduce flashing); a last-run / best line; and a five-item bottom
    navigation — Shop · Birds · Play · Forge (the upgrade trees) · Goals.
    START RUN plays the profile's selection through the hub's own run
    factory, seeded when --seed was given.
  • A Goals screen with four tabs — Challenges, Achievements, Milestones,
    Collections — merging the former Challenges and Achievements screens.
  • The statistics screen is the Profile: a fixed header with the selected
    bird, the name, the level and its progress bar, the prestige badge and a
    "Birds x/7 · Worlds x/5 · Achievements x/41" line, over the statistics.
  • Settings gained an About section (version, build, global keys) and a
    Quit row on the desktop (GameHost.supportsQuit; never on Android).
  • New components: NavBar/NavButton, IconButton, CtaButton,
    CurrencyChip, IconPainter; new procedural art (gear, flame, hammer,
    barrel, banner, awning, scroll, crown, chevron, padlock, glow, the gold
    call-to-action, navigation, chip and plaque plates); TextPainter.ellipsise.
  • Strings: menu.start_run, menu.run_subtitle, menu.world_plaque,
    menu.player_name, menu.player_level, menu.next_unlock,
    menu.next_unlock_none, menu.last_run, menu.last_run_none,
    menu.quit_confirm, menu.nav_forge, menu.nav_goals, goals.title,
    profile.title, profile.collections, world_select.title,
    world_select.card, world_select.tier, settings.section.about.
  • A bilingual player wiki — English and Português (Brasil), fourteen pages each
    with screenshots — generated from wiki/ on main and published to the GitHub
    wiki by .github/workflows/wiki.yml; scripts/check-wiki.sh validates links,
    images and language pairs before every publish.

Changed

  • Quitting from the home: Esc/Back on the hub arms a "Press again to quit"
    toast for three seconds and a second press closes the game; the old Quit
    button is gone from the menu (it lives in Settings › About on the desktop).
  • --world <id> no longer pins the hub's runs to a world the profile has
    not unlocked: START RUN always plays the profile's selection (an owned
    --world is written to the selection as before, and the log line says
    what happened). The headless run still plays the flag's world.
  • The tab bar clips each label to its own cell, so the four Goals tabs stay
    legible in Portuguese at the largest text scale.

Removed

  • ChallengesScreen and AchievementsScreen (merged into GoalsScreen),
    and the string keys menu.statistics, menu.upgrades, menu.challenges,
    menu.achievements, menu.world and achievements.title.

Downloads

Platform File How to run
Windows 10+ Flapforge-0.2.0-windows.zip Unzip and run Flapforge\Flapforge.exe (bundled runtime, nothing to install)
macOS 12+ Flapforge-0.2.0-macos.zip Unzip and open Flapforge.app (unsigned: right-click › Open the first time)
Linux Flapforge-0.2.0-linux.zip Unzip and run Flapforge/bin/Flapforge
Any OS with Java 17+ flapforge-0.2.0-all.jar java -jar flapforge-0.2.0-all.jar (--lang pt_BR, --fullscreen, --no-audio, --seed N, …)
Android 13+ Flapforge-0.2.0-android.apk Sideload (debug-signed; allow installs from unknown sources)

Saves live in ~/.flapforge (Linux), %APPDATA%\Flapforge (Windows) or
~/Library/Application Support/Flapforge (macOS) and load unchanged across
releases. Player guide: https://github.com/michelbr84/Flapforge/wiki (English and Português).

Full changelog: https://github.com/michelbr84/Flapforge/blob/v0.2.0/CHANGELOG.md · Compare: v0.1.1...v0.2.0

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 06 Sep 01:41
36f3ce2
Bind desugared records by constructor order, not field order

The first attempt fixed only the single-component defs. On a device the dex
format stores a class's fields sorted by name, so getDeclaredFields() is
alphabetical: BirdDef's 13 components no longer matched any constructor
signature and were rejected, while UpgradesDef(trees, nodes) — two List
components — matched by type in the wrong order and would have bound nodes
into trees. Field order is unusable, and trusting it is worse than failing.

StrictBinder now finds the canonical constructor by the multiset of its
parameter types (order-independent) and takes the component order from that
constructor, mapping each parameter to its field by name; -parameters is
added to the Android javac so the names survive, as they already do on the
desktop build. A parameter that resolves to neither a name nor a uniquely
typed field yields no components at all rather than a guess.

StrictBinderDesugarTest now hands the fields over in dex order and asserts
the components still equal the record reading, so the alphabetical case is
covered on the JVM.
versionCode 5 -> 6; versionName stays 0.1.1.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017R4Qc2xhRcuWXcz5648DZA

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 04 Sep 14:01
Flapforge 0.1.0 — Skill-Based Arcade Roguelite, milestones M0–M9

Determinism baseline: eaaa01685261a433 (--headless-run 3000 --seed 42)
Save schema v1 frozen at this tag; later schema changes ship migrations.