From 12c23994e85e5efe5491a2a953e2f818d823661a Mon Sep 17 00:00:00 2001 From: Live session user Date: Tue, 2 May 2023 10:57:59 -0700 Subject: [PATCH 1/2] [CI] Create AppImage package --- .github/workflows/build.yaml | 14 +++++++++++++- platform/appimage/AppRun | 31 +++++++++++++++++++++++++++++++ platform/appimage/appimage.sh | 20 ++++++++++++++++++++ platform/appimage/zelda3.desktop | 9 +++++++++ platform/appimage/zelda3.png | Bin 0 -> 57816 bytes 5 files changed, 73 insertions(+), 1 deletion(-) create mode 100755 platform/appimage/AppRun create mode 100755 platform/appimage/appimage.sh create mode 100644 platform/appimage/zelda3.desktop create mode 100644 platform/appimage/zelda3.png diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 3f32236e..c27099a1 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -16,7 +16,7 @@ jobs: matrix: include: - name: Linux - os: ubuntu-latest + os: ubuntu-20.04 - name: Mac os: macos-latest steps: @@ -35,3 +35,15 @@ jobs: brew install sdl2 coreutils - name: Build run: make -j$(nproc) zelda3 + + - name: Package AppImage + if: ${{ matrix.name == 'Linux' }} + run: | + platform/appimage/appimage.sh + + - name: Upload AppImage + if: ${{ matrix.name == 'Linux' }} + uses: actions/upload-artifact@v3 + with: + name: Zelda3 + path: uploads/ diff --git a/platform/appimage/AppRun b/platform/appimage/AppRun new file mode 100755 index 00000000..d5045790 --- /dev/null +++ b/platform/appimage/AppRun @@ -0,0 +1,31 @@ +#!/bin/bash + +SCRIPT_PATH=`dirname $(realpath $0)`/usr +export LD_LIBRARY_PATH=${SCRIPT_PATH}/lib +export LC_NUMERIC=en_US.UTF-8 + + +if [ ! -e zelda3_assets.dat ]; then + if [ ! -e zelda3.sfc ]; then + "${SCRIPT_PATH}"/bin/notify-send -i "${SCRIPT_PATH}"/../zelda3.png "Missing ROM file" + exit + else + export ASSETDIR="$(mktemp -d /tmp/assets-XXXXX)" + cp -r "${SCRIPT_PATH}"/assets/* "$ASSETDIR" + ln -s "$PWD"/zelda3.sfc "$ASSETDIR"/tables/zelda3.sfc + cd "$ASSETDIR"/tables + "${SCRIPT_PATH}"/bin/notify-send -i "${SCRIPT_PATH}"/../zelda3.png "Extracting Assets" + "${SCRIPT_PATH}"/bin/python3 restool.py --extract-from-rom -r zelda3.sfc + cd - + cp "$ASSETDIR"/tables/zelda3_assets.dat . + rm -r "$ASSETDIR" + fi +fi + +if [ ! -e zelda3.ini ]; then + cp "${SCRIPT_PATH}"/assets/zelda3.ini . +fi + +"${SCRIPT_PATH}"/bin/zelda3 $@ + +exit diff --git a/platform/appimage/appimage.sh b/platform/appimage/appimage.sh new file mode 100755 index 00000000..848ed7af --- /dev/null +++ b/platform/appimage/appimage.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +export LINUXDEPLOY="./linuxdeploy-x86_64.AppImage --appimage-extract-and-run" +export CONDA_PACKAGES="pyyaml;pillow" +curl -sSfLO https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +curl -sSfLO https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-conda/master/linuxdeploy-plugin-conda.sh +chmod +x linuxdeploy-x86_64.AppImage +chmod +x linuxdeploy-plugin-conda.sh +$LINUXDEPLOY --appdir=AppDir +cp zelda3 AppDir/usr/bin/ +cp platform/appimage/{AppRun,zelda3.desktop,zelda3.png} AppDir +chmod +x AppDir/AppRun +chmod +x AppDir/usr/bin/zelda3 +mkdir -p AppDir/usr/assets +cp -r {tables,other} AppDir/usr/assets/ +cp zelda3.ini AppDir/usr/assets/ +cp /usr/bin/notify-send AppDir/usr/bin/ +$LINUXDEPLOY --appdir=AppDir --plugin conda --output appimage +mkdir uploads +mv Zelda*.AppImage uploads diff --git a/platform/appimage/zelda3.desktop b/platform/appimage/zelda3.desktop new file mode 100644 index 00000000..9a62a5b0 --- /dev/null +++ b/platform/appimage/zelda3.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=Zelda3 +Exec=zelda3 +Terminal=false +Type=Application +Icon=zelda3 +Comment=Zelda3 port +Categories=Game; +StartupWMClass=zelda3; diff --git a/platform/appimage/zelda3.png b/platform/appimage/zelda3.png new file mode 100644 index 0000000000000000000000000000000000000000..c9b439117364db6a0f1f451c885c5564544c941a GIT binary patch literal 57816 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�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 literal 0 HcmV?d00001 From f5b19ef9dfdf9de6d07b2db8114c9862dcb48c26 Mon Sep 17 00:00:00 2001 From: qurious-pixel <62252937+qurious-pixel@users.noreply.github.com> Date: Thu, 1 Jun 2023 18:09:51 -0700 Subject: [PATCH 2/2] Automatically Create Translations Place US Rom and Language file in same working directory to create a translation file or Redux --- platform/appimage/AppRun | 61 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 3 deletions(-) diff --git a/platform/appimage/AppRun b/platform/appimage/AppRun index d5045790..6164832f 100755 --- a/platform/appimage/AppRun +++ b/platform/appimage/AppRun @@ -3,21 +3,76 @@ SCRIPT_PATH=`dirname $(realpath $0)`/usr export LD_LIBRARY_PATH=${SCRIPT_PATH}/lib export LC_NUMERIC=en_US.UTF-8 +export ZELDA_ROM=$(shasum *.s[mf]c | grep -i 6D4F10A8B10E10DBE624CB23CF03B88BB8252973 | awk '{ print $2 }') +export LANG_ROM=$(shasum *.s[mf]c | awk ' { print $2 }' | sed '/zelda3.sfc/ d') +export LANG_ROM_HASH=$(shasum *.s[mf]c | awk '{ print toupper($1) }' | sed '/6D4F10A8B10E10DBE624CB23CF03B88BB8252973/I d') +extract_language () { + sed -i 's/# Language/Language/g' "$ASSETDIR"/zelda3.ini + sed -i "s/Language = .*/Language = $1/g" "$ASSETDIR"/zelda3.ini + "${SCRIPT_PATH}"/bin/notify-send -i "${SCRIPT_PATH}"/../zelda3.png "Translating..." + "${SCRIPT_PATH}"/bin/python3 restool.py --extract-dialogue -r translate.sfc + "${SCRIPT_PATH}"/bin/python3 restool.py --languages="$1" +} if [ ! -e zelda3_assets.dat ]; then - if [ ! -e zelda3.sfc ]; then + if [ ! -e "$ZELDA_ROM" ]; then "${SCRIPT_PATH}"/bin/notify-send -i "${SCRIPT_PATH}"/../zelda3.png "Missing ROM file" exit else export ASSETDIR="$(mktemp -d /tmp/assets-XXXXX)" cp -r "${SCRIPT_PATH}"/assets/* "$ASSETDIR" - ln -s "$PWD"/zelda3.sfc "$ASSETDIR"/tables/zelda3.sfc + ln -s "$PWD"/"$ZELDA_ROM" "$ASSETDIR"/tables/zelda3.sfc + if [ -e "$LANG_ROM" ]; then + ln -s "$PWD"/"$LANG_ROM" "$ASSETDIR"/tables/translate.sfc + fi cd "$ASSETDIR"/tables "${SCRIPT_PATH}"/bin/notify-send -i "${SCRIPT_PATH}"/../zelda3.png "Extracting Assets" - "${SCRIPT_PATH}"/bin/python3 restool.py --extract-from-rom -r zelda3.sfc + "${SCRIPT_PATH}"/bin/python3 restool.py --extract-from-rom -r zelda3.sfc + if [ -e "translate.sfc" ]; then + case "$LANG_ROM_HASH" in + 2E62494967FB0AFDF5DA1635607F9641DF7C6559) + extract_language "de" + ;; + 229364A1B92A05167CD38609B1AA98F7041987CC) + extract_language "fr" + ;; + C1C6C7F76FFF936C534FF11F87A54162FC0AA100) + extract_language "fr-c" + ;; + 7C073A222569B9B8E8CA5FCB5DFEC3B5E31DA895) + extract_language "en" + ;; + 461FCBD700D1332009C0E85A7A136E2A8E4B111E) + extract_language "es" + ;; + 3C4D605EEFDA1D76F101965138F238476655B11D) + extract_language "pl" + ;; + D0D09ED41F9C373FE6AFDCCAFBF0DA8C88D3D90D) + extract_language "pt" + ;; + B2A07A59E64C498BC1B2F28728F9BF4014C8D582) + extract_language "redux" + ;; + 9325C22EB0A2A1F0017157C8B620BC3A605CEDE1) + extract_language "redux" + ;; + FA8ADFDBA2697C9A54D583A1284A22AC764C7637) + extract_language "nl" + ;; + 43CD3438469B2C3FE879EA2F410B3EF3CB3F1CA4) + extract_language "sv" + ;; + *) + "${SCRIPT_PATH}"/bin/notify-send -i "${SCRIPT_PATH}"/../zelda3.png "Unknown ROM file" + exit + ;; + esac + fi cd - cp "$ASSETDIR"/tables/zelda3_assets.dat . + cp "$ASSETDIR"/zelda3.ini . rm -r "$ASSETDIR" fi fi