43 Commits
Author SHA1 Message Date
Waterdish f64cf9d56d 1.0.1 Update app values 2024-06-02 15:34:41 -07:00
Waterdish 43ebcd0305 Update to 2S2H 1.0.1 2024-06-02 15:18:22 -07:00
WaterdishandGitHub 07ac8c2a1b Update README.md 2024-06-02 14:36:26 -07:00
Waterdish 891fcafa57 Update 1.0.0.1 2024-06-02 14:27:08 -07:00
Waterdish 8e3a447798 F1 toggle button 2024-06-02 14:27:08 -07:00
Waterdish 41ace195cd Prepare for future gyro support 2024-06-02 14:27:08 -07:00
Waterdish c0593af8db ImGui fixes in LUS 2024-06-02 14:27:08 -07:00
Waterdish 4770f538a9 Ignore release folder 2024-06-02 14:27:08 -07:00
Waterdish 5dedbc45c1 Copy asset files during build 2024-06-02 14:27:08 -07:00
Waterdish bb6c6f5995 SDL cleanup 2024-06-02 14:27:08 -07:00
Waterdish d0dd8c2786 Bump min version to Android 7. Rest in peace Android 6 users 2024-06-02 14:27:08 -07:00
Garrett CoxandGitHub 3a86bdf2dc Version bump Rika Bravo (#626) 2024-05-31 19:51:23 -05:00
Garrett CoxandGitHub 78f0525ec0 Bump LUS (#625) 2024-05-31 19:50:36 -05:00
inspectredcandGitHub a3add6092b Fix Dpad Ocarina L Btn & GI Dpad Stuff (#578) 2024-05-31 19:21:57 -05:00
Jacob ErlyandGitHub a39a9a58e9 Adds sanity checks for bottle duping over items and prevents the issue causing Big Goron to not give the player the Keg License. (#605)
* Update Infinite.cpp

Adds sanity checks for bottle duping and prevents the issue causing Big Goron to not give the player the Keg License.

* Update Infinite.cpp

Formatting.

* Update Infinite.cpp

* Update Infinite.cpp

More formatting trying to work around this Clang stuff while working from Github.
2024-05-31 18:13:42 -04:00
ArchezandGitHub 7bf60f6771 fix hud editor position bugs (#622) 2024-05-31 17:39:26 -04:00
MalkierianandGitHub 63c293f78a Implement Alt Assets Variable LUS (#619)
* Bump LUS to `94b755b77c0c0f566686c9d23fa4c15e23473a0c`.
Remove `CVAR_ALT_ASSETS` from LUS cvars cmake.
Change all pertinent `CVarGetInteger` calls for `CVAR_ALT_ASSETS` to `ResourceManager::IsAltAssetsEnabled`.
Implement frame-end toggle of `mAltAssetsEnabled`.

* Remove `ShouldClearTextureCacheAtEndOfFrame`.
Move prevAltAssets check to end of `Gfx_ProcessGfxCommands`.

* Missed initial `mAltAssetsEnabled` set.
2024-05-31 17:26:04 -04:00
Garrett CoxandGitHub 57d4e62ed0 Fix issue where skipping clock tower cutscene would not return you correctly (#618) 2024-05-30 23:21:18 -05:00
Reinhardt R. GamingandGitHub 877d7f732b Display a MSAA value of 1x as "Off" (#597)
* Change terminology for MSAA setting + tooltip

* Update BenMenuBar.cpp
2024-05-30 22:46:41 -05:00
inspectredcandGitHub 47e98e8ee9 Fix GC Warning Labels (#529) 2024-05-30 22:46:07 -05:00
briaguyaandGitHub 65870f3c07 update to latest lus main (#614)
* update to latest lus main

* upstream otrexporter and zapdtr submodules

* upstream LUS submodule
2024-05-30 23:30:05 -04:00
Garrett CoxandGitHub 464c55fcbb Tweaks to autosaves and pause saves to always persist them, along with preventing saves when it's too early or late in the game (#616) 2024-05-30 23:20:29 -04:00
Garrett CoxandGitHub 8ac7dc6b7d Fix play as kafei by swapping out resources later (#617) 2024-05-30 23:10:45 -04:00
briaguyaandGitHub f32bccc5b9 ci(linux): install libzip without crypto, bump sdl from 2.28.5 -> 2.30.3 (#588)
* ci(linux): install libzip without crypto, bump sdl from 2.28.5 -> 2.30.3

* just install libzip with apt for otr gen

* copy the .so to a place linuxdeploy looks for it

* but do it in the right place
2024-05-30 22:21:24 -04:00
ArchezandGitHub c7aafb65fd Fix o2r file copy (#592)
* fix o2r file copy script

* move script to cmake folder
2024-05-30 22:12:14 -04:00
ArchezandGitHub 6ff53d4827 fix taking transformation mask off setting unexpected flags (#612) 2024-05-30 22:03:29 -04:00
ArchezandGitHub 73c468d5cf Fix Skybox star colors (#608)
* Fix Skybox star colors

* switch to Color_RGBA8 solution
2024-05-30 21:56:08 -04:00
Garrett CoxandGitHub 74afca9bf7 Remove path sanitize for file drops (#611) 2024-05-30 15:01:55 -05:00
AltoXorgandGitHub 3590cfa118 Append appShortName in savesFolderPath for non-portable builds (#593) 2024-05-29 23:42:17 -04:00
WaterdishandGitHub 9a81e3eac9 Update README.md 2024-05-29 10:40:44 -07:00
WaterdishandGitHub 6b9276847e Update README.md 2024-05-29 10:40:31 -07:00
WaterdishandGitHub cf3b18a7ab Update README.md 2024-05-29 10:01:18 -07:00
WaterdishandGitHub 6a5a5cf201 Update README.md 2024-05-29 09:55:48 -07:00
Waterdish a61cf53f22 Add android project 2024-05-29 09:33:50 -07:00
Waterdish 343e072924 GUI Scaling fixes 2024-05-29 09:33:20 -07:00
ArchezandGitHub c2e1c56413 Fix crash with Deku King during credits (#601) 2024-05-29 17:01:52 +01:00
MalkierianandGitHub e2fb954d99 Disabled checkbox fix (#498)
* Prevent style change and toggle when disabled.

* Fix performance issues for disabled elements being drawn.

* Move `BeginDisabled` to after visible window check to avoid potential mismatch issues.
2024-05-29 12:33:55 +01:00
inspectredcandGitHub 63def6f8df Display GC Version String On Title (#579)
* Display GC Version String On Title

* remove uncompressed case
2024-05-28 23:50:03 -05:00
Waterdish 0ba35fe6a4 Android Fixes 2024-05-28 17:50:08 -07:00
inspectredcandGitHub eb208233e2 Fix Free Look On Woodfall Lilypads/Water (#587) 2024-05-28 19:37:26 -05:00
Garrett CoxandGitHub 788c74a19e Fix PR artifacts (#563) 2024-05-27 21:18:14 -05:00
ArchezandGitHub 41e35ff3ee Fix macports cache (#543)
* fix macports cache

* cache key obey os version

* more tweaks

* fix sccache and try mac gtar replacement

* oh a custom gtar wrapper..

* comments and different test

* update

* soh otr after main build

* cache bust

* 2ship o2r builder

* change install path

* bust cache

* sccache cmake fixes

* dont list 2ship.o2r in pr artifacts
2024-05-27 17:58:30 -05:00
ArchezandGitHub 0eaa533f25 Use GH artifacts (#511)
* use gh artifacts

* update nightly links
2024-05-27 00:01:54 -05:00
104 changed files with 9640 additions and 410 deletions
+1 -1
View File
@@ -1 +1 @@
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev libglew-dev nlohmann-json3-dev libtinyxml2-dev libspdlog-dev ninja-build
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
# Call the original gtar executable with sudo for macports cache restoration to root folder
exec sudo /opt/homebrew/bin/gtar.orig "$@"
+179 -217
View File
@@ -98,74 +98,8 @@ jobs:
# source-dir: _packages
# destination-dir: ./
# generate-2ship-otr:
# runs-on: ubuntu-22.04
# steps:
# - uses: actions/checkout@v4
# with:
# submodules: true
# - name: ccache
# uses: hendrikmuhs/ccache-action@v1.2.11
# with:
# key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }}
# restore-keys: |
# ${{ runner.os }}-otr-ccache-${{ github.ref }}
# ${{ runner.os }}-otr-ccache
# - name: Install dependencies
# run: |
# sudo apt-get update
# sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
# - name: Cache build folders
# uses: actions/cache@v4
# with:
# key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }}
# restore-keys: |
# ${{ runner.os }}-otr-build-${{ github.ref }}
# ${{ runner.os }}-otr-build
# path: |
# build-cmake
# SDL2-2.28.5
# tinyxml2-10.0.0
# - name: Install latest SDL
# run: |
# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
# if [ ! -d "SDL2-2.28.5" ]; then
# wget https://www.libsdl.org/release/SDL2-2.28.5.tar.gz
# tar -xzf SDL2-2.28.5.tar.gz
# fi
# cd SDL2-2.28.5
# ./configure --enable-hidapi-libusb
# make -j 10
# sudo make install
# sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
# - name: Install latest tinyxml2
# run: |
# sudo apt-get remove libtinyxml2-dev
# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
# if [ ! -d "tinyxml2-10.0.0" ]; then
# wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz
# tar -xzf 10.0.0.tar.gz
# fi
# cd tinyxml2-10.0.0
# mkdir -p build
# cd build
# cmake ..
# make
# sudo make install
# - name: Generate 2ship.o2r
# run: |
# export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
# cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
# cmake --build build-cmake --config Release --target Generate2ShipOtr -j3
# - uses: actions/upload-artifact@v4
# with:
# name: 2ship.o2r
# path: 2ship.o2r
# retention-days: 1
build-macos:
# needs: generate-2ship-otr
runs-on: macos-14
generate-2ship-otr:
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
@@ -173,99 +107,24 @@ jobs:
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
with:
create-symlink: true
key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-otr-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-14-ccache-${{ github.ref }}
${{ runner.os }}-14-ccache
- name: Cache MacPorts
id: cache-macports
uses: actions/cache@v4
with:
path: /opt/local/
key: ${{ runner.os }}-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}
restore-keys: |
${{ runner.os }}-macports
- name: Install MacPorts (if necessary)
run: |
if [ -d /opt/local/ ]; then
echo "MacPorts already installed"
else
wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg
sudo installer -pkg ./MacPorts-2.9.3-14-Sonoma.pkg -target /
fi
echo "/opt/local/bin:/opt/local/sbin" >> $GITHUB_PATH
- name: Install dependencies
run: |
brew uninstall --ignore-dependencies libpng
sudo port install $(cat .github/workflows/macports-deps.txt)
brew install ninja
# - name: Download 2ship.o2r
# uses: actions/download-artifact@v4
# with:
# name: 2ship.o2r
# path: build-cmake/mm
- name: Build 2Ship
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build-cmake --config Release --target Generate2ShipOtr --parallel 10
cmake --build build-cmake --config Release --parallel 10
(cd build-cmake && cpack)
mv _packages/*.dmg 2Ship.dmg
mv README.md readme.txt
# - name: Upload build
# if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
# uses: actions/upload-artifact@v4
# with:
# name: 2ship-mac
# path: |
# 2Ship.dmg
# readme.txt
- name: Zip build
run: |
mkdir -p _release
zip -qq _release/2ship-mac.zip 2ship.dmg readme.txt
- name: Upload build
if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
uses: ryand56/r2-upload-action@latest
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: _release
destination-dir: ./
build-linux:
# needs: generate-2ship-otr
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
${{ runner.os }}-otr-ccache-${{ github.ref }}
${{ runner.os }}-otr-ccache-
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11
with:
key: linux-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-ccache-${{ github.ref }}
linux-ccache
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt) libzip-dev zipcmp zipmerge ziptool
- name: Cache build folders
uses: actions/cache@v4
with:
key: linux-build-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-otr-build-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-build-${{ github.ref }}
linux-build
${{ runner.os }}-otr-build-${{ github.ref }}
${{ runner.os }}-otr-build-
path: |
build-cmake
SDL2-2.28.5
SDL2_net-2.2.0
tinyxml2-10.0.0
- name: Install latest SDL
run: |
@@ -293,28 +152,160 @@ jobs:
cmake ..
make
sudo make install
- name: Install latest SDL_net
- name: Generate 2ship.o2r
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "SDL2_net-2.2.0" ]; then
wget https://www.libsdl.org/projects/SDL_net/release/SDL2_net-2.2.0.tar.gz
tar -xzf SDL2_net-2.2.0.tar.gz
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
cmake --build build-cmake --config Release --target Generate2ShipOtr -j3
- uses: actions/upload-artifact@v4
with:
name: 2ship.o2r
path: 2ship.o2r
retention-days: 1
build-macos:
needs: generate-2ship-otr
runs-on: macos-14
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
with:
create-symlink: true
key: ${{ runner.os }}-14-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-14-ccache-${{ github.ref }}
${{ runner.os }}-14-ccache-
# Needed to apply sudo for macports cache restore
- name: Install gtar wrapper
run: |
sudo mv /opt/homebrew/bin/gtar /opt/homebrew/bin/gtar.orig
sudo cp .github/workflows/gtar /opt/homebrew/bin/gtar
sudo chmod +x /opt/homebrew/bin/gtar
- name: Cache MacPorts
id: cache-macports
uses: actions/cache@v4
with:
path: /opt/local/
key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}
restore-keys: |
${{ runner.os }}-14-macports-
- name: Install MacPorts (if necessary)
run: |
if [ command -v port &>/dev/null ]; then
echo "MacPorts already installed"
else
wget https://github.com/macports/macports-base/releases/download/v2.9.3/MacPorts-2.9.3-14-Sonoma.pkg
sudo installer -pkg ./MacPorts-2.9.3-14-Sonoma.pkg -target /
fi
cd SDL2_net-2.2.0
./configure
echo "/opt/local/bin:/opt/local/sbin" >> $GITHUB_PATH
- name: Install dependencies
run: |
brew uninstall --ignore-dependencies libpng
sudo port install $(cat .github/workflows/macports-deps.txt)
brew install ninja
- name: Download 2ship.o2r
uses: actions/download-artifact@v4
with:
name: 2ship.o2r
path: build-cmake/mm
- name: Build 2Ship
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_OSX_ARCHITECTURES="x86_64;arm64"
cmake --build build-cmake --config Release --parallel 10
(cd build-cmake && cpack)
mv _packages/*.dmg 2Ship.dmg
mv README.md readme.txt
- name: Upload build
uses: actions/upload-artifact@v4
with:
name: 2ship-mac
path: |
2Ship.dmg
readme.txt
build-linux:
needs: generate-2ship-otr
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v4
with:
submodules: true
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.13
with:
key: linux-ccache-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-ccache-${{ github.ref }}
linux-ccache-
- name: Cache build folders
uses: actions/cache@v4
with:
key: linux-build-${{ github.ref }}-${{ github.sha }}
restore-keys: |
linux-build-${{ github.ref }}
linux-build-
path: |
SDL2-2.30.3
tinyxml2-10.0.0
libzip-1.10.1
- name: Install latest SDL
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "SDL2-2.30.3" ]; then
wget https://www.libsdl.org/release/SDL2-2.30.3.tar.gz
tar -xzf SDL2-2.30.3.tar.gz
fi
cd SDL2-2.30.3
./configure --enable-hidapi-libusb
make -j 10
sudo make install
sudo cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
# - name: Download 2ship.o2r
# uses: actions/download-artifact@v4
# with:
# name: 2ship.o2r
# path: build-cmake/mm
- name: Install latest tinyxml2
run: |
sudo apt-get remove libtinyxml2-dev
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "tinyxml2-10.0.0" ]; then
wget https://github.com/leethomason/tinyxml2/archive/refs/tags/10.0.0.tar.gz
tar -xzf 10.0.0.tar.gz
fi
cd tinyxml2-10.0.0
mkdir -p build
cd build
cmake ..
make
sudo make install
- name: Install libzip without crypto
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
if [ ! -d "libzip-1.10.1" ]; then
wget https://github.com/nih-at/libzip/releases/download/v1.10.1/libzip-1.10.1.tar.gz
tar -xzf libzip-1.10.1.tar.gz
fi
cd libzip-1.10.1
mkdir -p build
cd build
cmake .. -DENABLE_COMMONCRYPTO=OFF -DENABLE_GNUTLS=OFF -DENABLE_MBEDTLS=OFF -DENABLE_OPENSSL=OFF
make
sudo make install
sudo cp -av /usr/local/lib/libzip* /lib/x86_64-linux-gnu/
- name: Download 2ship.o2r
uses: actions/download-artifact@v4
with:
name: 2ship.o2r
path: build-cmake/mm
- name: Build 2Ship
run: |
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release -DBUILD_REMOTE_CONTROL=1
cmake --build build-cmake --config Release --target Generate2ShipOtr -j3
cmake --build build-cmake --config Release -j3
(cd build-cmake && cpack -G External)
@@ -323,32 +314,16 @@ jobs:
env:
CC: gcc-12
CXX: g++-12
# Temporarily replaced with an upload to R2 until we go public
# - name: Upload build
# uses: actions/upload-artifact@v4
# with:
# name: 2ship-linux
# path: |
# 2ship.appimage
# readme.txt
# Remove Zip step when uploading directly to GH artifactory
- name: Zip build
run: |
mkdir -p _release
zip -qq _release/2ship-linux.zip 2ship.appimage readme.txt
- name: Upload build
if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
uses: ryand56/r2-upload-action@latest
uses: actions/upload-artifact@v4
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: _release
destination-dir: ./
name: 2ship-linux
path: |
2ship.appimage
readme.txt
build-windows:
# needs: generate-2ship-otr
needs: generate-2ship-otr
runs-on: windows-latest
steps:
- name: Install dependencies
@@ -359,60 +334,47 @@ jobs:
with:
submodules: true
- name: ccache
uses: hendrikmuhs/ccache-action@v1.2.11
uses: hendrikmuhs/ccache-action@v1.2.13
with:
variant: sccache
max-size: "1G"
key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-ccache1-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-ccache-${{ github.ref }}
${{ runner.os }}-ccache
${{ runner.os }}-ccache1-${{ github.ref }}
${{ runner.os }}-ccache1-
- name: Cache build folder
uses: actions/cache@v4
with:
save-always: true
key: ${{ runner.os }}-build-${{ github.ref }}-${{ github.sha }}
key: ${{ runner.os }}-build1-${{ github.ref }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-build-${{ github.ref }}
${{ runner.os }}-build
${{ runner.os }}-build1-${{ github.ref }}
${{ runner.os }}-build1-
path: |
build-windows
vcpkg
- name: Configure Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
# - name: Download 2ship.o2r
# uses: actions/download-artifact@v4
# with:
# name: 2ship.o2r
# path: build-windows/mm
- name: Download 2ship.o2r
uses: actions/download-artifact@v4
with:
name: 2ship.o2r
path: build-windows/mm
- name: Build 2Ship
env:
env:
VCPKG_ROOT: ${{github.workspace}}/vcpkg
run: |
set $env:PATH="$env:USERPROFILE/.cargo/bin;$env:PATH"
cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release
cmake --build build-windows --config Release --target Generate2ShipOtr --parallel 10
cmake -S . -B build-windows -G Ninja -DCMAKE_MAKE_PROGRAM=ninja -DCMAKE_BUILD_TYPE:STRING=Release -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache
cmake --build build-windows --config Release --parallel 10
(cd build-windows && cpack)
cd ..
mv _packages/*.zip _packages/2ship-windows.zip
# Temporarily replaced with an upload to R2 until we go public
# - name: Unzip package
# run: Expand-Archive -Path _packages/2ship-windows.zip -DestinationPath 2ship-windows
# - name: Upload build
# if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
# uses: actions/upload-artifact@v4
# with:
# name: 2ship-windows
# path: 2ship-windows
- name: Unzip package
run: Expand-Archive -Path _packages/2ship-windows.zip -DestinationPath 2ship-windows
- name: Upload build
if: ${{ startsWith(github.ref, 'refs/heads/develop') }}
uses: ryand56/r2-upload-action@latest
uses: actions/upload-artifact@v4
with:
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY_ID }}
r2-secret-access-key: ${{ secrets.R2_SECRET_ACCESS_KEY }}
r2-bucket: ${{ secrets.R2_BUCKET }}
source-dir: _packages
destination-dir: ./
name: 2ship-windows
path: 2ship-windows
+2 -1
View File
@@ -48,8 +48,9 @@ jobs:
return allArtifacts.data.artifacts.reduce((acc, item) => {
if (item.name === "assets") return acc;
if (item.name === "2ship.o2r") return acc;
acc += `
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip?h=20a00267c7ffeb2eb80ab31f356f2ba5f120f43c)`;
- [${item.name}.zip](https://nightly.link/${context.repo.owner}/${context.repo.repo}/actions/artifacts/${item.id}.zip)`;
return acc;
}, '### Build Artifacts');
- id: 'add-to-pr'
+3 -3
View File
@@ -1,9 +1,9 @@
[submodule "libultraship"]
path = libultraship
url = https://github.com/kenix3/libultraship.git
url = https://github.com/Waterdish/libultraship.git
[submodule "OTRExporter"]
path = OTRExporter
url = https://github.com/louist103/OTRExporter.git
url = https://github.com/Waterdish/OTRExporter.git
[submodule "ZAPDTR"]
path = ZAPDTR
url = https://github.com/louist103/ZAPDTR.git
url = https://github.com/Waterdish/ZAPDTR.git
+34
View File
@@ -0,0 +1,34 @@
# Gradle files
.gradle/
build/
# Local configuration file (sdk path, etc)
local.properties
# Log/OS Files
*.log
# Android Studio generated files and folders
captures/
.externalNativeBuild/
.cxx/
*.apk
output.json
app/release/
# IntelliJ
*.iml
.idea/
misc.xml
deploymentTargetDropDown.xml
render.experimental.xml
# Keystore files
*.jks
*.keystore
# Google Services (e.g. APIs or Firebase)
google-services.json
# Android Profiling
*.hprof
+86
View File
@@ -0,0 +1,86 @@
def buildAsLibrary = project.hasProperty('BUILD_AS_LIBRARY');
def buildAsApplication = !buildAsLibrary
if (buildAsApplication) {
apply plugin: 'com.android.application'
}
else {
apply plugin: 'com.android.library'
}
android {
ndkPath "/home/waterdish/Android/Sdk/ndk/26.0.10792818" // Point to your own NDK
compileSdkVersion 31
defaultConfig {
if (buildAsApplication) {
applicationId "com.dishii.mm"
}
minSdkVersion 24
targetSdkVersion 31
versionCode 2
versionName "1.0.1"
externalNativeBuild {
//ndkBuild {
// arguments "APP_PLATFORM=android-23"
// abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
//}
cmake {
arguments "-DSDL_SHARED=ON", "-DANDROID_STL=c++_static", "-DHAVE_LD_VERSION_SCRIPT=OFF",'-DUSE_OPENGLES=ON'
abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
//abiFilters 'arm64-v8a'
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
applicationVariants.all { variant ->
tasks["merge${variant.name.capitalize()}Assets"]
.dependsOn("externalNativeBuild${variant.name.capitalize()}")
}
if (!project.hasProperty('EXCLUDE_NATIVE_LIBS')) {
sourceSets.main {
jniLibs.srcDir 'libs'
}
externalNativeBuild {
//ndkBuild {
// path 'jni/Android.mk'
//}
cmake {
path '../../CMakeLists.txt'
version "3.25.1"
}
}
}
lintOptions {
abortOnError false
}
if (buildAsLibrary) {
libraryVariants.all { variant ->
variant.outputs.each { output ->
def outputFile = output.outputFile
if (outputFile != null && outputFile.name.endsWith(".aar")) {
def fileName = "org.libsdl.app.aar";
output.outputFile = new File(outputFile.parent, fileName);
}
}
}
}
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.core:core:1.7.0' // Use the latest version
}
task wrapper(type: Wrapper) {
gradleVersion = '7.3'
}
task prepareKotlinBuildScriptModel {
}
Binary file not shown.
+5
View File
@@ -0,0 +1,5 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored Executable
+234
View File
@@ -0,0 +1,234 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
##############################################################################
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_NAME="Gradle"
APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD=maximum
warn () {
echo "$*"
} >&2
die () {
echo
echo "$*"
echo
exit 1
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"
+89
View File
@@ -0,0 +1,89 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
+17
View File
@@ -0,0 +1,17 @@
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in [sdk]/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the proguardFiles
# directive in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}
+114
View File
@@ -0,0 +1,114 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Replace com.test.game with the identifier of your game below, e.g.
com.gamemaker.game
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.dishii.mm"
android:versionCode="2"
android:versionName="1.0.1"
android:installLocation="auto">
<!-- OpenGL ES 3.0 -->
<uses-feature android:glEsVersion="0x00030000"/>
<!-- Touchscreen support -->
<uses-feature
android:name="android.hardware.touchscreen"
android:required="false" />
<!-- Game controller support -->
<uses-feature
android:name="android.hardware.bluetooth"
android:required="false" />
<uses-feature
android:name="android.hardware.gamepad"
android:required="false" />
<uses-feature
android:name="android.hardware.usb.host"
android:required="false" />
<!-- External mouse input events -->
<uses-feature
android:name="android.hardware.type.pc"
android:required="false" />
<!-- Gyroscope support -->
<uses-feature
android:name="android.hardware.sensor.gyroscope"
android:required="false"/>
<!-- Audio recording support -->
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-feature
android:name="android.hardware.microphone"
android:required="false" /> -->
<!-- Allow downloading to the external storage on Android 5.1 and older -->
<!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" android:maxSdkVersion="22" /> -->
<!-- Allow access to Bluetooth devices -->
<!-- Currently this is just for Steam Controller support and requires setting SDL_HINT_JOYSTICK_HIDAPI_STEAM -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> -->
<!-- <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> -->
<!-- Allow access to the vibrator -->
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- if you want to capture audio, uncomment this. -->
<!-- <uses-permission android:name="android.permission.RECORD_AUDIO" /> -->
<!-- Create a Java class extending SDLActivity and place it in a
directory under app/src/main/java matching the package, e.g. app/src/main/java/com/gamemaker/game/MyGame.java
then replace "SDLActivity" with the name of your class (e.g. "MyGame")
in the XML below.
An example Java class can be found in README-android.md
-->
<application android:label="@string/app_name"
android:icon="@mipmap/ic_launcher"
android:allowBackup="true"
android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
android:hardwareAccelerated="true"
android:appCategory="game" >
<!-- Example of setting SDL hints from AndroidManifest.xml:
<meta-data android:name="SDL_ENV.SDL_ACCELEROMETER_AS_JOYSTICK" android:value="0"/>
-->
<meta-data android:name="SDL_ENV.SDL_ANDROID_TRAP_BACK_BUTTON" android:value="1"/>
<meta-data android:name="SDL_ENV.SDL_IOS_ORIENTATIONS" android:value="LandscapeLeft LandscapeRight"/>
<activity android:name="MainActivity"
android:label="@string/app_name"
android:alwaysRetainTaskState="true"
android:launchMode="singleInstance"
android:configChanges="layoutDirection|locale|orientation|uiMode|screenLayout|screenSize|smallestScreenSize|keyboard|keyboardHidden|navigation"
android:preferMinimalPostProcessing="true"
android:exported="true"
android:screenOrientation="landscape"
>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<!-- Let Android know that we can handle some USB devices and should receive this event -->
<intent-filter>
<action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
</intent-filter>
<!-- Drop file event -->
<!--
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="*/*" />
</intent-filter>
-->
</activity>
</application>
</manifest>
+2
View File
@@ -0,0 +1,2 @@
# Extractor Assets Copied by CMake during buildtime
assets/
File diff suppressed because it is too large Load Diff
Binary file not shown.

After

Width:  |  Height:  |  Size: 90 KiB

@@ -0,0 +1,61 @@
package com.dishii.mm;
import android.content.Context;
import android.content.res.AssetManager;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class AssetCopyUtil {
public static void copyAssetsToExternal(Context context, String assetsFolderPath, String externalFolderPath) throws IOException {
AssetManager assetManager = context.getAssets();
String[] assetFiles = assetManager.list(assetsFolderPath);
for (String assetFile : assetFiles) {
String assetPath = assetsFolderPath + File.separator + assetFile;
String externalPath = externalFolderPath + File.separator + assetFile;
if (assetManager.list(assetPath).length > 0) {
// It's a directory
// Check if the directory exists in the external storage
File externalDir = new File(externalPath);
if (!externalDir.exists()) {
externalDir.mkdirs(); // Create the directory if it doesn't exist
}
// Recursively copy contents of the directory
copyAssetsToExternal(context, assetPath, externalPath);
} else {
// It's a file
File externalFile = new File(externalPath);
if (!externalFile.exists()) {
// Check if the file exists in the external storage
InputStream in = null;
OutputStream out = null;
try {
in = assetManager.open(assetPath);
out = new FileOutputStream(externalPath);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
} finally {
if (in != null) {
in.close();
}
if (out != null) {
out.close();
}
}
}
}
}
}
}
@@ -0,0 +1,187 @@
package com.dishii.mm;
import org.libsdl.app.SDLActivity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.FileOutputStream;
import android.Manifest;
import android.content.pm.PackageManager;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.util.Log;
//This class is the main SDLActivity and just sets up a bunch of default files
public class MainActivity extends SDLActivity{
private static final int STORAGE_PERMISSION_REQUEST_CODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Check if storage permissions are granted
if (hasStoragePermission()) {
doVersionCheck();
setupFiles();
} else {
requestStoragePermission();
}
}
private void doVersionCheck(){
SharedPreferences preferences = getSharedPreferences("com.dishii.mm.prefs",Context.MODE_PRIVATE);
int currentVersion = BuildConfig.VERSION_CODE; // Use your app's version code
int storedVersion = preferences.getInt("appVersion", 1);
if (currentVersion > storedVersion) {
deleteOutdatedAssets();
preferences.edit().putInt("appVersion", currentVersion).apply();
}
}
private void deleteOutdatedAssets(){
File externalSohFile = new File(getExternalFilesDir(null), "2ship.o2r");
externalSohFile.delete();
File externalOotFile = new File(getExternalFilesDir(null), "mm.o2r");
externalOotFile.delete();
File externalAssetsFolder = new File(getExternalFilesDir(null), "assets");
deleteRecursive(externalAssetsFolder);
}
private void deleteRecursive(File fileOrDirectory) {
if (fileOrDirectory.isDirectory()) {
for (File child : fileOrDirectory.listFiles()) {
deleteRecursive(child);
}
}
fileOrDirectory.delete();
}
// Check if storage permission is granted
private boolean hasStoragePermission() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED &&
ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED;
}
// Request storage permission
private void requestStoragePermission() {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE},
STORAGE_PERMISSION_REQUEST_CODE);
}
// Handle permission request result
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == STORAGE_PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
setupFiles();
} else {
// Permission denied, handle accordingly (e.g., show a message)
}
}
}
private void setupFiles(){
//Copy assets folder for rom extraction
File externalAssetsDir = new File(getExternalFilesDir(null), "assets");
if (!externalAssetsDir.exists()) {
try {
externalAssetsDir.mkdirs();
AssetCopyUtil.copyAssetsToExternal(this, "assets", externalAssetsDir.getAbsolutePath());
} catch (IOException e) {
e.printStackTrace();
}
}
//Create empty mods folder
File externalModsDir = new File(getExternalFilesDir(null), "mods");
externalModsDir.mkdirs();
//Copy 2ship.o2r
File externalSohOtrFile = new File(getExternalFilesDir(null), "2ship.o2r");
if (!externalSohOtrFile.exists()) {
try {
InputStream in = getAssets().open("2ship.o2r");
OutputStream out = new FileOutputStream(externalSohOtrFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
private native void nativeHandleSelectedFile(String filePath);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 0 && resultCode == RESULT_OK) {
Uri selectedFileUri = data.getData();
String fileName = "MM.z64";
File destinationDirectory = getExternalFilesDir(null); // The second argument can specify a subdirectory, or you can pass null to use the root directory.
File destinationFile = new File(destinationDirectory, fileName);
if (destinationDirectory != null) {
try {
InputStream in = getContentResolver().openInputStream(selectedFileUri);
OutputStream out = new FileOutputStream(destinationFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
nativeHandleSelectedFile(destinationFile.getPath());
}
}
public void openFilePicker() {
// Create an Intent to open the file picker dialog
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
// Start the file picker dialog
startActivityForResult(intent, 0);
}
// Check if external storage is available and writable
private boolean isExternalStorageWritable() {
String state = Environment.getExternalStorageState();
return Environment.MEDIA_MOUNTED.equals(state);
}
}
@@ -0,0 +1,22 @@
package org.libsdl.app;
import android.hardware.usb.UsbDevice;
interface HIDDevice
{
public int getId();
public int getVendorId();
public int getProductId();
public String getSerialNumber();
public int getVersion();
public String getManufacturerName();
public String getProductName();
public UsbDevice getDevice();
public boolean open();
public int sendFeatureReport(byte[] report);
public int sendOutputReport(byte[] report);
public boolean getFeatureReport(byte[] report);
public void setFrozen(boolean frozen);
public void close();
public void shutdown();
}
File diff suppressed because it is too large Load Diff

Some files were not shown because too many files have changed in this diff Show More