diff --git a/.github/workflows/c-cpp.yml b/.github/workflows/c-cpp.yml index 3515c9d3b..ed71837a4 100644 --- a/.github/workflows/c-cpp.yml +++ b/.github/workflows/c-cpp.yml @@ -101,3 +101,23 @@ jobs: git tag --force ci-dev-build port git push --force origin ci-dev-build gh release upload --clobber ci-dev-build ci-release/* + + build-flatpak-bundle: + name: "Build flatpak bundle" + runs-on: ubuntu-latest + container: + image: bilelmoussaoui/flatpak-github-actions:gnome-44 + options: --privileged + steps: + - uses: actions/checkout@v4 + - uses: actions/download-artifact@v4 + with: + name: pd-i686-linux + path: bin/ + - uses: flatpak/flatpak-github-actions/flatpak-builder@v6 + with: + build-bundle: true + bundle: io.github.fgsfdsfgs.perfect_dark.flatpak + manifest-path: dist/linux/io.github.fgsfdsfgs.perfect_dark.yml + cache-key: flatpak-builder-${{ github.sha }} + upload-artifact: true diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop b/dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop new file mode 100755 index 000000000..663933b7e --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Perfect Dark +Comment=Modern source port of Perfect Dark +Exec=pd +Icon=io.github.fgsfdsfgs.perfect_dark +Terminal=false +Type=Application +Categories=Game;ActionGame; +StartupNotify=false diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml b/dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml new file mode 100644 index 000000000..10a2f92ee --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.metainfo.xml @@ -0,0 +1,45 @@ + + + io.github.fgsfdsfgs.perfect_dark + Perfect Dark + + Perfect Dark Contributors + https://github.com/fgsfdsfgs/perfect_dark/graphs/contributors + + io.github.fgsfdsfgs.perfect_dark.desktop + Modern cross-platform port of Perfect Dark + CC0-1.0 + MIT + https://github.com/fgsfdsfgs/perfect_dark/ + +

This is a port of Ryan Dywer's decompilation of classic N64 shooter Perfect Dark to modern systems.

+
+ + + Game + ActionGame + Shooter + + + n64 + scifi + cyberpunk + retro + sourceport + port + + + + + + moderate + mild + + https://github.com/fgsfdsfgs/perfect_dark/ +
diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.png b/dist/linux/io.github.fgsfdsfgs.perfect_dark.png new file mode 100644 index 000000000..24f45c18d Binary files /dev/null and b/dist/linux/io.github.fgsfdsfgs.perfect_dark.png differ diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.py b/dist/linux/io.github.fgsfdsfgs.perfect_dark.py new file mode 100644 index 000000000..47c752fee --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.py @@ -0,0 +1,15 @@ +#!/usr/bin/python +import argparse +import subprocess + +parser = argparse.ArgumentParser() + +for directory in ["data", "saves", "mods"]: + abs_dir = os.path.join(os.environ["XDG_DATA_HOME"], directory + if not os.path.isdir(abs_dir): + os.makedirs(abs_dir) + +xdg_data_home = os.environ["XDG_XATA_HOME"] +default_args = ["--basedir", f"{xdg_data_home}/data", "--savedir", f"{xdg_data_home}/saves"] + +subprocess.run(["pd"] + default_args) diff --git a/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml b/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml new file mode 100644 index 000000000..91ea5877d --- /dev/null +++ b/dist/linux/io.github.fgsfdsfgs.perfect_dark.yaml @@ -0,0 +1,93 @@ +app-id: io.github.fgsfdsfgs.perfect_dark +runtime: org.freedesktop.Platform +runtime-version: &runtime-version '23.08' +sdk: org.freedesktop.Sdk +command: io.github.fgsfdsfgs.perfect_dark.py + +finish-args: + # multiarch is required for 32bit binaries + - --allow=multiarch + # hardware 3D and controller access + - --device=all + # X11 + XShm access + - --share=ipc + - --socket=x11 + # Audio + - --socket=pulseaudio + # Enable network for multiplayer + - --share=network + +# Parameters for 32-bit extensions +x-gl-version: &gl-version '1.4' +x-gl-versions: &gl-versions 23.08;1.4 +x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;egl/egl_external_platform.d;OpenCL/vendors;lib/dri;lib/d3d;lib/gbm;vulkan/explicit_layer.d;vulkan/implicit_layer.d + +add-extensions: + org.freedesktop.Platform.Compat.i386: + directory: lib/i386-linux-gnu + version: '23.08' + + org.freedesktop.Platform.GL32: + directory: lib/i386-linux-gnu/GL + version: *gl-version + versions: *gl-versions + subdirectories: true + no-autodownload: true + autodelete: false + add-ld-path: lib + merge-dirs: *gl-merge-dirs + download-if: active-gl-driver + enable-if: active-gl-driver + autoprune-unless: active-gl-driver + + org.freedesktop.Platform.GL32.Debug: + directory: lib/debug/lib/i386-linux-gnu/GL + version: *gl-version + versions: *gl-versions + subdirectories: true + no-autodownload: true + merge-dirs: *gl-merge-dirs + enable-if: active-gl-driver + autoprune-unless: active-gl-driver + + org.freedesktop.Platform.VAAPI.Intel.i386: + directory: lib/i386-linux-gnu/dri/intel-vaapi-driver + version: *runtime-version + versions: *runtime-version + autodelete: false + no-autodownload: true + add-ld-path: lib + download-if: have-intel-gpu + autoprune-unless: have-intel-gpu + +modules: + - name: perfect_dark + buildsystem: simple + sources: + - type: file + path: bin/pd + - type: file + path: bin/pd.jpn + - type: file + path: bin/pd.pal + - type: file + path: io.github.fgsfdsfgs.perfect_dark.py + - type: file + path: io.github.fgsfdsfgs.perfect_dark.png + - type: file + path: io.github.fgsfdsfgs.perfect_dark.metainfo.xml + - type: file + path: io.github.fgsfdsfgs.perfect_dark.desktop + build-commands: [] + post-install: + # create extension mountpoints + - mkdir -p /app/lib/i386-linux-gnu + - mkdir -p /app/lib/i386-linux-gnu/GL + - mkdir -p /app/lib/debug/lib/i386-linux-gnu/GL + - mkdir -p /app/lib/i386-linux-gnu/dri/intel-vaapi-driver + # port + - install -Dm 755 -t /app/bin/ pd* + - install -Dm 644 ${FLATPAK_ID}.py /app/bin/${FLATPAK_ID}.py + - install -Dm 644 ${FLATPAK_ID}.desktop /app/share/applications/${FLATPAK_ID}.desktop + - install -Dm 644 ${FLATPAK_ID}.metainfo.xml /app/share/metainfo/${FLATPAK_ID}.metainfo.xml + - install -Dm 644 ${FLATPAK_ID}.png /app/share/icons/hicolor/256x256/apps/${FLATPAK_ID}.png