Skip to content
HellboundGloryPublic

About

Update-safe RPM packaging of gen1recomp (Pokémon Red/Blue/Yellow recompilation) as a fused LÖVE build, with tag-triggered CI.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Gen1Linux — update-safe RPM packaging of Gen1Recomp

This project turns the upstream bryanthaboi/gen1recomp game (a native LÖVE2D recreation of Pokémon Red / Blue / Yellow) into an RPM you can install and launch on a Fedora/Nobara system (plus a Flatpak that runs on any Flatpak-capable distro), while keeping the game's original architecture and its built-in self-updater working.

No upstream game code is edited. The build is a pure wrapper/loader:

  1. It checks out the requested upstream release tag.
  2. It runs the project's own official packer (scripts/pack_love.sh), which builds game.love with the release version stamped into src/core/Version.lua — exactly what upstream CI does.
  3. It fuses that game.love onto the distro's LÖVE 11.5 runtime (the same "original architecture" upstream ships for its Windows/Mac builds), producing a single self-contained launcher executable.
  4. It packages that fused launcher into an RPM with a .desktop entry, an app icon taken from the upstream source, and the license.

Downloads

Ready-built RPM and Flatpak packages are published as GitHub Releases automatically. Grab the latest from:

https://github.com/HellboundGlory/Gen1Linux/releases/latest

Each v* tag on this repo triggers the build-rpm GitHub Action, which builds the newest upstream release and attaches both the RPM and the Flatpak to that release. You can also browse all releases at https://github.com/HellboundGlory/Gen1Linux/releases.

Fedora / Nobara (RPM):

sudo dnf install ./gen1recomp-<version>-1.<dist>.x86_64.rpm

Any Flatpak-capable distro (.flatpak bundle):

flatpak install ./Gen1Linux-<version>.flatpak

(The Flatpak pulls the org.love2d.love2d LÖVE runtime and the Freedesktop platform automatically on install.)

Why it stays update-safe

A fused LÖVE executable reports love.filesystem.isFused() == true, which activates the game's own updater (src/core/Boot.lua + src/update/Check.lua). On every launch it checks the GitHub releases feed for a gen1recomp-<newer>.love payload. When upstream tags a newer release, you just open the launcher and press Update — the payload is downloaded, sha256-verified, and chain-loaded on next launch. No RPM upgrade is ever needed for game updates.

Important: this only works if the RPM is built from a release tag with a real version number (auto-detected as the newest tag). Building from dev (./build_rpm.sh --dev) ships engine 0.0.0-dev, which by design never self-updates — use it only if you want a dev snapshot.

Requirements (Fedora / Nobara)

sudo dnf install -y love git rpm-build zip unzip

love is a runtime dependency too (Requires: love >= 11.5), so dnf pulls it automatically when you install the RPM — you only need it installed beforehand so the build can fuse onto /usr/bin/love.

Build from source

The app icon is taken from the upstream source (assets/logo/gen1recomp_cover.png), so this packaging repo needs no icon of its own. First clone the upstream source into gen1recomp/:

git clone https://github.com/bryanthaboi/gen1recomp.git gen1recomp

Then build (output goes to dist/):

./build_rpm.sh             # builds the newest upstream release tag
./build_rpm.sh 0.1.78      # builds a specific release
./build_rpm.sh --dev       # dev snapshot (NOT update-safe)

Flatpak build

The Flatpak wraps the game on top of Flathub's official LÖVE base app (org.love2d.love2d) and installs a thin launcher that runs the bundled game.love, so it stays a pure wrapper (no game code changed). It reuses the same version-stamped game.love that build_rpm.sh produces, so both packages are always built from an identical archive.

sudo dnf install -y flatpak flatpak-builder imagemagick
./build_rpm.sh          # first: creates build/game-<ver>.love (+ the RPM)
./build_flatpak.sh      # then:  builds dist/Gen1Linux-<ver>.flatpak

Note: inside the Flatpak sandbox the game is not a fused LÖVE executable, so the in-app self-updater banner behaves differently than in the RPM build — update the game by installing a newer Flatpak release from this repo.

Releasing / updating this repo

The build-rpm GitHub Action runs on every v* tag push. To publish a new build, create and push a tag — no code changes needed:

git tag v1.1
git push origin v1.1

CI then clones the upstream source, builds the newest upstream release, and attaches the resulting RPM to that tag's GitHub Release (release notes are generated automatically).

Install

Grab the RPM from GitHub Releases (or build locally with ./build_rpm.sh), then:

sudo dnf install ./gen1recomp-0.1.79-1.fc44.x86_64.rpm

Then launch gen1recomp from your app menu. On first run it asks you to drop/choose your own legally obtained US .gb/.gbc ROM (the package contains NO ROM). Save data and downloaded updates live in ~/.local/share/love/pokemon-love2d.

Layout

  • build_rpm.sh — the RPM packager (checks out tag → pack_love.sh → fuse → rpmbuild)
  • build_flatpak.sh — the Flatpak packager (wraps the same game.love on the LÖVE base)
  • gen1recomp.spec — the RPM spec
  • gen1recomp.desktop — launcher desktop entry
  • flatpak/ — Flatpak manifest (io.github.hellboundglory.Gen1Linux.yml) + generated sources
  • .github/workflows/build-rpm.yml — CI that builds the RPM + Flatpak on a v* tag and attaches them to the release
  • gen1recomp/ — upstream repository clone (created by the build / CI, not committed)
  • rpmbuild/ — rpmbuild workspace (SOURCES/RPMS/SPECS/...)
  • dist/ — built RPMs

Technical notes

  • Fusion = concatenating game.love onto the LÖVE ELF binary. LÖVE detects the appended archive and boots as a fused game.
  • brp-strip caveat: Fedora's auto post-install brp-strip hook truncates the appended archive down to a ~10 KB stub, destroying the fused game. The spec disables the auto post-install steps (%global __os_install_post %{nil}) since this package ships no shared libs / man pages / bytecode that need them.

About

Update-safe RPM packaging of gen1recomp (Pokémon Red/Blue/Yellow recompilation) as a fused LÖVE build, with tag-triggered CI.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages