Initial commit: Proyecto completo de Shipwright-develop
This commit is contained in:
79
.devcontainer/Dockerfile
Normal file
79
.devcontainer/Dockerfile
Normal file
@@ -0,0 +1,79 @@
|
||||
FROM mcr.microsoft.com/devcontainers/cpp:ubuntu-22.04
|
||||
|
||||
RUN apt-get update && apt-get upgrade -y \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# download and install cmake from source
|
||||
# this ensures we use the same version as in the github runner image
|
||||
RUN apt-get purge -y cmake || true
|
||||
ARG CMAKE_VERSION=3.31.11
|
||||
# download
|
||||
WORKDIR /tmp
|
||||
RUN curl -fsSL \
|
||||
https://github.com/Kitware/CMake/releases/download/v${CMAKE_VERSION}/cmake-${CMAKE_VERSION}.tar.gz \
|
||||
-o cmake.tar.gz \
|
||||
&& tar -xzf cmake.tar.gz \
|
||||
&& rm cmake.tar.gz
|
||||
# build and install
|
||||
WORKDIR /tmp/cmake-${CMAKE_VERSION}
|
||||
RUN ./bootstrap \
|
||||
--prefix=/usr/local \
|
||||
--parallel=$(nproc) \
|
||||
&& make -j$(nproc) \
|
||||
&& make install
|
||||
# clean up
|
||||
WORKDIR /
|
||||
RUN rm -rf /tmp/cmake-${CMAKE_VERSION}
|
||||
|
||||
# download and install tinyxml2 from source
|
||||
# this ensures we have the cmake files needed for find_package
|
||||
RUN apt-get purge -y libtinyxml2-dev || true
|
||||
ARG TINYXML2_VERSION=11.0.0
|
||||
# download
|
||||
WORKDIR /tmp
|
||||
RUN curl -fsSL \
|
||||
https://github.com/leethomason/tinyxml2/archive/refs/tags/${TINYXML2_VERSION}.tar.gz \
|
||||
-o tinyxml2.tar.gz \
|
||||
&& tar -xzf tinyxml2.tar.gz \
|
||||
&& rm tinyxml2.tar.gz
|
||||
# build and install
|
||||
WORKDIR /tmp/tinyxml2-${TINYXML2_VERSION}
|
||||
RUN cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local \
|
||||
&& cmake --build build --parallel $(nproc) \
|
||||
&& cmake --install build
|
||||
# clean up
|
||||
WORKDIR /
|
||||
RUN rm -rf /tmp/tinyxml2-${TINYXML2_VERSION}
|
||||
|
||||
# install apt dependencies
|
||||
RUN apt-get update && apt-get install -y \
|
||||
libusb-dev libusb-1.0-0-dev libsdl2-dev libsdl2-net-dev libpng-dev \
|
||||
libglew-dev nlohmann-json3-dev libspdlog-dev ninja-build libogg-dev \
|
||||
libopus-dev opus-tools libopusfile-dev libvorbis-dev libespeak-ng-dev \
|
||||
lsb-release git clang clang-format-14 zipcmp zipmerge ziptool \
|
||||
libopengl-dev libbz2-dev libzip-dev \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install latest SDL2
|
||||
RUN wget https://www.libsdl.org/release/SDL2-2.26.1.tar.gz && \
|
||||
tar -xzf SDL2-2.26.1.tar.gz && \
|
||||
cd SDL2-2.26.1 && \
|
||||
./configure && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf SDL2-2.26.1 && \
|
||||
rm SDL2-2.26.1.tar.gz && \
|
||||
cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||
|
||||
# Install latest SDL2_net
|
||||
RUN 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 && \
|
||||
cd SDL2_net-2.2.0 && \
|
||||
./configure && \
|
||||
make -j$(nproc) && \
|
||||
make install && \
|
||||
cd .. && \
|
||||
rm -rf SDL2_net-2.2.0 && \
|
||||
rm SDL2_net-2.2.0.tar.gz && \
|
||||
cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||
29
.devcontainer/devcontainer.json
Normal file
29
.devcontainer/devcontainer.json
Normal file
@@ -0,0 +1,29 @@
|
||||
// For format details, see https://aka.ms/devcontainer.json. For config options, see the
|
||||
// README at: https://github.com/devcontainers/templates/tree/main/src/cpp
|
||||
{
|
||||
"name": "SoH",
|
||||
"build": {
|
||||
"dockerfile": "Dockerfile"
|
||||
},
|
||||
|
||||
// Features to add to the dev container. More info: https://containers.dev/features.
|
||||
// "features": {},
|
||||
|
||||
// Configure tool-specific properties.
|
||||
"customizations": {
|
||||
// Configure properties specific to VS Code.
|
||||
"vscode": {
|
||||
"settings": {},
|
||||
"extensions": []
|
||||
}
|
||||
}
|
||||
|
||||
// Use 'forwardPorts' to make a list of ports inside the container available locally.
|
||||
// "forwardPorts": [],
|
||||
|
||||
// Use 'postCreateCommand' to run commands after the container is created.
|
||||
// "postCreateCommand": "gcc -v",
|
||||
|
||||
// Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
|
||||
// "remoteUser": "root"
|
||||
}
|
||||
1
.gitattributes
vendored
Normal file
1
.gitattributes
vendored
Normal file
@@ -0,0 +1 @@
|
||||
* text=auto eol=lf
|
||||
1
.github/workflows/apt-deps.txt
vendored
Normal file
1
.github/workflows/apt-deps.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
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 libogg-dev libopus-dev opus-tools libopusfile-dev libvorbis-dev libespeak-ng-dev
|
||||
21
.github/workflows/clang-format.yml
vendored
Normal file
21
.github/workflows/clang-format.yml
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
name: clang-format
|
||||
on: [pull_request]
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
clang-format:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
fetch-depth: 2
|
||||
- name: Install clang-format
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y clang-format-14
|
||||
- name: Run clang-format
|
||||
run: |
|
||||
./run-clang-format.sh
|
||||
git diff --exit-code
|
||||
329
.github/workflows/generate-builds.yml
vendored
Normal file
329
.github/workflows/generate-builds.yml
vendored
Normal file
@@ -0,0 +1,329 @@
|
||||
name: generate-builds
|
||||
on:
|
||||
push:
|
||||
pull_request:
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
|
||||
generate-soh-otr:
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
save: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
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) libzip-dev zipcmp zipmerge ziptool
|
||||
- name: Restore Cached deps folder
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-deps-${{ github.ref }}-
|
||||
${{ runner.os }}-deps-
|
||||
path: deps
|
||||
- name: Create deps folder
|
||||
run: mkdir -p deps
|
||||
- name: Install latest SDL
|
||||
run: |
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
if [ ! -d "deps/SDL2-2.30.3" ]; then
|
||||
wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz
|
||||
tar -xzf SDL2-2.30.3.tar.gz -C deps
|
||||
fi
|
||||
cd deps/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: Install latest tinyxml2
|
||||
run: |
|
||||
sudo apt-get remove libtinyxml2-dev
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
if [ ! -d "deps/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 -C deps
|
||||
fi
|
||||
cd deps/tinyxml2-10.0.0
|
||||
mkdir -p build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
sudo make install
|
||||
- name: Generate soh.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 GenerateSohOtr -j3
|
||||
- name: Upload soh.o2r
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: soh.o2r
|
||||
path: soh.o2r
|
||||
retention-days: 3
|
||||
|
||||
build-macos:
|
||||
needs: generate-soh-otr
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
create-symlink: true
|
||||
save: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
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: Restore Cached MacPorts
|
||||
id: restore-cache-macports
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
key: ${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-14-macports-${{ hashFiles('.github/workflows/macports-deps.txt') }}-
|
||||
${{ runner.os }}-14-macports-
|
||||
path: /opt/local/
|
||||
# Updated PATH applies to the next step and onwards
|
||||
- name: Install MacPorts (if necessary)
|
||||
run: |
|
||||
if command -v /opt/local/bin/port 2>&1 >/dev/null; then
|
||||
echo "MacPorts already installed"
|
||||
else
|
||||
echo "Installing MacPorts"
|
||||
wget https://github.com/macports/macports-base/releases/download/v2.11.5/MacPorts-2.11.5-14-Sonoma.pkg
|
||||
sudo installer -pkg ./MacPorts-2.11.5-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 soh.o2r
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: soh.o2r
|
||||
path: build-cmake/soh
|
||||
- name: Build SoH
|
||||
run: |
|
||||
export PATH="/usr/lib/ccache:/opt/homebrew/opt/ccache/libexec:/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" -DBUILD_REMOTE_CONTROL=1
|
||||
cmake --build build-cmake --config Release --parallel 10
|
||||
(cd build-cmake && cpack)
|
||||
|
||||
mv _packages/*.dmg SoH.dmg
|
||||
mv README.md readme.txt
|
||||
- name: Upload build
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: soh-mac
|
||||
path: |
|
||||
SoH.dmg
|
||||
readme.txt
|
||||
- name: Save Cache MacPorts
|
||||
if: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
key: ${{ steps.restore-cache-macports.outputs.cache-primary-key }}
|
||||
path: /opt/local/
|
||||
|
||||
build-linux:
|
||||
needs: generate-soh-otr
|
||||
runs-on: ubuntu-22.04
|
||||
steps:
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y $(cat .github/workflows/apt-deps.txt)
|
||||
- name: Configure ccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
save: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-ccache-${{ github.ref }}
|
||||
${{ runner.os }}-ccache
|
||||
- name: Restore Cached deps folder
|
||||
id: restore-cache-deps
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
key: ${{ runner.os }}-deps-${{ github.ref }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-deps-${{ github.ref }}-
|
||||
${{ runner.os }}-deps-
|
||||
path: deps
|
||||
- name: Create deps folder
|
||||
run: mkdir -p deps
|
||||
- name: Install latest SDL
|
||||
run: |
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
if [ ! -d "deps/SDL2-2.30.3" ]; then
|
||||
wget https://github.com/libsdl-org/SDL/releases/download/release-2.30.3/SDL2-2.30.3.tar.gz
|
||||
tar -xzf SDL2-2.30.3.tar.gz -C deps
|
||||
fi
|
||||
cd deps/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: Install latest SDL_net
|
||||
run: |
|
||||
export PATH="/usr/lib/ccache:/usr/local/opt/ccache/libexec:$PATH"
|
||||
if [ ! -d "deps/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 -C deps
|
||||
fi
|
||||
cd deps/SDL2_net-2.2.0
|
||||
./configure
|
||||
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 "deps/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 -C deps
|
||||
fi
|
||||
cd deps/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 "deps/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 -C deps
|
||||
fi
|
||||
cd deps/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 soh.o2r
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: soh.o2r
|
||||
path: build-cmake/soh
|
||||
- name: Build SoH
|
||||
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 -j3
|
||||
(cd build-cmake && cpack -G External)
|
||||
|
||||
mv README.md readme.txt
|
||||
mv build-cmake/*.appimage soh.appimage
|
||||
env:
|
||||
CC: gcc-12
|
||||
CXX: g++-12
|
||||
- name: Upload build
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: soh-linux
|
||||
path: |
|
||||
soh.appimage
|
||||
readme.txt
|
||||
- name: Save Cache deps folder
|
||||
if: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
key: ${{ steps.restore-cache-deps.outputs.cache-primary-key }}
|
||||
path: deps
|
||||
|
||||
build-windows:
|
||||
needs: generate-soh-otr
|
||||
runs-on: windows-latest
|
||||
steps:
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
choco install ninja -y
|
||||
Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue
|
||||
- name: Git Checkout
|
||||
uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
- name: Configure sccache
|
||||
uses: hendrikmuhs/ccache-action@v1.2
|
||||
with:
|
||||
variant: sccache
|
||||
max-size: "2G"
|
||||
evict-old-files: job
|
||||
save: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
key: ${{ runner.os }}-ccache-${{ github.ref }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-ccache-${{ github.ref }}
|
||||
${{ runner.os }}-ccache
|
||||
- name: Restore Cached VCPKG folder
|
||||
id: restore-cache-vcpkg
|
||||
uses: actions/cache/restore@v5
|
||||
with:
|
||||
key: ${{ runner.os }}-vcpkg-${{ github.ref }}-${{ github.sha }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-vcpkg-${{ github.ref }}-
|
||||
${{ runner.os }}-vcpkg-
|
||||
path: vcpkg
|
||||
- name: Configure Developer Command Prompt
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
- name: Download soh.o2r
|
||||
uses: actions/download-artifact@v7
|
||||
with:
|
||||
name: soh.o2r
|
||||
path: build-windows/soh
|
||||
- name: Build SoH
|
||||
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 -DCMAKE_C_COMPILER_LAUNCHER=sccache -DCMAKE_CXX_COMPILER_LAUNCHER=sccache -DBUILD_REMOTE_CONTROL=1
|
||||
cmake --build build-windows --config Release --parallel 10
|
||||
|
||||
(cd build-windows && cpack)
|
||||
cd ..
|
||||
mv _packages/*.zip _packages/soh-windows.zip
|
||||
- name: Unzip package
|
||||
run: Expand-Archive -Path _packages/soh-windows.zip -DestinationPath soh-windows
|
||||
- name: Upload build
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
name: soh-windows
|
||||
path: soh-windows
|
||||
- name: Save Cache VCPKG folder
|
||||
if: ${{ github.ref_name == github.event.repository.default_branch }}
|
||||
uses: actions/cache/save@v5
|
||||
with:
|
||||
key: ${{ steps.restore-cache-vcpkg.outputs.cache-primary-key }}
|
||||
path: vcpkg
|
||||
2
.github/workflows/gtar
vendored
Normal file
2
.github/workflows/gtar
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
#!/bin/sh
|
||||
exec sudo /opt/homebrew/bin/gtar.orig "$@"
|
||||
1
.github/workflows/macports-deps.txt
vendored
Normal file
1
.github/workflows/macports-deps.txt
vendored
Normal file
@@ -0,0 +1 @@
|
||||
libsdl2 +universal libsdl2_net +universal libpng +universal glew +universal libzip +universal nlohmann-json +universal tinyxml2 +universal libogg +universal libopus +universal opusfile +universal libvorbis +universal
|
||||
62
.github/workflows/pr-artifacts.yml
vendored
Normal file
62
.github/workflows/pr-artifacts.yml
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
name: pr-artifacts
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [generate-builds]
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
pr-artifacts:
|
||||
runs-on: ubuntu-latest
|
||||
if: ${{ github.event.workflow_run.event == 'pull_request' }}
|
||||
steps:
|
||||
- id: 'pr-number'
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
const {owner, repo} = context.repo;
|
||||
const pullHeadSHA = '${{github.event.workflow_run.head_sha}}';
|
||||
const pullUserId = ${{github.event.sender.id}};
|
||||
const prNumber = await (async () => {
|
||||
for await (const { data } of github.paginate.iterator(
|
||||
github.rest.pulls.list, { owner, repo }
|
||||
)) {
|
||||
for (const pull of data) {
|
||||
if (pull.head.sha === pullHeadSHA && pull.user.id === pullUserId) {
|
||||
return pull.number;
|
||||
}
|
||||
}
|
||||
}
|
||||
})();
|
||||
|
||||
if (!prNumber) {
|
||||
return core.error(`No matching pull request found`);
|
||||
}
|
||||
|
||||
return prNumber;
|
||||
- id: 'artifacts-text'
|
||||
uses: actions/github-script@v8
|
||||
with:
|
||||
result-encoding: string
|
||||
script: |
|
||||
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
run_id: context.payload.workflow_run.id,
|
||||
});
|
||||
|
||||
return allArtifacts.data.artifacts.reduce((acc, item) => {
|
||||
if (item.name === "soh.o2r") return acc;
|
||||
acc += `
|
||||
- [${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'
|
||||
uses: garrettjoecox/pr-section@4.0.0
|
||||
with:
|
||||
repo-token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
pr-number: ${{ steps.pr-number.outputs.result }}
|
||||
section-name: 'artifacts'
|
||||
section-value: '${{ steps.artifacts-text.outputs.result }}'
|
||||
72
.github/workflows/test-builds-on-distros.yml
vendored
Normal file
72
.github/workflows/test-builds-on-distros.yml
vendored
Normal file
@@ -0,0 +1,72 @@
|
||||
name: test-builds-on-distros
|
||||
on:
|
||||
workflow_dispatch: # by request
|
||||
concurrency:
|
||||
group: ${{ github.workflow }}-${{ github.ref }}
|
||||
cancel-in-progress: true
|
||||
jobs:
|
||||
build:
|
||||
strategy:
|
||||
matrix:
|
||||
image: ["archlinux:base", "opensuse/tumbleweed:latest", "ubuntu:mantic", "debian:bookworm", "fedora:39"]
|
||||
cc: ["gcc", "clang"]
|
||||
include:
|
||||
- cxx: g++
|
||||
cc: gcc
|
||||
- cxx: clang++
|
||||
cc: clang
|
||||
runs-on: ${{ (vars.LINUX_RUNNER && fromJSON(vars.LINUX_RUNNER)) || 'ubuntu-latest' }}
|
||||
container:
|
||||
image: ${{ matrix.image }}
|
||||
steps:
|
||||
- name: Install dependencies (pacman)
|
||||
if: ${{ matrix.image == 'archlinux:base' }}
|
||||
run: |
|
||||
echo arch
|
||||
echo pacman -S ${{ matrix.cc }} git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net
|
||||
pacman -Syu --noconfirm
|
||||
pacman -S --noconfirm ${{ matrix.cc }} git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net
|
||||
- name: Install dependencies (dnf)
|
||||
if: ${{ matrix.image == 'fedora:39' }}
|
||||
run: |
|
||||
echo fedora
|
||||
echo dnf install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} wget git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools tinyxml2-devel spdlog-devel
|
||||
dnf -y upgrade
|
||||
dnf -y install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} wget git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools tinyxml2-devel spdlog-devel
|
||||
- name: Install dependencies (apt)
|
||||
if: ${{ matrix.image == 'ubuntu:mantic' || matrix.image == 'debian:bookworm' }}
|
||||
run: |
|
||||
echo debian based
|
||||
echo apt-get install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'g++') || '' }} git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev
|
||||
apt-get update
|
||||
apt-get -y full-upgrade
|
||||
apt-get -y install ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'g++') || '' }} git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev
|
||||
- name: Install dependencies (zypper)
|
||||
if: ${{ matrix.image == 'opensuse/tumbleweed:latest' }}
|
||||
run: |
|
||||
echo openSUSE
|
||||
echo zypper in ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} ${{ matrix.cc == 'clang' && 'libstdc++-devel' || '' }} git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel
|
||||
zypper --non-interactive dup
|
||||
zypper --non-interactive in ${{ matrix.cc }} ${{ (matrix.cxx == 'g++' && 'gcc-c++') || '' }} ${{ matrix.cc == 'clang' && 'libstdc++-devel' || '' }} git cmake ninja SDL2-devel libpng16-devel libzip-devel libzip-tools nlohmann_json-devel tinyxml2-devel spdlog-devel
|
||||
- name: Install latest nlohmann
|
||||
if: ${{ matrix.image == 'fedora:39' }}
|
||||
run: |
|
||||
wget https://github.com/nlohmann/json/archive/refs/tags/v3.11.3.tar.gz
|
||||
tar -xzvf v3.11.3.tar.gz
|
||||
cd json-3.11.3
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ..
|
||||
make
|
||||
sudo make install
|
||||
- uses: actions/checkout@v6
|
||||
with:
|
||||
submodules: true
|
||||
- name: Build SoH
|
||||
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 -j3
|
||||
env:
|
||||
CC: ${{ matrix.cc }}
|
||||
CXX: ${{ matrix.cxx }}
|
||||
462
.gitignore
vendored
Normal file
462
.gitignore
vendored
Normal file
@@ -0,0 +1,462 @@
|
||||
# Cache files
|
||||
__pycache__/
|
||||
.pyc
|
||||
.DS_Store
|
||||
.cache/*
|
||||
|
||||
# Text editor remnants
|
||||
.vscode/*
|
||||
!.vscode/tasks.json
|
||||
|
||||
.vs/
|
||||
.idea/
|
||||
cmake-build-**
|
||||
venv/
|
||||
.cache/
|
||||
|
||||
# Project-specific ignores
|
||||
build/
|
||||
expected/
|
||||
notes/
|
||||
baserom/
|
||||
docs/doxygen/
|
||||
*.elf
|
||||
*.sra
|
||||
*.z64
|
||||
*.n64
|
||||
*.v64
|
||||
*.map
|
||||
*.dump
|
||||
out.txt
|
||||
*.sln
|
||||
*.vcxproj
|
||||
*.vcxproj.user
|
||||
*.vcxproj.filters
|
||||
|
||||
# Tool artifacts
|
||||
tools/mipspro7.2_compiler/
|
||||
tools/overlayhelpers/batchdisasm/output/*
|
||||
tools/overlayhelpers/batchdisasm/output2/*
|
||||
tools/overlayhelpers/batchdisasm/mipsdisasm/*
|
||||
tools/disasm/output/*
|
||||
tools/asmsplitter/asm/*
|
||||
tools/asmsplitter/c/*
|
||||
ctx.c
|
||||
tools/*dSYM/
|
||||
graphs/
|
||||
.netcoredbg_hist
|
||||
|
||||
# Assets
|
||||
*.png
|
||||
*.jpg
|
||||
*.mdli
|
||||
*.anmi
|
||||
*.obj
|
||||
*.mtl
|
||||
*.fbx
|
||||
!*_custom*
|
||||
.extracted-assets.json
|
||||
|
||||
!OTRExporter/assets/**/*.png
|
||||
|
||||
# Docs
|
||||
!docs/tutorial/
|
||||
|
||||
# Per-user configuration
|
||||
.python-version
|
||||
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
*.out
|
||||
*.o
|
||||
*.d
|
||||
lib/libgfxd/libgfxd.a
|
||||
ExporterTest/ExporterTest.a
|
||||
ZAPDUtils/ZAPDUtils.a
|
||||
build/
|
||||
external/
|
||||
ZAPDUtils/build/
|
||||
ZAPD/BuildInfo.h
|
||||
|
||||
DebugObj/*
|
||||
ReleaseObj/*
|
||||
.tags
|
||||
tags
|
||||
*.otr
|
||||
*.o2r
|
||||
*.sav
|
||||
shipofharkinian.ini
|
||||
shipofharkinian.json
|
||||
imgui.ini
|
||||
timesplitdata.json
|
||||
|
||||
# Switch Stuff
|
||||
|
||||
*.nro
|
||||
*.nacp
|
||||
ZAPDTR/ZAPDUtils/lib/*
|
||||
!/soh/icon.jpg
|
||||
|
||||
# Xcode
|
||||
xcuserdata/
|
||||
*.xcconfig
|
||||
*.xcodeproj/*
|
||||
!*.xcodeproj/project.pbxproj
|
||||
!*.xcodeproj/xcshareddata/
|
||||
!*.xcworkspace/contents.xcworkspacedata
|
||||
/*.gcno
|
||||
**/xcshareddata/WorkspaceSettings.xcsettings
|
||||
|
||||
# cmake
|
||||
CMakeLists.txt.user
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Testing
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
install_manifest.txt
|
||||
compile_commands.json
|
||||
CTestTestfile.cmake
|
||||
_deps
|
||||
_packages
|
||||
*/extract_assets_cmake*
|
||||
/build*
|
||||
|
||||
soh/src/boot/build.c
|
||||
soh/properties.h
|
||||
|
||||
# Tools
|
||||
/clang-format
|
||||
/clang-format.exe
|
||||
*.o2r
|
||||
9
.gitmodules
vendored
Normal file
9
.gitmodules
vendored
Normal file
@@ -0,0 +1,9 @@
|
||||
[submodule "libultraship"]
|
||||
path = libultraship
|
||||
url = https://github.com/kenix3/libultraship.git
|
||||
[submodule "ZAPDTR"]
|
||||
path = ZAPDTR
|
||||
url = https://github.com/harbourmasters/ZAPDTR
|
||||
[submodule "OTRExporter"]
|
||||
path = OTRExporter
|
||||
url = https://github.com/harbourmasters/OTRExporter
|
||||
86
.vscode/tasks.json
vendored
Normal file
86
.vscode/tasks.json
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
{
|
||||
"version": "2.0.0",
|
||||
"tasks": [
|
||||
{
|
||||
"label": "Setup CMake Project",
|
||||
"type": "shell",
|
||||
"command": "cmake",
|
||||
"args": [
|
||||
"-S",
|
||||
".",
|
||||
"-B",
|
||||
"build-cmake",
|
||||
"-G",
|
||||
"Ninja"
|
||||
],
|
||||
"windows": {
|
||||
"args": [
|
||||
"-S",
|
||||
".",
|
||||
"-B",
|
||||
"build/x64",
|
||||
"-G",
|
||||
"Visual Studio 17 2022",
|
||||
"-T",
|
||||
"v143",
|
||||
"-A",
|
||||
"x64"
|
||||
]
|
||||
},
|
||||
"group": "build",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Generate SOH OTR",
|
||||
"type": "shell",
|
||||
"command": "cmake",
|
||||
"args": [
|
||||
"--build",
|
||||
"build-cmake",
|
||||
"--target",
|
||||
"GenerateSohOtr",
|
||||
"--parallel"
|
||||
],
|
||||
"windows": {
|
||||
"args": [
|
||||
"--build",
|
||||
"./build/x64",
|
||||
"--target",
|
||||
"GenerateSohOtr"
|
||||
]
|
||||
},
|
||||
"group": "build",
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Build Project",
|
||||
"type": "shell",
|
||||
"command": "cmake",
|
||||
"args": [
|
||||
"--build",
|
||||
"build-cmake"
|
||||
],
|
||||
"windows": {
|
||||
"args": [
|
||||
"--build",
|
||||
"./build/x64"
|
||||
]
|
||||
},
|
||||
"group": {
|
||||
"kind": "build",
|
||||
"isDefault": true
|
||||
},
|
||||
"dependsOn": ["Generate SOH OTR"],
|
||||
"problemMatcher": []
|
||||
},
|
||||
{
|
||||
"label": "Build All",
|
||||
"dependsOrder": "sequence",
|
||||
"dependsOn": [
|
||||
"Setup CMake Project",
|
||||
"Generate SOH OTR",
|
||||
"Build Project"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
65
CMake/Default.cmake
Normal file
65
CMake/Default.cmake
Normal file
@@ -0,0 +1,65 @@
|
||||
################################################################################
|
||||
# Command for variable_watch. This command issues error message, if a variable
|
||||
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
|
||||
# variable_watch(<variable> property_reader_guard)
|
||||
################################################################################
|
||||
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
|
||||
if("${PROPERTY_READER_GUARD_DISABLED}")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
|
||||
message(FATAL_ERROR
|
||||
" Variable ${VARIABLE} is not supposed to be changed.\n"
|
||||
" It is used only for reading target property ${VARIABLE}.\n"
|
||||
" Use\n"
|
||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
|
||||
" or\n"
|
||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
|
||||
" instead.\n")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Create variable <name> with generator expression that expands to value of
|
||||
# target property <name>_<CONFIG>. If property is empty or not set then property
|
||||
# <name> is used instead. Variable <name> has watcher property_reader_guard that
|
||||
# doesn't allow to edit it.
|
||||
# create_property_reader(<name>)
|
||||
# Input:
|
||||
# name - Name of watched property and output variable
|
||||
################################################################################
|
||||
function(create_property_reader NAME)
|
||||
set(PROPERTY_READER_GUARD_DISABLED TRUE)
|
||||
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
|
||||
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
|
||||
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
|
||||
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
|
||||
variable_watch("${NAME}" property_reader_guard)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
|
||||
# set_config_specific_property(<name> <value>)
|
||||
# Input:
|
||||
# name - Prefix of property name
|
||||
# value - New value
|
||||
################################################################################
|
||||
function(set_config_specific_property NAME VALUE)
|
||||
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
|
||||
create_property_reader("TARGET_NAME")
|
||||
create_property_reader("OUTPUT_DIRECTORY")
|
||||
|
||||
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
|
||||
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
|
||||
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
|
||||
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
|
||||
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
|
||||
|
||||
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
||||
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
||||
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
||||
16
CMake/DefaultCXX.cmake
Normal file
16
CMake/DefaultCXX.cmake
Normal file
@@ -0,0 +1,16 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
|
||||
|
||||
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
|
||||
|
||||
if(MSVC)
|
||||
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
|
||||
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
|
||||
|
||||
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||||
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
|
||||
if (CMAKE_C_COMPILER_LAUNCHER MATCHES "ccache|sccache")
|
||||
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Z7")
|
||||
else()
|
||||
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
|
||||
endif()
|
||||
endif()
|
||||
61
CMake/FindOgg.cmake
Normal file
61
CMake/FindOgg.cmake
Normal file
@@ -0,0 +1,61 @@
|
||||
# - Find ogg
|
||||
# Find the native ogg includes and libraries
|
||||
#
|
||||
# OGG_INCLUDE_DIRS - where to find ogg.h, etc.
|
||||
# OGG_LIBRARIES - List of libraries when using ogg.
|
||||
# OGG_FOUND - True if ogg found.
|
||||
|
||||
if (OGG_INCLUDE_DIR)
|
||||
# Already in cache, be silent
|
||||
set(OGG_FIND_QUIETLY TRUE)
|
||||
endif ()
|
||||
|
||||
find_package (PkgConfig QUIET)
|
||||
pkg_check_modules (PC_OGG QUIET ogg>=1.3.0)
|
||||
|
||||
set (OGG_VERSION ${PC_OGG_VERSION})
|
||||
|
||||
find_path (OGG_INCLUDE_DIR ogg/ogg.h
|
||||
HINTS
|
||||
${PC_OGG_INCLUDEDIR}
|
||||
${PC_OGG_INCLUDE_DIRS}
|
||||
${OGG_ROOT}
|
||||
)
|
||||
# MSVC built ogg may be named ogg_static.
|
||||
# The provided project files name the library with the lib prefix.
|
||||
find_library (OGG_LIBRARY
|
||||
NAMES
|
||||
ogg
|
||||
ogg_static
|
||||
libogg
|
||||
libogg_static
|
||||
HINTS
|
||||
${PC_OGG_LIBDIR}
|
||||
${PC_OGG_LIBRARY_DIRS}
|
||||
${OGG_ROOT}
|
||||
)
|
||||
# Handle the QUIETLY and REQUIRED arguments and set OGG_FOUND
|
||||
# to TRUE if all listed variables are TRUE.
|
||||
include (FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args (Ogg
|
||||
REQUIRED_VARS
|
||||
OGG_LIBRARY
|
||||
OGG_INCLUDE_DIR
|
||||
VERSION_VAR
|
||||
OGG_VERSION
|
||||
)
|
||||
|
||||
if (OGG_FOUND)
|
||||
set (OGG_LIBRARIES ${OGG_LIBRARY})
|
||||
set (OGG_INCLUDE_DIRS ${OGG_INCLUDE_DIR})
|
||||
|
||||
if(NOT TARGET Ogg::ogg)
|
||||
add_library(Ogg::ogg UNKNOWN IMPORTED)
|
||||
set_target_properties(Ogg::ogg PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OGG_INCLUDE_DIRS}"
|
||||
IMPORTED_LOCATION "${OGG_LIBRARIES}"
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (OGG_INCLUDE_DIR OGG_LIBRARY)
|
||||
44
CMake/FindOpus.cmake
Normal file
44
CMake/FindOpus.cmake
Normal file
@@ -0,0 +1,44 @@
|
||||
# - FindOpus.cmake
|
||||
# Find the native opus includes and libraries
|
||||
#
|
||||
# OPUS_INCLUDE_DIRS - where to find opus/opus.h, etc.
|
||||
# OPUS_LIBRARIES - List of libraries when using libopus(file).
|
||||
# OPUS_FOUND - True if libopus found.
|
||||
|
||||
if(OPUS_INCLUDE_DIR AND OPUS_LIBRARY AND OPUSFILE_LIBRARY)
|
||||
# Already in cache, be silent
|
||||
set(OPUS_FIND_QUIETLY TRUE)
|
||||
endif(OPUS_INCLUDE_DIR AND OPUS_LIBRARY AND OPUSFILE_LIBRARY)
|
||||
|
||||
find_path(OPUS_INCLUDE_DIR
|
||||
NAMES opusfile.h
|
||||
PATH_SUFFIXES opus
|
||||
)
|
||||
|
||||
# MSVC built opus may be named opus_static
|
||||
# The provided project files name the library with the lib prefix.
|
||||
find_library(OPUS_LIBRARY
|
||||
NAMES opus opus_static libopus libopus_static
|
||||
)
|
||||
#find_library(OPUSFILE_LIBRARY
|
||||
# NAMES opusfile opusfile_static libopusfile libopusfile_static
|
||||
#)
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments and set OPUS_FOUND
|
||||
# to TRUE if all listed variables are TRUE.
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Opus DEFAULT_MSG
|
||||
OPUS_LIBRARY OPUS_INCLUDE_DIR
|
||||
)
|
||||
|
||||
if(OPUS_FOUND)
|
||||
set(OPUS_LIBRARIES ${OPUS_LIBRARY})
|
||||
set(OPUS_INCLUDE_DIRS ${OPUS_INCLUDE_DIR})
|
||||
if(NOT TARGET Opus::opus)
|
||||
add_library(Opus::opus UNKNOWN IMPORTED)
|
||||
set_target_properties(Opus::opus PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OPUS_INCLUDE_DIRS}"
|
||||
IMPORTED_LOCATION "${OPUS_LIBRARIES}"
|
||||
)
|
||||
endif()
|
||||
endif(OPUS_FOUND)
|
||||
63
CMake/FindOpusFile.cmake
Normal file
63
CMake/FindOpusFile.cmake
Normal file
@@ -0,0 +1,63 @@
|
||||
# FindOpusFile.cmake
|
||||
# Locate the libopusfile library and its dependencies (libopus and libogg).
|
||||
# Defines the following variables on success:
|
||||
# OPUSFILE_FOUND - Indicates if opusfile was found
|
||||
# OPUSFILE_INCLUDE_DIR - Directory containing opusfile.h
|
||||
# OPUSFILE_LIBRARY - Path to the opusfile library
|
||||
# OPUSFILE_LIBRARIES - Full list of libraries to link (opusfile, opus, ogg)
|
||||
|
||||
# Use pkg-config to find opusfile if available
|
||||
find_package(PkgConf)
|
||||
if(PKG_CONFIG_FOUND)
|
||||
pkg_check_modules(PC_OPUSFILE QUIET opusfile)
|
||||
endif()
|
||||
|
||||
# Search for the OpusFile header
|
||||
find_path(OPUSFILE_INCLUDE_DIR
|
||||
NAMES opusfile.h
|
||||
HINTS ${PC_OPUSFILE_INCLUDE_DIRS}
|
||||
PATHS /usr/include/opus /usr/local/include/opus /opt/local/include/opus /opt/homebrew/include/opus
|
||||
DOC "Directory where opusfile.h is located"
|
||||
)
|
||||
|
||||
# Search for the OpusFile library
|
||||
find_library(OPUSFILE_LIBRARY
|
||||
NAMES opusfile
|
||||
HINTS ${PC_OPUSFILE_LIBRARY_DIRS}
|
||||
DOC "Path to the libopusfile library"
|
||||
)
|
||||
|
||||
# Search for the Opus library (dependency of OpusFile)
|
||||
find_library(OPUS_LIBRARY
|
||||
NAMES opus
|
||||
DOC "Path to the libopus library (dependency of libopusfile)"
|
||||
)
|
||||
|
||||
# Search for the Ogg library (dependency of OpusFile)
|
||||
find_library(OGG_LIBRARY
|
||||
NAMES ogg
|
||||
DOC "Path to the libogg library (dependency of libopusfile)"
|
||||
)
|
||||
|
||||
# Check if all required components are found
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(OpusFile
|
||||
REQUIRED_VARS OPUSFILE_LIBRARY OPUSFILE_INCLUDE_DIR OPUS_LIBRARY OGG_LIBRARY
|
||||
VERSION_VAR OPUSFILE_VERSION
|
||||
)
|
||||
|
||||
# Define an imported target if everything is found
|
||||
if (OPUSFILE_FOUND)
|
||||
add_library(Opusfile::Opusfile INTERFACE IMPORTED)
|
||||
|
||||
set_target_properties(Opusfile::Opusfile PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${OPUSFILE_INCLUDE_DIR}"
|
||||
INTERFACE_LINK_LIBRARIES "${OPUSFILE_LIBRARY};${OPUS_LIBRARY};${OGG_LIBRARY}"
|
||||
)
|
||||
|
||||
# Optionally expose the include and libraries separately
|
||||
set(OPUSFILE_LIBRARIES ${OPUSFILE_LIBRARY} ${OPUS_LIBRARY} ${OGG_LIBRARY})
|
||||
set(OPUSFILE_INCLUDE_DIRS ${OPUSFILE_INCLUDE_DIR})
|
||||
else()
|
||||
set(OPUSFILE_FOUND FALSE)
|
||||
endif()
|
||||
210
CMake/FindVorbis.cmake
Normal file
210
CMake/FindVorbis.cmake
Normal file
@@ -0,0 +1,210 @@
|
||||
#[=======================================================================[.rst:
|
||||
FindVorbis
|
||||
----------
|
||||
|
||||
Finds the native vorbis, vorbisenc amd vorbisfile includes and libraries.
|
||||
|
||||
Imported Targets
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
This module provides the following imported targets, if found:
|
||||
|
||||
``Vorbis::vorbis``
|
||||
The Vorbis library
|
||||
``Vorbis::vorbisenc``
|
||||
The VorbisEnc library
|
||||
``Vorbis::vorbisfile``
|
||||
The VorbisFile library
|
||||
|
||||
Result Variables
|
||||
^^^^^^^^^^^^^^^^
|
||||
|
||||
This will define the following variables:
|
||||
|
||||
``Vorbis_Vorbis_INCLUDE_DIRS``
|
||||
List of include directories when using vorbis.
|
||||
``Vorbis_Enc_INCLUDE_DIRS``
|
||||
List of include directories when using vorbisenc.
|
||||
``Vorbis_File_INCLUDE_DIRS``
|
||||
List of include directories when using vorbisfile.
|
||||
``Vorbis_Vorbis_LIBRARIES``
|
||||
List of libraries when using vorbis.
|
||||
``Vorbis_Enc_LIBRARIES``
|
||||
List of libraries when using vorbisenc.
|
||||
``Vorbis_File_LIBRARIES``
|
||||
List of libraries when using vorbisfile.
|
||||
``Vorbis_FOUND``
|
||||
True if vorbis and requested components found.
|
||||
``Vorbis_Vorbis_FOUND``
|
||||
True if vorbis found.
|
||||
``Vorbis_Enc_FOUND``
|
||||
True if vorbisenc found.
|
||||
``Vorbis_Enc_FOUND``
|
||||
True if vorbisfile found.
|
||||
|
||||
Cache variables
|
||||
^^^^^^^^^^^^^^^
|
||||
|
||||
The following cache variables may also be set:
|
||||
|
||||
``Vorbis_Vorbis_INCLUDE_DIR``
|
||||
The directory containing ``vorbis/vorbis.h``.
|
||||
``Vorbis_Enc_INCLUDE_DIR``
|
||||
The directory containing ``vorbis/vorbisenc.h``.
|
||||
``Vorbis_File_INCLUDE_DIR``
|
||||
The directory containing ``vorbis/vorbisenc.h``.
|
||||
``Vorbis_Vorbis_LIBRARY``
|
||||
The path to the vorbis library.
|
||||
``Vorbis_Enc_LIBRARY``
|
||||
The path to the vorbisenc library.
|
||||
``Vorbis_File_LIBRARY``
|
||||
The path to the vorbisfile library.
|
||||
|
||||
Hints
|
||||
^^^^^
|
||||
|
||||
A user may set ``Vorbis_ROOT`` to a vorbis installation root to tell this module where to look.
|
||||
|
||||
#]=======================================================================]
|
||||
|
||||
if (Vorbis_Vorbis_INCLUDE_DIR)
|
||||
# Already in cache, be silent
|
||||
set (Vorbis_FIND_QUIETLY TRUE)
|
||||
endif ()
|
||||
|
||||
set (Vorbis_Vorbis_FIND_QUIETLY TRUE)
|
||||
set (Vorbis_Enc_FIND_QUIETLY TRUE)
|
||||
set (Vorbis_File_FIND_QUIETLY TRUE)
|
||||
|
||||
find_package (Ogg QUIET)
|
||||
|
||||
find_package (PkgConfig QUIET)
|
||||
pkg_check_modules (PC_Vorbis_Vorbis QUIET vorbis)
|
||||
pkg_check_modules (PC_Vorbis_Enc QUIET vorbisenc)
|
||||
pkg_check_modules (PC_Vorbis_File QUIET vorbisfile)
|
||||
|
||||
set (Vorbis_VERSION ${PC_Vorbis_Vorbis_VERSION})
|
||||
|
||||
find_path (Vorbis_Vorbis_INCLUDE_DIR vorbis/codec.h
|
||||
HINTS
|
||||
${PC_Vorbis_Vorbis_INCLUDEDIR}
|
||||
${PC_Vorbis_Vorbis_INCLUDE_DIRS}
|
||||
${Vorbis_ROOT}
|
||||
)
|
||||
|
||||
find_path (Vorbis_Enc_INCLUDE_DIR vorbis/vorbisenc.h
|
||||
HINTS
|
||||
${PC_Vorbis_Enc_INCLUDEDIR}
|
||||
${PC_Vorbis_Enc_INCLUDE_DIRS}
|
||||
${Vorbis_ROOT}
|
||||
)
|
||||
|
||||
find_path (Vorbis_File_INCLUDE_DIR vorbis/vorbisfile.h
|
||||
HINTS
|
||||
${PC_Vorbis_File_INCLUDEDIR}
|
||||
${PC_Vorbis_File_INCLUDE_DIRS}
|
||||
${Vorbis_ROOT}
|
||||
)
|
||||
|
||||
find_library (Vorbis_Vorbis_LIBRARY
|
||||
NAMES
|
||||
vorbis
|
||||
vorbis_static
|
||||
libvorbis
|
||||
libvorbis_static
|
||||
HINTS
|
||||
${PC_Vorbis_Vorbis_LIBDIR}
|
||||
${PC_Vorbis_Vorbis_LIBRARY_DIRS}
|
||||
${Vorbis_ROOT}
|
||||
)
|
||||
|
||||
find_library (Vorbis_Enc_LIBRARY
|
||||
NAMES
|
||||
vorbisenc
|
||||
vorbisenc_static
|
||||
libvorbisenc
|
||||
libvorbisenc_static
|
||||
HINTS
|
||||
${PC_Vorbis_Enc_LIBDIR}
|
||||
${PC_Vorbis_Enc_LIBRARY_DIRS}
|
||||
${Vorbis_ROOT}
|
||||
)
|
||||
|
||||
find_library (Vorbis_File_LIBRARY
|
||||
NAMES
|
||||
vorbisfile
|
||||
vorbisfile_static
|
||||
libvorbisfile
|
||||
libvorbisfile_static
|
||||
HINTS
|
||||
${PC_Vorbis_File_LIBDIR}
|
||||
${PC_Vorbis_File_LIBRARY_DIRS}
|
||||
${Vorbis_ROOT}
|
||||
)
|
||||
|
||||
include (FindPackageHandleStandardArgs)
|
||||
|
||||
if (Vorbis_Vorbis_LIBRARY AND Vorbis_Vorbis_INCLUDE_DIR AND Ogg_FOUND)
|
||||
set (Vorbis_Vorbis_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
if (Vorbis_Enc_LIBRARY AND Vorbis_Enc_INCLUDE_DIR AND Vorbis_Vorbis_FOUND)
|
||||
set (Vorbis_Enc_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
if (Vorbis_Vorbis_FOUND AND Vorbis_File_LIBRARY AND Vorbis_File_INCLUDE_DIR)
|
||||
set (Vorbis_File_FOUND TRUE)
|
||||
endif ()
|
||||
|
||||
find_package_handle_standard_args (Vorbis
|
||||
REQUIRED_VARS
|
||||
Vorbis_Vorbis_LIBRARY
|
||||
Vorbis_Vorbis_INCLUDE_DIR
|
||||
Ogg_FOUND
|
||||
HANDLE_COMPONENTS
|
||||
VERSION_VAR Vorbis_VERSION)
|
||||
|
||||
|
||||
if (Vorbis_Vorbis_FOUND)
|
||||
set (Vorbis_Vorbis_INCLUDE_DIRS ${VORBIS_INCLUDE_DIR})
|
||||
set (Vorbis_Vorbis_LIBRARIES ${VORBIS_LIBRARY} ${OGG_LIBRARIES})
|
||||
if (NOT TARGET Vorbis::vorbis)
|
||||
add_library (Vorbis::vorbis UNKNOWN IMPORTED)
|
||||
set_target_properties (Vorbis::vorbis PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_Vorbis_INCLUDE_DIR}"
|
||||
IMPORTED_LOCATION "${Vorbis_Vorbis_LIBRARY}"
|
||||
INTERFACE_LINK_LIBRARIES Ogg::ogg
|
||||
)
|
||||
endif ()
|
||||
|
||||
if (Vorbis_Enc_FOUND)
|
||||
set (Vorbis_Enc_INCLUDE_DIRS ${Vorbis_Enc_INCLUDE_DIR})
|
||||
set (Vorbis_Enc_LIBRARIES ${Vorbis_Enc_LIBRARY} ${Vorbis_Enc_LIBRARIES})
|
||||
if (NOT TARGET Vorbis::vorbisenc)
|
||||
add_library (Vorbis::vorbisenc UNKNOWN IMPORTED)
|
||||
set_target_properties (Vorbis::vorbisenc PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_Enc_INCLUDE_DIR}"
|
||||
IMPORTED_LOCATION "${Vorbis_Enc_LIBRARY}"
|
||||
INTERFACE_LINK_LIBRARIES Vorbis::vorbis
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
if (Vorbis_File_FOUND)
|
||||
set (Vorbis_File_INCLUDE_DIRS ${Vorbis_File_INCLUDE_DIR})
|
||||
set (Vorbis_File_LIBRARIES ${Vorbis_File_LIBRARY} ${Vorbis_File_LIBRARIES})
|
||||
if (NOT TARGET Vorbis::vorbisfile)
|
||||
add_library (Vorbis::vorbisfile UNKNOWN IMPORTED)
|
||||
set_target_properties (Vorbis::vorbisfile PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${Vorbis_File_INCLUDE_DIR}"
|
||||
IMPORTED_LOCATION "${Vorbis_File_LIBRARY}"
|
||||
INTERFACE_LINK_LIBRARIES Vorbis::vorbis
|
||||
)
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
endif ()
|
||||
|
||||
mark_as_advanced (Vorbis_Vorbis_INCLUDE_DIR Vorbis_Vorbis_LIBRARY)
|
||||
mark_as_advanced (Vorbis_Enc_INCLUDE_DIR Vorbis_Enc_LIBRARY)
|
||||
mark_as_advanced (Vorbis_File_INCLUDE_DIR Vorbis_File_LIBRARY)
|
||||
28
CMake/Packaging-2.cmake
Normal file
28
CMake/Packaging-2.cmake
Normal file
@@ -0,0 +1,28 @@
|
||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
|
||||
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0)
|
||||
set(CPACK_COMPONENTS_ALL "ship")
|
||||
|
||||
if (CPACK_GENERATOR STREQUAL "External")
|
||||
list(APPEND CPACK_COMPONENTS_ALL "extractor" "appimage")
|
||||
endif()
|
||||
|
||||
if (CPACK_GENERATOR MATCHES "DEB|RPM")
|
||||
# https://unix.stackexchange.com/a/11552/254512
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/opt/ship/bin")#/${CMAKE_PROJECT_VERSION}")
|
||||
set(CPACK_COMPONENT_INCLUDE_TOPLEVEL_DIRECTORY 0)
|
||||
elseif (CPACK_GENERATOR MATCHES "ZIP")
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "")
|
||||
endif()
|
||||
|
||||
if (CPACK_GENERATOR MATCHES "External")
|
||||
set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
|
||||
SET(CPACK_MONOLITHIC_INSTALL 1)
|
||||
set(CPACK_PACKAGING_INSTALL_PREFIX "/usr/bin")
|
||||
endif()
|
||||
|
||||
if (CPACK_GENERATOR MATCHES "Bundle")
|
||||
set(CPACK_BUNDLE_NAME "soh")
|
||||
set(CPACK_BUNDLE_PLIST "macosx/Info.plist")
|
||||
set(CPACK_BUNDLE_ICON "macosx/soh.icns")
|
||||
set(CPACK_BUNDLE_APPLE_CERT_APP "-")
|
||||
endif()
|
||||
90
CMake/Packaging.cmake
Normal file
90
CMake/Packaging.cmake
Normal file
@@ -0,0 +1,90 @@
|
||||
# these are cache variables, so they could be overwritten with -D,
|
||||
|
||||
set(CPACK_PACKAGE_NAME "${PROJECT_NAME}"
|
||||
CACHE STRING "The resulting package name"
|
||||
)
|
||||
|
||||
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Simple C++ application"
|
||||
CACHE STRING "Package description for the package metadata"
|
||||
)
|
||||
set(CPACK_PACKAGE_VENDOR "Some Company")
|
||||
|
||||
set(CPACK_VERBATIM_VARIABLES YES)
|
||||
|
||||
set(CPACK_PACKAGE_INSTALL_DIRECTORY ${CPACK_PACKAGE_NAME})
|
||||
SET(CPACK_OUTPUT_FILE_PREFIX "${CMAKE_SOURCE_DIR}/_packages")
|
||||
|
||||
set(CPACK_PACKAGE_VERSION_MAJOR ${PROJECT_VERSION_MAJOR})
|
||||
set(CPACK_PACKAGE_VERSION_MINOR ${PROJECT_VERSION_MINOR})
|
||||
set(CPACK_PACKAGE_VERSION_PATCH ${PROJECT_VERSION_PATCH})
|
||||
set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
|
||||
|
||||
set(CPACK_PACKAGE_CONTACT "YOUR@E-MAIL.net")
|
||||
set(CPACK_DEBIAN_PACKAGE_MAINTAINER "YOUR NAME")
|
||||
|
||||
#set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
|
||||
set(CPACK_RESOURCE_FILE_README "${CMAKE_SOURCE_DIR}/README.md")
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(CPACK_SYSTEM_NAME ${LSB_RELEASE_CODENAME_SHORT})
|
||||
# package name for deb
|
||||
# if set, then instead of some-application-0.9.2-Linux.deb
|
||||
# you'll get some-application_0.9.2_amd64.deb (note the underscores too)
|
||||
#set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
|
||||
execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
set( CPACK_DEBIAN_FILE_NAME ${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}-${CPACK_SYSTEM_NAME}-${ARCHITECTURE}.deb )
|
||||
# if you want every group to have its own package,
|
||||
# although the same happens if this is not sent (so it defaults to ONE_PER_GROUP)
|
||||
# and CPACK_DEB_COMPONENT_INSTALL is set to YES
|
||||
set(CPACK_COMPONENTS_GROUPING ALL_COMPONENTS_IN_ONE)#ONE_PER_GROUP)
|
||||
# without this you won't be able to pack only specified component
|
||||
set(CPACK_DEB_COMPONENT_INSTALL YES)
|
||||
|
||||
set(CPACK_EXTERNAL_ENABLE_STAGING YES)
|
||||
set(CPACK_EXTERNAL_PACKAGE_SCRIPT "${PROJECT_BINARY_DIR}/appimage-generate.cmake")
|
||||
|
||||
file(GENERATE
|
||||
OUTPUT "${PROJECT_BINARY_DIR}/appimage-generate.cmake"
|
||||
CONTENT [[
|
||||
include(CMakePrintHelpers)
|
||||
cmake_print_variables(CPACK_TEMPORARY_DIRECTORY)
|
||||
cmake_print_variables(CPACK_TOPLEVEL_DIRECTORY)
|
||||
cmake_print_variables(CPACK_PACKAGE_DIRECTORY)
|
||||
cmake_print_variables(CPACK_PACKAGE_FILE_NAME)
|
||||
|
||||
find_program(LINUXDEPLOY_EXECUTABLE
|
||||
NAMES linuxdeploy linuxdeploy-x86_64.AppImage
|
||||
PATHS ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy)
|
||||
|
||||
if (NOT LINUXDEPLOY_EXECUTABLE)
|
||||
message(STATUS "Downloading linuxdeploy")
|
||||
set(LINUXDEPLOY_EXECUTABLE ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/linuxdeploy)
|
||||
file(DOWNLOAD
|
||||
https://github.com/linuxdeploy/linuxdeploy/releases/download/1-alpha-20240109-1/linuxdeploy-x86_64.AppImage
|
||||
${LINUXDEPLOY_EXECUTABLE}
|
||||
INACTIVITY_TIMEOUT 10
|
||||
LOG ${CPACK_PACKAGE_DIRECTORY}/linuxdeploy/download.log
|
||||
STATUS LINUXDEPLOY_DOWNLOAD)
|
||||
execute_process(COMMAND chmod +x ${LINUXDEPLOY_EXECUTABLE} COMMAND_ECHO STDOUT)
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND
|
||||
${CMAKE_COMMAND} -E env
|
||||
OUTPUT=${CPACK_PACKAGE_FILE_NAME}.appimage
|
||||
VERSION=$<IF:$<BOOL:${CPACK_PACKAGE_VERSION}>,${CPACK_PACKAGE_VERSION},0.1.0>
|
||||
${LINUXDEPLOY_EXECUTABLE}
|
||||
--appimage-extract-and-run
|
||||
--appdir=${CPACK_TEMPORARY_DIRECTORY}
|
||||
--executable=$<TARGET_FILE:soh>
|
||||
$<$<BOOL:$<TARGET_PROPERTY:soh,APPIMAGE_DESKTOP_FILE>>:--desktop-file=$<TARGET_PROPERTY:soh,APPIMAGE_DESKTOP_FILE>>
|
||||
$<$<BOOL:$<TARGET_PROPERTY:soh,APPIMAGE_ICON_FILE>>:--icon-file=$<TARGET_PROPERTY:soh,APPIMAGE_ICON_FILE>>
|
||||
--output=appimage
|
||||
# --verbosity=2
|
||||
)
|
||||
]])
|
||||
|
||||
endif()
|
||||
|
||||
include(CPack)
|
||||
|
||||
248
CMake/Utils.cmake
Normal file
248
CMake/Utils.cmake
Normal file
@@ -0,0 +1,248 @@
|
||||
# utils file for projects came from visual studio solution with cmake-converter.
|
||||
|
||||
################################################################################
|
||||
# Wrap each token of the command with condition
|
||||
################################################################################
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
macro(prepare_commands)
|
||||
unset(TOKEN_ROLE)
|
||||
unset(COMMANDS)
|
||||
foreach(TOKEN ${ARG_COMMANDS})
|
||||
if("${TOKEN}" STREQUAL "COMMAND")
|
||||
set(TOKEN_ROLE "KEYWORD")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
|
||||
set(TOKEN_ROLE "CONDITION")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
|
||||
set(TOKEN_ROLE "COMMAND")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
|
||||
set(TOKEN_ROLE "ARG")
|
||||
endif()
|
||||
|
||||
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
|
||||
list(APPEND COMMANDS "${TOKEN}")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
|
||||
set(CONDITION ${TOKEN})
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
|
||||
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
|
||||
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
cmake_policy(POP)
|
||||
|
||||
################################################################################
|
||||
# Transform all the tokens to absolute paths
|
||||
################################################################################
|
||||
macro(prepare_output)
|
||||
unset(OUTPUT)
|
||||
foreach(TOKEN ${ARG_OUTPUT})
|
||||
if(IS_ABSOLUTE ${TOKEN})
|
||||
list(APPEND OUTPUT "${TOKEN}")
|
||||
else()
|
||||
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
################################################################################
|
||||
# Parse add_custom_command_if args.
|
||||
#
|
||||
# Input:
|
||||
# PRE_BUILD - Pre build event option
|
||||
# PRE_LINK - Pre link event option
|
||||
# POST_BUILD - Post build event option
|
||||
# TARGET - Target
|
||||
# OUTPUT - List of output files
|
||||
# DEPENDS - List of files on which the command depends
|
||||
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
|
||||
# condition2 commannd2 args2 ...)
|
||||
# Output:
|
||||
# OUTPUT - Output files
|
||||
# DEPENDS - Files on which the command depends
|
||||
# COMMENT - Comment
|
||||
# PRE_BUILD - TRUE/FALSE
|
||||
# PRE_LINK - TRUE/FALSE
|
||||
# POST_BUILD - TRUE/FALSE
|
||||
# TARGET - Target name
|
||||
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
|
||||
# NAME - Unique name for custom target
|
||||
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
|
||||
################################################################################
|
||||
function(add_custom_command_if_parse_arguments)
|
||||
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
|
||||
|
||||
if(WIN32)
|
||||
set(DUMMY "cd.")
|
||||
elseif(UNIX)
|
||||
set(DUMMY "true")
|
||||
endif()
|
||||
|
||||
prepare_commands()
|
||||
prepare_output()
|
||||
|
||||
set(DEPENDS "${ARG_DEPENDS}")
|
||||
set(COMMENT "${ARG_COMMENT}")
|
||||
set(PRE_BUILD "${ARG_PRE_BUILD}")
|
||||
set(PRE_LINK "${ARG_PRE_LINK}")
|
||||
set(POST_BUILD "${ARG_POST_BUILD}")
|
||||
set(TARGET "${ARG_TARGET}")
|
||||
if(PRE_BUILD)
|
||||
set(STEP "PRE_BUILD")
|
||||
elseif(PRE_LINK)
|
||||
set(STEP "PRE_LINK")
|
||||
elseif(POST_BUILD)
|
||||
set(STEP "POST_BUILD")
|
||||
endif()
|
||||
set(NAME "${TARGET}_${STEP}")
|
||||
|
||||
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
|
||||
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
|
||||
set(COMMENT "${COMMENT}" PARENT_SCOPE)
|
||||
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
|
||||
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
|
||||
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
|
||||
set(TARGET "${TARGET}" PARENT_SCOPE)
|
||||
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
|
||||
set(STEP "${STEP}" PARENT_SCOPE)
|
||||
set(NAME "${NAME}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Add conditional custom command
|
||||
#
|
||||
# Generating Files
|
||||
# The first signature is for adding a custom command to produce an output:
|
||||
# add_custom_command_if(
|
||||
# <OUTPUT output1 [output2 ...]>
|
||||
# <COMMANDS>
|
||||
# <COMMAND condition command1 [args1...]>
|
||||
# [COMMAND condition command2 [args2...]]
|
||||
# [DEPENDS [depends...]]
|
||||
# [COMMENT comment]
|
||||
#
|
||||
# Build Events
|
||||
# add_custom_command_if(
|
||||
# <TARGET target>
|
||||
# <PRE_BUILD | PRE_LINK | POST_BUILD>
|
||||
# <COMMAND condition command1 [args1...]>
|
||||
# [COMMAND condition command2 [args2...]]
|
||||
# [COMMENT comment]
|
||||
#
|
||||
# Input:
|
||||
# output - Output files the command is expected to produce
|
||||
# condition - Generator expression for wrapping the command
|
||||
# command - Command-line(s) to execute at build time.
|
||||
# args - Command`s args
|
||||
# depends - Files on which the command depends
|
||||
# comment - Display the given message before the commands are executed at
|
||||
# build time.
|
||||
# PRE_BUILD - Run before any other rules are executed within the target
|
||||
# PRE_LINK - Run after sources have been compiled but before linking the
|
||||
# binary
|
||||
# POST_BUILD - Run after all other rules within the target have been
|
||||
# executed
|
||||
################################################################################
|
||||
function(add_custom_command_if)
|
||||
add_custom_command_if_parse_arguments(${ARGN})
|
||||
|
||||
if(OUTPUT AND TARGET)
|
||||
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
|
||||
endif()
|
||||
|
||||
if(OUTPUT)
|
||||
add_custom_command(OUTPUT ${OUTPUT}
|
||||
${COMMANDS}
|
||||
DEPENDS ${DEPENDS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT ${COMMENT})
|
||||
elseif(TARGET)
|
||||
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
||||
add_custom_target(
|
||||
${NAME}
|
||||
${COMMANDS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT ${COMMENT})
|
||||
add_dependencies(${TARGET} ${NAME})
|
||||
else()
|
||||
add_custom_command(
|
||||
TARGET ${TARGET}
|
||||
${STEP}
|
||||
${COMMANDS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT ${COMMENT})
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Use props file for a target and configs
|
||||
# use_props(<target> <configs...> <props_file>)
|
||||
# Inside <props_file> there are following variables:
|
||||
# PROPS_TARGET - <target>
|
||||
# PROPS_CONFIG - One of <configs...>
|
||||
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
|
||||
# Input:
|
||||
# target - Target to apply props file
|
||||
# configs - Build configurations to apply props file
|
||||
# props_file - CMake script
|
||||
################################################################################
|
||||
macro(use_props TARGET CONFIGS PROPS_FILE)
|
||||
set(PROPS_TARGET "${TARGET}")
|
||||
foreach(PROPS_CONFIG ${CONFIGS})
|
||||
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
|
||||
|
||||
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
||||
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
|
||||
include("${ABSOLUTE_PROPS_FILE}")
|
||||
else()
|
||||
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
################################################################################
|
||||
# Add compile options to source file
|
||||
# source_file_compile_options(<source_file> [compile_options...])
|
||||
# Input:
|
||||
# source_file - Source file
|
||||
# compile_options - Options to add to COMPILE_FLAGS property
|
||||
################################################################################
|
||||
function(source_file_compile_options SOURCE_FILE)
|
||||
if("${ARGC}" LESS_EQUAL "1")
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
|
||||
|
||||
if(COMPILE_OPTIONS)
|
||||
list(APPEND COMPILE_OPTIONS ${ARGN})
|
||||
else()
|
||||
set(COMPILE_OPTIONS "${ARGN}")
|
||||
endif()
|
||||
|
||||
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Default properties of visual studio projects
|
||||
################################################################################
|
||||
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
|
||||
|
||||
function(get_linux_lsb_release_information)
|
||||
find_program(LSB_RELEASE_EXEC lsb_release)
|
||||
if(NOT LSB_RELEASE_EXEC)
|
||||
message(FATAL_ERROR "Could not detect lsb_release executable, can not gather required information")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --id OUTPUT_VARIABLE LSB_RELEASE_ID_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --release OUTPUT_VARIABLE LSB_RELEASE_VERSION_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
execute_process(COMMAND "${LSB_RELEASE_EXEC}" --short --codename OUTPUT_VARIABLE LSB_RELEASE_CODENAME_SHORT OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
set(LSB_RELEASE_ID_SHORT "${LSB_RELEASE_ID_SHORT}" PARENT_SCOPE)
|
||||
set(LSB_RELEASE_VERSION_SHORT "${LSB_RELEASE_VERSION_SHORT}" PARENT_SCOPE)
|
||||
set(LSB_RELEASE_CODENAME_SHORT "${LSB_RELEASE_CODENAME_SHORT}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
191
CMake/automate-vcpkg.cmake
Normal file
191
CMake/automate-vcpkg.cmake
Normal file
@@ -0,0 +1,191 @@
|
||||
#------------------------------------------------------------------------------------------------------------
|
||||
#
|
||||
# Automate-VCPKG by Andre Taulien
|
||||
# ===============================
|
||||
#
|
||||
# Project Repository: https://github.com/REGoth-project/Automate-VCPKG
|
||||
# License ..........: MIT, see end of file.
|
||||
#
|
||||
# Based on: https://github.com/sutambe/cpptruths/blob/vcpkg_cmake_blog/cpp0x/vcpkg_test/CMakeLists.txt
|
||||
#
|
||||
#
|
||||
# While [Vcpkg](https://github.com/microsoft/vcpkg) on it's own is awesome, it does add
|
||||
# a little bit of complexity to getting a project to build. Even more if the one trying
|
||||
# to compile your application is not too fond of the commandline. Additionally, CMake
|
||||
# commands tend to get rather long with the toolchain path.
|
||||
#
|
||||
# To keep things simple for new users who just want to get the project to build, this
|
||||
# script offers a solution.
|
||||
#
|
||||
# Lets assume your main `CMakelists.txt` looks something like this:
|
||||
#
|
||||
# cmake_minimum_required (VERSION 3.12.0)
|
||||
# project (MyProject)
|
||||
#
|
||||
# add_executable(MyExecutable main.c)
|
||||
#
|
||||
# To integrate Vcpkg into that `CMakelists.txt`, simple put the following lines before the
|
||||
# call to `project(MyProject)`:
|
||||
#
|
||||
# include(cmake/automate-vcpkg.cmake)
|
||||
#
|
||||
# vcpkg_bootstrap()
|
||||
# vcpkg_install_packages(libsquish physfs)
|
||||
#
|
||||
# The call to `vcpkg_bootstrap()` will clone the official Vcpkg repository and bootstrap it.
|
||||
# If it detected an existing environment variable defining a valid `VCPKG_ROOT`, it will
|
||||
# update the existing installation of Vcpkg.
|
||||
#
|
||||
# Arguments to `vcpkg_install_packages()` are the packages you want to install using Vcpkg.
|
||||
#
|
||||
# If you want to keep the possibility for users to chose their own copy of Vcpkg, you can
|
||||
# simply not run the code snippet mentioned above, something like this will work:
|
||||
#
|
||||
# option(SKIP_AUTOMATE_VCPKG "When ON, you will need to built the packages
|
||||
# required by MyProject on your own or supply your own vcpkg toolchain.")
|
||||
#
|
||||
# if (NOT SKIP_AUTOMATE_VCPKG)
|
||||
# include(cmake/automate-vcpkg.cmake)
|
||||
#
|
||||
# vcpkg_bootstrap()
|
||||
# vcpkg_install_packages(libsquish physfs)
|
||||
# endif()
|
||||
#
|
||||
# Then, the user has to supply the packages on their own, be it through Vcpkg or manually
|
||||
# specifying their locations.
|
||||
#------------------------------------------------------------------------------------------------------------
|
||||
|
||||
cmake_minimum_required (VERSION 3.12)
|
||||
|
||||
if(WIN32)
|
||||
set(VCPKG_FALLBACK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/vcpkg CACHE STRING "vcpkg configuration directory to use if vcpkg was not installed on the system before")
|
||||
else()
|
||||
set(VCPKG_FALLBACK_ROOT ${CMAKE_CURRENT_BINARY_DIR}/.vcpkg CACHE STRING "vcpkg configuration directory to use if vcpkg was not installed on the system before")
|
||||
endif()
|
||||
|
||||
# On Windows, Vcpkg defaults to x86, even on x64 systems. If we're
|
||||
# doing a 64-bit build, we need to fix that.
|
||||
if (WIN32)
|
||||
|
||||
# Since the compiler checks haven't run yet, we need to figure
|
||||
# out the value of CMAKE_SIZEOF_VOID_P ourselfs
|
||||
|
||||
include(CheckTypeSize)
|
||||
enable_language(C)
|
||||
check_type_size("void*" SIZEOF_VOID_P BUILTIN_TYPES_ONLY)
|
||||
|
||||
if (SIZEOF_VOID_P EQUAL 8)
|
||||
message(STATUS "Using Vcpkg triplet 'x64-windows'")
|
||||
|
||||
set(VCPKG_TRIPLET x64-windows)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT DEFINED VCPKG_ROOT)
|
||||
if(NOT DEFINED ENV{VCPKG_ROOT})
|
||||
set(VCPKG_ROOT ${VCPKG_FALLBACK_ROOT})
|
||||
else()
|
||||
set(VCPKG_ROOT $ENV{VCPKG_ROOT})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# Installs a new copy of Vcpkg or updates an existing one
|
||||
macro(vcpkg_bootstrap)
|
||||
_install_or_update_vcpkg()
|
||||
|
||||
# Find out whether the user supplied their own VCPKG toolchain file
|
||||
if(NOT DEFINED ${CMAKE_TOOLCHAIN_FILE})
|
||||
# We know this wasn't set before so we need point the toolchain file to the newly found VCPKG_ROOT
|
||||
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake CACHE STRING "")
|
||||
|
||||
# Just setting vcpkg.cmake as toolchain file does not seem to actually pull in the code
|
||||
include(${VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake)
|
||||
|
||||
set(AUTOMATE_VCPKG_USE_SYSTEM_VCPKG OFF)
|
||||
else()
|
||||
# VCPKG_ROOT has been defined by the toolchain file already
|
||||
set(AUTOMATE_VCPKG_USE_SYSTEM_VCPKG ON)
|
||||
endif()
|
||||
|
||||
message(STATUS "Automate VCPKG status:")
|
||||
message(STATUS " VCPKG_ROOT.....: ${VCPKG_ROOT}")
|
||||
message(STATUS " VCPKG_EXEC.....: ${VCPKG_EXEC}")
|
||||
message(STATUS " VCPKG_BOOTSTRAP: ${VCPKG_BOOTSTRAP}")
|
||||
endmacro()
|
||||
|
||||
macro(_install_or_update_vcpkg)
|
||||
if(NOT EXISTS ${VCPKG_ROOT})
|
||||
message(STATUS "Cloning vcpkg in ${VCPKG_ROOT}")
|
||||
execute_process(COMMAND git clone https://github.com/Microsoft/vcpkg.git ${VCPKG_ROOT} --depth 1)
|
||||
|
||||
# If a reproducible build is desired (and potentially old libraries are # ok), uncomment the
|
||||
# following line and pin the vcpkg repository to a specific githash.
|
||||
# execute_process(COMMAND git checkout 745a0aea597771a580d0b0f4886ea1e3a94dbca6 WORKING_DIRECTORY ${VCPKG_ROOT})
|
||||
else()
|
||||
# The following command has no effect if the vcpkg repository is in a detached head state.
|
||||
message(STATUS "Auto-updating vcpkg in ${VCPKG_ROOT}")
|
||||
execute_process(COMMAND git pull WORKING_DIRECTORY ${VCPKG_ROOT})
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS ${VCPKG_ROOT}/README.md)
|
||||
message(FATAL_ERROR "***** FATAL ERROR: Could not clone vcpkg *****")
|
||||
endif()
|
||||
|
||||
if(WIN32)
|
||||
set(VCPKG_EXEC ${VCPKG_ROOT}/vcpkg.exe)
|
||||
set(VCPKG_BOOTSTRAP ${VCPKG_ROOT}/bootstrap-vcpkg.bat)
|
||||
else()
|
||||
set(VCPKG_EXEC ${VCPKG_ROOT}/vcpkg)
|
||||
set(VCPKG_BOOTSTRAP ${VCPKG_ROOT}/bootstrap-vcpkg.sh)
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS ${VCPKG_EXEC})
|
||||
message("Bootstrapping vcpkg in ${VCPKG_ROOT}")
|
||||
execute_process(COMMAND ${VCPKG_BOOTSTRAP} WORKING_DIRECTORY ${VCPKG_ROOT})
|
||||
endif()
|
||||
|
||||
if(NOT EXISTS ${VCPKG_EXEC})
|
||||
message(FATAL_ERROR "***** FATAL ERROR: Could not bootstrap vcpkg *****")
|
||||
endif()
|
||||
|
||||
endmacro()
|
||||
|
||||
# Installs the list of packages given as parameters using Vcpkg
|
||||
macro(vcpkg_install_packages)
|
||||
|
||||
# Need the given list to be space-separated
|
||||
#string (REPLACE ";" " " PACKAGES_LIST_STR "${ARGN}")
|
||||
|
||||
message(STATUS "Installing/Updating the following vcpkg-packages: ${PACKAGES_LIST_STR}")
|
||||
|
||||
if (VCPKG_TRIPLET)
|
||||
set(ENV{VCPKG_DEFAULT_TRIPLET} "${VCPKG_TRIPLET}")
|
||||
endif()
|
||||
|
||||
execute_process(
|
||||
COMMAND ${VCPKG_EXEC} install ${ARGN}
|
||||
WORKING_DIRECTORY ${VCPKG_ROOT}
|
||||
)
|
||||
endmacro()
|
||||
|
||||
# MIT License
|
||||
#
|
||||
# Copyright (c) 2019 REGoth-project
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to deal
|
||||
# in the Software without restriction, including without limitation the rights
|
||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
# copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in all
|
||||
# copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
# SOFTWARE.
|
||||
20
CMake/lus-cvars.cmake
Normal file
20
CMake/lus-cvars.cmake
Normal file
@@ -0,0 +1,20 @@
|
||||
set(CVAR_VSYNC_ENABLED "${CVAR_PREFIX_SETTING}.VsyncEnabled" CACHE STRING "")
|
||||
set(CVAR_Z_FIGHTING_MODE "${CVAR_PREFIX_SETTING}.ZFightingMode" CACHE STRING "")
|
||||
set(CVAR_INTERNAL_RESOLUTION "${CVAR_PREFIX_SETTING}.InternalResolution" CACHE STRING "")
|
||||
set(CVAR_MSAA_VALUE "${CVAR_PREFIX_SETTING}.MSAAValue" CACHE STRING "")
|
||||
set(CVAR_SDL_WINDOWED_FULLSCREEN "${CVAR_PREFIX_SETTING}.SdlWindowedFullscreen" CACHE STRING "")
|
||||
set(CVAR_TEXTURE_FILTER "${CVAR_PREFIX_SETTING}.TextureFilter" CACHE STRING "")
|
||||
set(CVAR_IMGUI_CONTROLLER_NAV "${CVAR_PREFIX_SETTING}.ControlNav" CACHE STRING "")
|
||||
set(CVAR_CONSOLE_WINDOW_OPEN "${CVAR_PREFIX_WINDOW}.Console" CACHE STRING "")
|
||||
set(CVAR_CONTROLLER_DISCONNECTED_WINDOW_OPEN "${CVAR_PREFIX_WINDOW}.ControllerDisconnected" CACHE STRING "")
|
||||
set(CVAR_CONTROLLER_REORDERING_WINDOW_OPEN "${CVAR_PREFIX_WINDOW}.ControllerReordering" CACHE STRING "")
|
||||
set(CVAR_GFX_DEBUGGER_WINDOW_OPEN "${CVAR_PREFIX_WINDOW}.GfxDebugger" CACHE STRING "")
|
||||
set(CVAR_STATS_WINDOW_OPEN "${CVAR_PREFIX_WINDOW}.Stats" CACHE STRING "")
|
||||
set(CVAR_ENABLE_MULTI_VIEWPORTS "${CVAR_PREFIX_SETTING}.EnableMultiViewports" CACHE STRING "")
|
||||
set(CVAR_LOW_RES_MODE "${CVAR_PREFIX_SETTING}.LowResMode" CACHE STRING "")
|
||||
set(CVAR_SIMULATED_INPUT_LAG "${CVAR_PREFIX_SETTING}.SimulatedInputLag" CACHE STRING "")
|
||||
set(CVAR_GAME_OVERLAY_FONT "${CVAR_PREFIX_SETTING}.OverlayFont" CACHE STRING "")
|
||||
set(CVAR_MENU_BAR_OPEN "${CVAR_PREFIX_SETTING}.OpenMenuBar" CACHE STRING "")
|
||||
set(CVAR_PREFIX_CONTROLLERS "${CVAR_PREFIX_SETTING}.Controllers" CACHE STRING "")
|
||||
set(CVAR_PREFIX_ADVANCED_RESOLUTION "${CVAR_PREFIX_SETTING}.AdvancedResolution" CACHE STRING "")
|
||||
include("libultraship/cmake/cvars.cmake")
|
||||
30
CMake/soh-cvars.cmake
Normal file
30
CMake/soh-cvars.cmake
Normal file
@@ -0,0 +1,30 @@
|
||||
set(CVAR_PREFIX_RANDOMIZER_ENHANCEMENT "gRandoEnhancements")
|
||||
set(CVAR_PREFIX_RANDOMIZER_SETTING "gRandoSettings")
|
||||
set(CVAR_PREFIX_COSMETIC "gCosmetics")
|
||||
set(CVAR_PREFIX_AUDIO "gAudioEditor")
|
||||
set(CVAR_PREFIX_CHEAT "gCheats")
|
||||
set(CVAR_PREFIX_ENHANCEMENT "gEnhancements")
|
||||
set(CVAR_PREFIX_SETTING "gSettings")
|
||||
set(CVAR_PREFIX_WINDOW "gOpenWindows")
|
||||
set(CVAR_PREFIX_TRACKER "gTrackers")
|
||||
set(CVAR_PREFIX_DEVELOPER_TOOLS "gDeveloperTools")
|
||||
set(CVAR_PREFIX_GENERAL "gGeneral")
|
||||
set(CVAR_PREFIX_REMOTE "gRemote")
|
||||
set(CVAR_PREFIX_GAMEPLAY_STATS "gGameplayStats")
|
||||
set(CVAR_PREFIX_TIME_DISPLAY "gTimeDisplay")
|
||||
add_compile_definitions(
|
||||
CVAR_PREFIX_RANDOMIZER_ENHANCEMENT="${CVAR_PREFIX_RANDOMIZER_ENHANCEMENT}"
|
||||
CVAR_PREFIX_RANDOMIZER_SETTING="${CVAR_PREFIX_RANDOMIZER_SETTING}"
|
||||
CVAR_PREFIX_COSMETIC="${CVAR_PREFIX_COSMETIC}"
|
||||
CVAR_PREFIX_AUDIO="${CVAR_PREFIX_AUDIO}"
|
||||
CVAR_PREFIX_CHEAT="${CVAR_PREFIX_CHEAT}"
|
||||
CVAR_PREFIX_ENHANCEMENT="${CVAR_PREFIX_ENHANCEMENT}"
|
||||
CVAR_PREFIX_SETTING="${CVAR_PREFIX_SETTING}"
|
||||
CVAR_PREFIX_WINDOW="${CVAR_PREFIX_WINDOW}"
|
||||
CVAR_PREFIX_TRACKER="${CVAR_PREFIX_TRACKER}"
|
||||
CVAR_PREFIX_DEVELOPER_TOOLS="${CVAR_PREFIX_DEVELOPER_TOOLS}"
|
||||
CVAR_PREFIX_GENERAL="${CVAR_PREFIX_GENERAL}"
|
||||
CVAR_PREFIX_REMOTE="${CVAR_PREFIX_REMOTE}"
|
||||
CVAR_PREFIX_GAMEPLAY_STATS="${CVAR_PREFIX_GAMEPLAY_STATS}"
|
||||
CVAR_PREFIX_TIME_DISPLAY="${CVAR_PREFIX_TIME_DISPLAY}"
|
||||
)
|
||||
299
CMakeLists.txt
Normal file
299
CMakeLists.txt
Normal file
@@ -0,0 +1,299 @@
|
||||
cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR)
|
||||
|
||||
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
|
||||
set(CMAKE_C_STANDARD 23 CACHE STRING "The C standard to use")
|
||||
|
||||
set(CMAKE_OSX_DEPLOYMENT_TARGET "10.15" CACHE STRING "Minimum OS X deployment version")
|
||||
|
||||
project(Ship VERSION 9.2.0 LANGUAGES C CXX)
|
||||
include(CMake/soh-cvars.cmake)
|
||||
include(CMake/lus-cvars.cmake)
|
||||
set(SPDLOG_LEVEL_TRACE 0)
|
||||
set(SPDLOG_LEVEL_OFF 6)
|
||||
set(SPDLOG_MIN_CUTOFF SPDLOG_LEVEL_TRACE CACHE STRING "cutoff at trace")
|
||||
|
||||
option(SUPPRESS_WARNINGS "Suppress warnings in LUS and src (decomp)" ON)
|
||||
if(SUPPRESS_WARNINGS)
|
||||
MESSAGE("Suppressing warnings in LUS and src")
|
||||
if(MSVC)
|
||||
set(WARNING_OVERRIDE /w)
|
||||
else()
|
||||
set(WARNING_OVERRIDE -w)
|
||||
endif()
|
||||
else()
|
||||
MESSAGE("Skipping warning suppression")
|
||||
endif()
|
||||
|
||||
set(NATO_PHONETIC_ALPHABET
|
||||
"Alfa" "Bravo" "Charlie" "Delta" "Echo" "Foxtrot" "Golf" "Hotel"
|
||||
"India" "Juliett" "Kilo" "Lima" "Mike" "November" "Oscar" "Papa"
|
||||
"Quebec" "Romeo" "Sierra" "Tango" "Uniform" "Victor" "Whiskey"
|
||||
"Xray" "Yankee" "Zulu"
|
||||
)
|
||||
|
||||
# Get the patch version number from the project version
|
||||
math(EXPR PATCH_INDEX "${PROJECT_VERSION_PATCH}")
|
||||
|
||||
# Use the patch number to select the correct word
|
||||
list(GET NATO_PHONETIC_ALPHABET ${PATCH_INDEX} PROJECT_PATCH_WORD)
|
||||
|
||||
set(PROJECT_BUILD_NAME "Ackbar ${PROJECT_PATCH_WORD}" CACHE STRING "" FORCE)
|
||||
set(PROJECT_TEAM "github.com/harbourmasters" CACHE STRING "" FORCE)
|
||||
|
||||
execute_process(
|
||||
COMMAND git branch --show-current
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_BRANCH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
set(CMAKE_PROJECT_GIT_BRANCH "${GIT_BRANCH}" CACHE STRING "Git branch" FORCE)
|
||||
|
||||
execute_process(
|
||||
COMMAND git rev-parse HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_COMMIT_HASH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
# Get only the first 7 characters of the hash
|
||||
string(SUBSTRING "${GIT_COMMIT_HASH}" 0 7 SHORT_COMMIT_HASH)
|
||||
|
||||
set(CMAKE_PROJECT_GIT_COMMIT_HASH "${SHORT_COMMIT_HASH}" CACHE STRING "Git commit hash" FORCE)
|
||||
|
||||
execute_process(
|
||||
COMMAND git describe --tags --abbrev=0 --exact-match HEAD
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
OUTPUT_VARIABLE GIT_COMMIT_TAG
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE
|
||||
)
|
||||
|
||||
if(NOT GIT_COMMIT_TAG)
|
||||
set(GIT_COMMIT_TAG "" CACHE STRING "Git commit tag" FORCE)
|
||||
endif()
|
||||
|
||||
set(CMAKE_PROJECT_GIT_COMMIT_TAG "${GIT_COMMIT_TAG}" CACHE STRING "Git commit tag" FORCE)
|
||||
|
||||
set_property(DIRECTORY ${CMAKE_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT soh)
|
||||
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/MP>)
|
||||
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/utf-8>)
|
||||
add_compile_options($<$<CXX_COMPILER_ID:MSVC>:/Zc:preprocessor>)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
include(CMake/automate-vcpkg.cmake)
|
||||
|
||||
set(VCPKG_TRIPLET x64-windows-static)
|
||||
set(VCPKG_TARGET_TRIPLET x64-windows-static)
|
||||
|
||||
vcpkg_bootstrap()
|
||||
vcpkg_install_packages(zlib bzip2 libzip libpng sdl2 sdl2-net glew glfw3 nlohmann-json tinyxml2 spdlog libogg libvorbis opus opusfile)
|
||||
if (CMAKE_C_COMPILER_LAUNCHER MATCHES "ccache|sccache")
|
||||
set(CMAKE_MSVC_DEBUG_INFORMATION_FORMAT Embedded)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Set target arch type if empty. Visual studio solution generator provides it.
|
||||
################################################################################
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
if(NOT CMAKE_VS_PLATFORM_NAME)
|
||||
set(CMAKE_VS_PLATFORM_NAME "x64")
|
||||
endif()
|
||||
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
|
||||
|
||||
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
|
||||
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
|
||||
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Global configuration types
|
||||
################################################################################
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
|
||||
set(CMAKE_C_FLAGS_DEBUG "-g -ffast-math -DDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -ffast-math -DDEBUG")
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O3 -ffast-math -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -ffast-math -DNDEBUG")
|
||||
else()
|
||||
set(CMAKE_C_FLAGS_RELEASE "-O2 -DNDEBUG")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -DNDEBUG")
|
||||
set(CMAKE_OBJCXX_FLAGS_RELEASE "-O2 -DNDEBUG")
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_BUILD_TYPE )
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Common utils
|
||||
################################################################################
|
||||
include(CMake/Utils.cmake)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
get_linux_lsb_release_information()
|
||||
message(STATUS "Linux ${LSB_RELEASE_ID_SHORT} ${LSB_RELEASE_VERSION_SHORT} ${LSB_RELEASE_CODENAME_SHORT}")
|
||||
else()
|
||||
message(STATUS ${CMAKE_SYSTEM_NAME})
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Additional Global Settings(add specific info there)
|
||||
################################################################################
|
||||
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)
|
||||
|
||||
################################################################################
|
||||
# Use solution folders feature
|
||||
################################################################################
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
################################################################################
|
||||
# Set LUS vars
|
||||
################################################################################
|
||||
|
||||
# Enable the Gfx debugger in LUS to use libgfxd from ZAPDTR
|
||||
set(GFX_DEBUG_DISASSEMBLER ON)
|
||||
|
||||
# Tell LUS we're using F3DEX_GBI_2 (in a way that doesn't break libgfxd)
|
||||
set(GBI_UCODE F3DEX_GBI_2)
|
||||
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake")
|
||||
|
||||
# Enable MPQ and OTR support
|
||||
set(INCLUDE_MPQ_SUPPORT ON)
|
||||
|
||||
################################################################################
|
||||
# Set CONTROLLERBUTTONS_T
|
||||
################################################################################
|
||||
add_compile_definitions(CONTROLLERBUTTONS_T=uint32_t)
|
||||
|
||||
################################################################################
|
||||
# Sub-projects
|
||||
################################################################################
|
||||
add_subdirectory(libultraship ${CMAKE_BINARY_DIR}/libultraship)
|
||||
target_compile_options(libultraship PRIVATE "${WARNING_OVERRIDE}")
|
||||
target_compile_definitions(libultraship PUBLIC INCLUDE_MPQ_SUPPORT)
|
||||
add_subdirectory(ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
||||
add_subdirectory(OTRExporter)
|
||||
add_subdirectory(soh)
|
||||
|
||||
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE_TERMINAL YES)
|
||||
set_property(TARGET soh PROPERTY APPIMAGE_DESKTOP_FILE "${CMAKE_SOURCE_DIR}/scripts/linux/appimage/soh.desktop")
|
||||
set_property(TARGET soh PROPERTY APPIMAGE_ICON_FILE "${CMAKE_BINARY_DIR}/sohIcon.png")
|
||||
|
||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
|
||||
install(FILES "${CMAKE_BINARY_DIR}/soh/soh.o2r" DESTINATION . COMPONENT ship)
|
||||
install(TARGETS ZAPD DESTINATION ./assets/extractor COMPONENT extractor)
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets COMPONENT extractor)
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml COMPONENT extractor)
|
||||
endif()
|
||||
|
||||
if ("${CMAKE_SYSTEM_NAME}" STREQUAL "Windows")
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/ COMPONENT ship)
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml COMPONENT ship)
|
||||
endif()
|
||||
|
||||
find_package(Python3 COMPONENTS Interpreter)
|
||||
|
||||
# Target to generate OTRs
|
||||
add_custom_target(
|
||||
ExtractAssets
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -f oot.o2r oot-mq.o2r soh.o2r
|
||||
|
||||
# copy LUS default shaders into assets/custom
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/fast/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||
|
||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root assets/xml --custom-otr-file soh.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
|
||||
COMMENT "Running asset extraction..."
|
||||
DEPENDS ZAPD
|
||||
BYPRODUCTS oot.o2r ${CMAKE_SOURCE_DIR}/oot.o2r oot-mq.o2r ${CMAKE_SOURCE_DIR}/oot-mq.o2r ${CMAKE_SOURCE_DIR}/soh.o2r
|
||||
)
|
||||
|
||||
# Target to generate headers
|
||||
add_custom_target(
|
||||
ExtractAssetHeaders
|
||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --non-interactive --xml-root assets/xml --gen-headers
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
|
||||
COMMENT "Generating asset headers..."
|
||||
DEPENDS ZAPD
|
||||
)
|
||||
|
||||
# Target to generate only soh.o2r
|
||||
add_custom_target(
|
||||
GenerateSohOtr
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -f soh.o2r
|
||||
|
||||
# copy LUS default shaders into assets/custom
|
||||
COMMAND ${CMAKE_COMMAND} -E rm -r -f ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/libultraship/src/fast/shaders/ ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom/shaders/
|
||||
|
||||
COMMAND ${Python3_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/OTRExporter/extract_assets.py -z "$<TARGET_FILE:ZAPD>" --norom --custom-otr-file soh.o2r "--custom-assets-path" ${CMAKE_CURRENT_SOURCE_DIR}/soh/assets/custom --port-ver "${CMAKE_PROJECT_VERSION}"
|
||||
COMMAND ${CMAKE_COMMAND} -DSYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DTARGET_DIR="$<TARGET_FILE_DIR:ZAPD>" -DSOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DBINARY_DIR=${CMAKE_BINARY_DIR} -DONLYSOHOTR=On -P ${CMAKE_CURRENT_SOURCE_DIR}/copy-existing-otrs.cmake
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/soh
|
||||
COMMENT "Generating soh.o2r..."
|
||||
DEPENDS ZAPD
|
||||
)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
find_package(ImageMagick COMPONENTS convert)
|
||||
if (ImageMagick_FOUND)
|
||||
execute_process (
|
||||
COMMAND ${ImageMagick_convert_EXECUTABLE} ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png -resize 512x512 ${CMAKE_BINARY_DIR}/sohIcon.png
|
||||
OUTPUT_VARIABLE outVar
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
add_custom_target(CreateOSXIcons
|
||||
COMMAND mkdir -p ${CMAKE_BINARY_DIR}/macosx/soh.iconset
|
||||
COMMAND sips -z 16 16 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16.png
|
||||
COMMAND sips -z 32 32 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_16x16@2x.png
|
||||
COMMAND sips -z 32 32 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32.png
|
||||
COMMAND sips -z 64 64 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_32x32@2x.png
|
||||
COMMAND sips -z 128 128 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128.png
|
||||
COMMAND sips -z 256 256 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_128x128@2x.png
|
||||
COMMAND sips -z 256 256 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256.png
|
||||
COMMAND sips -z 512 512 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_256x256@2x.png
|
||||
COMMAND sips -z 512 512 ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png --out ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512.png
|
||||
COMMAND cp ${CMAKE_SOURCE_DIR}/soh/macosx/sohIcon.png ${CMAKE_BINARY_DIR}/macosx/soh.iconset/icon_512x512@2x.png
|
||||
COMMAND iconutil -c icns -o ${CMAKE_BINARY_DIR}/macosx/soh.icns ${CMAKE_BINARY_DIR}/macosx/soh.iconset
|
||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
|
||||
COMMENT "Creating OSX icons ..."
|
||||
)
|
||||
add_dependencies(soh CreateOSXIcons)
|
||||
|
||||
install(TARGETS ZAPD DESTINATION ${CMAKE_BINARY_DIR}/assets)
|
||||
|
||||
set(PROGRAM_PERMISSIONS_EXECUTE OWNER_EXECUTE OWNER_WRITE OWNER_READ GROUP_EXECUTE GROUP_READ WORLD_EXECUTE WORLD_READ)
|
||||
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/extractor/" DESTINATION ./assets/)
|
||||
install(DIRECTORY "${CMAKE_SOURCE_DIR}/soh/assets/xml/" DESTINATION ./assets/xml)
|
||||
|
||||
# Rename the installed soh binary to drop the macos suffix
|
||||
INSTALL(CODE "FILE(RENAME \${CMAKE_INSTALL_PREFIX}/../MacOS/soh-macos \${CMAKE_INSTALL_PREFIX}/../MacOS/soh)")
|
||||
|
||||
install(CODE "
|
||||
include(BundleUtilities)
|
||||
fixup_bundle(\"\${CMAKE_INSTALL_PREFIX}/../MacOS/soh\" \"\" \"${dirs}\")
|
||||
")
|
||||
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS")
|
||||
install(FILES ${CMAKE_SOURCE_DIR}/README.md DESTINATION . COMPONENT ship RENAME readme.txt )
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "Linux")
|
||||
set(CPACK_GENERATOR "External")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Windows|NintendoSwitch|CafeOS")
|
||||
set(CPACK_GENERATOR "ZIP")
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "Darwin")
|
||||
set(CPACK_GENERATOR "Bundle")
|
||||
endif()
|
||||
|
||||
set(CPACK_PROJECT_CONFIG_FILE ${CMAKE_SOURCE_DIR}/CMake/Packaging-2.cmake)
|
||||
include(CMake/Packaging.cmake)
|
||||
77
Dockerfile
Normal file
77
Dockerfile
Normal file
@@ -0,0 +1,77 @@
|
||||
FROM ubuntu:20.04 as build
|
||||
|
||||
ENV LANG C.UTF-8
|
||||
ARG DEBIAN_FRONTEND=noninteractive
|
||||
|
||||
ENV GCCVER=10
|
||||
RUN apt-get update && \
|
||||
apt-get upgrade -y && \
|
||||
apt-get install -y \
|
||||
binutils \
|
||||
gcc-${GCCVER} \
|
||||
g++-${GCCVER} \
|
||||
patchelf \
|
||||
p7zip-full \
|
||||
python3 \
|
||||
cmake \
|
||||
make \
|
||||
curl \
|
||||
git \
|
||||
lld \
|
||||
libsdl2-dev \
|
||||
zlib1g-dev \
|
||||
libbz2-dev \
|
||||
libpng-dev \
|
||||
libgles2-mesa-dev \
|
||||
wget \
|
||||
gpg \
|
||||
imagemagick \
|
||||
ninja-build && \
|
||||
apt-get install -y software-properties-common && \
|
||||
wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | gpg --dearmor - | tee /etc/apt/trusted.gpg.d/kitware.gpg >/dev/null && \
|
||||
apt-add-repository "deb https://apt.kitware.com/ubuntu/ focal main" && \
|
||||
apt-get update && \
|
||||
apt-get upgrade -y && \
|
||||
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-${GCCVER} 10 && \
|
||||
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-${GCCVER} 10
|
||||
|
||||
RUN git clone https://github.com/Perlmint/glew-cmake.git && \
|
||||
cmake glew-cmake && \
|
||||
make -j$(nproc) && \
|
||||
make install
|
||||
|
||||
ENV SDL2VER=2.0.22
|
||||
RUN curl -sLO https://libsdl.org/release/SDL2-${SDL2VER}.tar.gz && \
|
||||
tar -xzf SDL2-${SDL2VER}.tar.gz && \
|
||||
cd SDL2-${SDL2VER} && \
|
||||
./configure --build=x86_64-linux-gnu && \
|
||||
make -j$(nproc) && make install && \
|
||||
rm ../SDL2-${SDL2VER}.tar.gz && \
|
||||
cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||
|
||||
ENV SDL2NETVER=2.2.0
|
||||
RUN curl -sLO https://www.libsdl.org/projects/SDL_net/release/SDL2_net-${SDL2NETVER}.tar.gz && \
|
||||
tar -xzf SDL2_net-${SDL2NETVER}.tar.gz && \
|
||||
cd SDL2_net-${SDL2NETVER} && \
|
||||
./configure --build=x86_64-linux-gnu && \
|
||||
make -j$(nproc) && make install && \
|
||||
rm ../SDL2_net-${SDL2NETVER}.tar.gz && \
|
||||
cp -av /usr/local/lib/libSDL* /lib/x86_64-linux-gnu/
|
||||
|
||||
RUN \
|
||||
ln -sf /proc/self/mounts /etc/mtab && \
|
||||
mkdir -p /usr/local/share/keyring/ && \
|
||||
wget -O /usr/local/share/keyring/devkitpro-pub.gpg https://apt.devkitpro.org/devkitpro-pub.gpg && \
|
||||
echo "deb [signed-by=/usr/local/share/keyring/devkitpro-pub.gpg] https://apt.devkitpro.org stable main" > /etc/apt/sources.list.d/devkitpro.list && \
|
||||
apt-get update -y && \
|
||||
apt-get install -y devkitpro-pacman && \
|
||||
yes | dkp-pacman -Syu switch-dev switch-portlibs wiiu-dev wiiu-portlibs --noconfirm
|
||||
|
||||
ENV DEVKITPRO=/opt/devkitpro
|
||||
ENV DEVKITARM=/opt/devkitpro/devkitARM
|
||||
ENV DEVKITPPC=/opt/devkitpro/devkitPPC
|
||||
ENV PATH=$PATH:/opt/devkitpro/portlibs/switch/bin/:$DEVKITPPC/bin
|
||||
ENV WUT_ROOT=$DEVKITPRO/wut
|
||||
|
||||
RUN mkdir /soh
|
||||
WORKDIR /soh
|
||||
116
README.md
Normal file
116
README.md
Normal file
@@ -0,0 +1,116 @@
|
||||

|
||||

|
||||
|
||||
## Website
|
||||
|
||||
Official Website: https://www.shipofharkinian.com/
|
||||
|
||||
## Discord
|
||||
|
||||
Official Discord: https://discord.com/invite/shipofharkinian
|
||||
|
||||
If you're having any trouble after reading through this `README`, feel free to ask for help in the Support text channels. Please keep in mind that we do not condone piracy.
|
||||
|
||||
# Quick Start
|
||||
|
||||
The Ship does not include any copyrighted assets. You are required to provide a supported copy of the game.
|
||||
|
||||
### 1. Verify your ROM dump
|
||||
You can verify you have dumped a supported copy of the game by using the compatibility checker at https://ship.equipment/. If you'd prefer to manually validate your ROM dump, you can cross-reference its `sha1` hash with the hashes [here](docs/supportedHashes.json).
|
||||
|
||||
### 2. Download The Ship of Harkinian from [Releases](https://github.com/HarbourMasters/Shipwright/releases)
|
||||
|
||||
### 3. Launch the Game!
|
||||
#### Windows
|
||||
* Extract the zip
|
||||
* Launch `soh.exe`
|
||||
|
||||
#### Linux
|
||||
* Place your supported copy of the game in the same folder as the appimage.
|
||||
* Execute `soh.appimage`. You may have to `chmod +x` the appimage via terminal.
|
||||
|
||||
#### macOS
|
||||
* Run `soh.app`. When prompted, select your supported copy of the game.
|
||||
* You should see a notification saying `Processing OTR`, then, once the process is complete, you should get a notification saying `OTR Successfully Generated`, then the game should start.
|
||||
|
||||
#### Nintendo Switch
|
||||
* Run one of the PC releases to generate an `oot.o2r` and/or `oot-mq.o2r` file. After launching the game on PC, you will be able to find these files in the same directory as `soh.exe` or `soh.appimage`. On macOS, these files can be found in `/Users/<username>/Library/Application Support/com.shipofharkinian.soh/`
|
||||
* Copy the files to your sd card
|
||||
```
|
||||
sdcard
|
||||
└── switch
|
||||
└── soh
|
||||
├── oot-mq.o2r
|
||||
├── oot.o2r
|
||||
├── soh.nro
|
||||
└── soh.o2r
|
||||
```
|
||||
* Launch via Atmosphere's `Game+R` launcher method.
|
||||
|
||||
### 4. Play!
|
||||
|
||||
Congratulations, you are now sailing with the Ship of Harkinian! Have fun!
|
||||
|
||||
# Configuration
|
||||
|
||||
### Default keyboard configuration
|
||||
| N64 | A | B | Z | Start | Analog stick | C buttons | D-Pad |
|
||||
| - | - | - | - | - | - | - | - |
|
||||
| Keyboard | X | C | Z | Space | WASD | Arrow keys | TFGH |
|
||||
|
||||
### Other shortcuts
|
||||
| Keys | Action |
|
||||
| - | - |
|
||||
| ESC | Toggle menu |
|
||||
| F2 | Toggle capture mouse input |
|
||||
| F5 | Save state |
|
||||
| F6 | Change state |
|
||||
| F7 | Load state |
|
||||
| F9 | Toggle Text-to-Speech (Windows and Mac only) |
|
||||
| F11 | Fullscreen |
|
||||
| Tab | Toggle Alternate assets |
|
||||
| Ctrl+R | Reset |
|
||||
|
||||
# Project Overview
|
||||
Ship of Harkinian (SOH) is built atop a custom library dubbed libultraship (LUS). Back in the N64 days, there was an SDK distributed to developers named libultra; LUS is designed to mimic the functionality of libultra on modern hardware. In addition, we are dependant on the source code provided by the OOT decompilation project.
|
||||
|
||||
In order for the game to function, you will require a **legally acquired** ROM for Ocarina of Time. Click [here](https://ship.equipment/) to check the compatibility of your specific rom. Any copyrighted assets are extracted from the ROM and reformatted as a .o2r archive file which the code uses.
|
||||
|
||||
### Graphics Backends
|
||||
Currently, there are three rendering APIs supported: DirectX11 (Windows), OpenGL (all platforms), and Metal (MacOS). You can change which API to use in the `Settings` menu of the menubar, which requires a restart. If you're having an issue with crashing, you can change the API in the `shipofharkinian.json` file by finding the line `gfxbackend:""` and changing the value to `sdl` for OpenGL. DirectX 11 is the default on Windows.
|
||||
|
||||
# Custom Assets
|
||||
|
||||
Custom assets are packed in `.otr` archive files. To use custom assets, place them in the `mods` folder.
|
||||
|
||||
If you're interested in creating and/or packing your own custom asset `.otr` files, check out the following tools:
|
||||
* [**retro - OTR generator**](https://github.com/HarbourMasters64/retro)
|
||||
* [**fast64 - Blender plugin**](https://github.com/HarbourMasters/fast64)
|
||||
|
||||
# Development
|
||||
### Building
|
||||
|
||||
If you want to manually compile SoH, please consult the [building instructions](docs/BUILDING.md).
|
||||
|
||||
### Playtesting
|
||||
If you want to playtest a continuous integration build, you can find them at the links below. Keep in mind that these are for playtesting only, and you will likely encounter bugs and possibly crashes.
|
||||
|
||||
* [Windows](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-windows.zip)
|
||||
* [macOS](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-mac.zip)
|
||||
* [Linux](https://nightly.link/HarbourMasters/Shipwright/workflows/generate-builds/develop/soh-linux.zip)
|
||||
|
||||
### Further Reading
|
||||
More detailed documentation can be found in the 'docs' directory, including the aforementioned [building instructions](docs/BUILDING.md).
|
||||
|
||||
* [Credits](docs/CREDITS.md)
|
||||
* [Custom Music](docs/CUSTOM_MUSIC.md)
|
||||
* [Controller Mapping](docs/GAME_CONTROLLER_DB.md)
|
||||
* [Modding](docs/MODDING.md)
|
||||
* [Versioning](docs/VERSIONING.md)
|
||||
|
||||
<a href="https://github.com/Kenix3/libultraship/">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="./docs/poweredbylus.darkmode.png">
|
||||
<img alt="Powered by libultraship" src="./docs/poweredbylus.lightmode.png">
|
||||
</picture>
|
||||
</a>
|
||||
37
copy-existing-otrs.cmake
Normal file
37
copy-existing-otrs.cmake
Normal file
@@ -0,0 +1,37 @@
|
||||
message(STATUS "Copying otr files...")
|
||||
|
||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${SOURCE_DIR})
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${BINARY_DIR}/soh/)
|
||||
message(STATUS "Copied oot.o2r")
|
||||
endif()
|
||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot-mq.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${SOURCE_DIR})
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${BINARY_DIR}/soh/)
|
||||
message(STATUS "Copied oot-mq.o2r")
|
||||
endif()
|
||||
if(EXISTS ${SOURCE_DIR}/soh/soh.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${SOURCE_DIR})
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${BINARY_DIR}/soh/)
|
||||
message(STATUS "Copied soh.o2r")
|
||||
endif()
|
||||
|
||||
# Additionally for Windows, copy the otrs to the target dir, side by side with soh.exe
|
||||
if(SYSTEM_NAME MATCHES "Windows")
|
||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot.o2r ${TARGET_DIR})
|
||||
endif()
|
||||
if(NOT ONLYSOHOTR AND EXISTS ${SOURCE_DIR}/soh/oot-mq.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy oot-mq.o2r ${TARGET_DIR})
|
||||
endif()
|
||||
if(EXISTS ${SOURCE_DIR}/soh/soh.o2r)
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E copy soh.o2r ${TARGET_DIR})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(NOT ONLYSOHOTR AND (NOT EXISTS ${SOURCE_DIR}/oot.o2r AND NOT EXISTS ${SOURCE_DIR}/oot-mq.o2r))
|
||||
message(FATAL_ERROR "Failed to copy. No OTR files found.")
|
||||
endif()
|
||||
if(NOT EXISTS ${SOURCE_DIR}/soh.o2r)
|
||||
message(FATAL_ERROR "Failed to copy. No soh OTR found.")
|
||||
endif()
|
||||
345
docs/BUILDING.md
Normal file
345
docs/BUILDING.md
Normal file
@@ -0,0 +1,345 @@
|
||||
# Building Ship of Harkinian
|
||||
|
||||
## Windows
|
||||
|
||||
Requires:
|
||||
* At least 8GB of RAM (machines with 4GB have seen compiler failures)
|
||||
* Visual Studio 2022 Community Edition with the C++ feature set
|
||||
* One of the Windows SDKs that comes with Visual Studio, for example the current Windows 10 version 10.0.19041.0
|
||||
* The `MSVC v143 - VS 2022 C++ build tools` component of Visual Studio
|
||||
* Python 3 (can be installed manually or as part of Visual Studio)
|
||||
* Git (can be installed manually or as part of Visual Studio)
|
||||
* Cmake (can be installed via chocolatey or manually)
|
||||
|
||||
During installation, check the "Desktop development with C++" feature set:
|
||||
|
||||

|
||||
Doing so should also check one of the Windows SDKs by default. Then, in the installation details in the right-hand column, make sure you also check the v143 toolset. This is often done by default.
|
||||
|
||||
It is recommended that you install Python and Git standalone, the install process in VS Installer has given some issues in the past.
|
||||
|
||||
1. Clone the Ship of Harkinian repository
|
||||
|
||||
_Note: Be sure to either clone with the ``--recursive`` flag or do ``git submodule update --init`` after cloning to pull in the libultraship submodule!_
|
||||
|
||||
2. After setup and initial build, use the built-in OTR extraction to make your oot.o2r/oot-mq.o2r files.
|
||||
|
||||
_Note: Instructions assume using powershell_
|
||||
```powershell
|
||||
# Navigate to the Shipwright repo within powershell. ie: cd "C:\yourpath\Shipwright"
|
||||
cd Shipwright
|
||||
|
||||
# Setup cmake project
|
||||
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
|
||||
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
|
||||
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v143 -A x64
|
||||
|
||||
# Generate soh.o2r
|
||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64 --target GenerateSohOtr
|
||||
|
||||
# Compile project
|
||||
# Add `--config Release` if you're packaging
|
||||
& 'C:\Program Files\CMake\bin\cmake.exe' --build .\build\x64
|
||||
|
||||
# Now you can run the executable in .\build\x64 or run in Visual Studio
|
||||
```
|
||||
|
||||
### Developing SoH
|
||||
With the cmake build system you have two options for working on the project:
|
||||
|
||||
#### Visual Studio
|
||||
To develop using Visual Studio you only need to use cmake to generate the solution file:
|
||||
```powershell
|
||||
# Generates Ship.sln at `build/x64` for Visual Studio 2022
|
||||
& 'C:\Program Files\CMake\bin\cmake' -S . -B "build/x64" -G "Visual Studio 17 2022" -T v143 -A x64
|
||||
```
|
||||
|
||||
#### Visual Studio Code or another editor
|
||||
To develop using Visual Studio Code or another editor you only need to open the repository in it.
|
||||
To build you'll need to follow the instructions from the building section.
|
||||
|
||||
_Note: If you're using Visual Studio Code, the [CMake Tools plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
|
||||
|
||||
_Experimental: You can also use another build system entirely rather than MSVC like [Ninja](https://ninja-build.org/) for possibly better performance._
|
||||
|
||||
|
||||
### Generating the distributable
|
||||
After compiling the project you can generate the distributable by running:
|
||||
```powershell
|
||||
# Go to build folder
|
||||
cd "build/x64"
|
||||
# Generate
|
||||
& 'C:\Program Files\CMake\bin\cpack.exe' -G ZIP
|
||||
```
|
||||
|
||||
### Additional CMake Targets
|
||||
#### Clean
|
||||
```powershell
|
||||
# If you need to clean the project you can run
|
||||
C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target clean
|
||||
```
|
||||
|
||||
#### Regenerate Asset Headers
|
||||
```powershell
|
||||
# If you need to regenerate the asset headers to check them into source
|
||||
C:\Program Files\CMake\bin\cmake.exe --build build-cmake --target ExtractAssetHeaders
|
||||
```
|
||||
|
||||
## Linux
|
||||
### Install dependencies
|
||||
#### Debian/Ubuntu
|
||||
```sh
|
||||
# using gcc
|
||||
apt-get install gcc g++ git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev libopusfile-dev libvorbis-dev
|
||||
|
||||
# or using clang
|
||||
apt-get install clang git cmake ninja-build lsb-release libsdl2-dev libpng-dev libsdl2-net-dev libzip-dev zipcmp zipmerge ziptool nlohmann-json3-dev libtinyxml2-dev libspdlog-dev libopengl-dev libopusfile-dev libvorbis-dev
|
||||
```
|
||||
#### Arch
|
||||
```sh
|
||||
# using gcc
|
||||
pacman -S gcc git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net opusfile libvorbis
|
||||
|
||||
# or using clang
|
||||
pacman -S clang git cmake ninja lsb-release sdl2 libpng libzip nlohmann-json tinyxml2 spdlog sdl2_net opusfile libvorbis
|
||||
```
|
||||
#### Fedora
|
||||
```sh
|
||||
# using gcc
|
||||
dnf install gcc gcc-c++ git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel opusfile-devel libvorbis-devel
|
||||
|
||||
# or using clang
|
||||
dnf install clang git cmake ninja-build lsb_release SDL2-devel libpng-devel libzip-devel libzip-tools nlohmann-json-devel tinyxml2-devel spdlog-devel opusfile-devel libvorbis-devel
|
||||
```
|
||||
#### Nix
|
||||
You can use a `flake.nix` file to instantly setup a development environment using [Nix](https://nixos.org/). Write this `flake.nix` file in the root directory:
|
||||
|
||||
```nix
|
||||
{
|
||||
description = "Shipwright development environment";
|
||||
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils }:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = nixpkgs.legacyPackages.${system};
|
||||
in
|
||||
{
|
||||
devShells.default = pkgs.mkShell {
|
||||
buildInputs = with pkgs; [
|
||||
# Build tools
|
||||
clang
|
||||
git
|
||||
cmake
|
||||
ninja
|
||||
lsb-release
|
||||
pkg-config
|
||||
|
||||
# SDL2 libraries
|
||||
SDL2
|
||||
SDL2.dev
|
||||
SDL2_net
|
||||
|
||||
# Other libraries
|
||||
libpng
|
||||
libzip
|
||||
nlohmann_json
|
||||
tinyxml-2
|
||||
spdlog
|
||||
libGL
|
||||
libGL.dev
|
||||
bzip2
|
||||
|
||||
# X11 libraries
|
||||
xorg.libX11
|
||||
|
||||
# Audio libraries
|
||||
libogg
|
||||
libogg.dev
|
||||
libvorbis
|
||||
libvorbis.dev
|
||||
libopus
|
||||
libopus.dev
|
||||
opusfile
|
||||
opusfile.dev
|
||||
];
|
||||
shellHook = ''
|
||||
echo "Shipwright development environment loaded"
|
||||
echo "Available tools: clang, git, cmake, ninja"
|
||||
'';
|
||||
};
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
Now type `nix develop` and you will be dropped into a shell with all dependencies, ensuring that all build commands work.
|
||||
|
||||
### Build
|
||||
|
||||
_Note: If you're using Visual Studio Code, the [CMake Tools plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
|
||||
|
||||
```bash
|
||||
# Clone the repo and enter the directory
|
||||
git clone https://github.com/HarbourMasters/Shipwright.git
|
||||
cd Shipwright
|
||||
|
||||
# Clone the submodules
|
||||
git submodule update --init
|
||||
|
||||
# Generate Ninja project
|
||||
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
|
||||
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
|
||||
# Add `-DPython3_EXECUTABLE=$(which python3)` if you are using non-standard Python installations such as PyEnv
|
||||
cmake -H. -Bbuild-cmake -GNinja
|
||||
|
||||
# Generate soh.o2r
|
||||
cmake --build build-cmake --target GenerateSohOtr
|
||||
|
||||
# Compile the project
|
||||
# Add `--config Release` if you're packaging
|
||||
cmake --build build-cmake
|
||||
|
||||
# Now you can run the executable in ./build-cmake/soh/soh.elf
|
||||
# To develop the project open the repository in VSCode (or your preferred editor)
|
||||
```
|
||||
|
||||
### Generate a distributable
|
||||
After compiling the project you can generate a distributable by running of the following:
|
||||
```bash
|
||||
# Go to build folder
|
||||
cd build-cmake
|
||||
# Generate
|
||||
cpack -G DEB
|
||||
cpack -G ZIP
|
||||
cpack -G External (creates appimage)
|
||||
```
|
||||
|
||||
### Additional CMake Targets
|
||||
#### Clean
|
||||
```bash
|
||||
# If you need to clean the project you can run
|
||||
cmake --build build-cmake --target clean
|
||||
```
|
||||
#### Regenerate Asset Headers
|
||||
```bash
|
||||
# If you need to regenerate the asset headers to check them into source
|
||||
cmake --build build-cmake --target ExtractAssetHeaders
|
||||
```
|
||||
|
||||
## macOS
|
||||
Requires Xcode (or xcode-tools) && `sdl2, libpng, glew, ninja, cmake, tinyxml2, nlohmann-json, libzip, opusfile, libvorbis` (can be installed via [homebrew](https://brew.sh/), macports, etc)
|
||||
|
||||
**Important: For maximum performance make sure you have ninja build tools installed!**
|
||||
|
||||
_Note: If you're using Visual Studio Code, the [CMake Tools plugin](https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools) makes it very easy to just press run and debug._
|
||||
|
||||
```bash
|
||||
# Clone the repo
|
||||
git clone https://github.com/HarbourMasters/Shipwright.git
|
||||
cd ShipWright
|
||||
|
||||
# Clone the submodule libultraship
|
||||
git submodule update --init
|
||||
|
||||
# Install development dependencies (assuming homebrew)
|
||||
brew install sdl2 libpng glew ninja cmake tinyxml2 nlohmann-json libzip opusfile libvorbis
|
||||
|
||||
# Generate Ninja project
|
||||
# Add `-DCMAKE_BUILD_TYPE:STRING=Release` if you're packaging
|
||||
# Add `-DSUPPRESS_WARNINGS=0` to prevent suppression of warnings from LUS and decomp (src) files. set to 1 to re-enable suppression
|
||||
cmake -H. -Bbuild-cmake -GNinja
|
||||
|
||||
# Generate soh.o2r
|
||||
cmake --build build-cmake --target GenerateSohOtr
|
||||
|
||||
# Compile the project
|
||||
# Add `--config Release` if you're packaging
|
||||
cmake --build build-cmake
|
||||
|
||||
# Now you can run the executable file:
|
||||
./build-cmake/soh/soh-macos
|
||||
# To develop the project open the repository in VSCode (or your preferred editor)
|
||||
```
|
||||
|
||||
### Generating a distributable
|
||||
After compiling the project you can generate a distributable by running of the following:
|
||||
```bash
|
||||
# Go to build folder
|
||||
cd build-cmake
|
||||
# Generate
|
||||
cpack
|
||||
```
|
||||
|
||||
### Additional CMake Targets
|
||||
#### Clean
|
||||
```bash
|
||||
# If you need to clean the project you can run
|
||||
cmake --build build-cmake --target clean
|
||||
```
|
||||
|
||||
#### Regenerate Asset Headers
|
||||
```bash
|
||||
# If you need to regenerate the asset headers to check them into source
|
||||
cmake --build build-cmake --target ExtractAssetHeaders
|
||||
```
|
||||
|
||||
## Switch
|
||||
1. Requires that your build machine is setup with the tools necessary for your platform above
|
||||
2. Requires that you have the switch build tools installed
|
||||
3. Clone the Ship of Harkinian repository
|
||||
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
|
||||
|
||||
```bash
|
||||
cd Shipwright
|
||||
# Setup cmake project for your host machine
|
||||
cmake -H. -Bbuild-cmake -GNinja
|
||||
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
|
||||
cmake --build build-cmake --target ExtractAssets
|
||||
# Setup cmake project for building for Switch
|
||||
cmake -H. -Bbuild-switch -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake
|
||||
# Build project and generate nro
|
||||
cmake --build build-switch --target soh_nro
|
||||
|
||||
# Now you can run the executable in ./build-switch/soh/soh.nro
|
||||
# To develop the project open the repository in VSCode (or your preferred editor)
|
||||
```
|
||||
|
||||
## Wii U
|
||||
1. Requires that your build machine is setup with the tools necessary for your platform above
|
||||
2. Requires that you have the Wii U build tools installed
|
||||
3. Clone the Ship of Harkinian repository
|
||||
4. Place one or more [compatible](#compatible-roms) roms in the `OTRExporter` directory with namings of your choice
|
||||
|
||||
```bash
|
||||
cd Shipwright
|
||||
# Setup cmake project for your host machine
|
||||
cmake -H. -Bbuild-cmake -GNinja
|
||||
# Extract assets & generate OTR (run this anytime you need to regenerate OTR)
|
||||
cmake --build build-cmake --target ExtractAssets
|
||||
# Setup cmake project for building for Wii U
|
||||
cmake -H. -Bbuild-wiiu -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/WiiU.cmake # -DCMAKE_BUILD_TYPE:STRING=Release (if you're packaging)
|
||||
# Build project and generate rpx
|
||||
cmake --build build-wiiu --target soh # --target soh_wuhb (for building .wuhb)
|
||||
|
||||
# Now you can run the executable in ./build-wiiu/soh/soh.rpx or the Wii U Homebrew Bundle in ./build-wiiu/soh/soh.wuhb
|
||||
# To develop the project open the repository in VSCode (or your preferred editor)
|
||||
```
|
||||
|
||||
# Compatible Roms
|
||||
See [`supportedHashes.json`](supportedHashes.json)
|
||||
|
||||
## Getting CI to work on your fork
|
||||
|
||||
The CI works via [Github Actions](https://github.com/features/actions) where we mostly make use of machines hosted by Github; except for the very first step of the CI process called "Extract assets". This steps extracts assets from the game file and generates an "assets" folder in `soh/`.
|
||||
|
||||
To get this step working on your fork, you'll need to add a machine to your own repository as a self-hosted runner via "Settings > Actions > Runners" in your repository settings. Make sure to add the 'asset-builder' tag to your newly added runner to assign it to run this step. To setup your runner as a service read the docs [here](https://docs.github.com/en/actions/hosting-your-own-runners/configuring-the-self-hosted-runner-application-as-a-service?platform=linux).
|
||||
|
||||
### Runner on Windows
|
||||
You'll have to enable the ability to run unsigned scripts through PowerShell. To do this, open Powershell as administrator and run `set-executionpolicy remotesigned`. Most dependencies get installed as part of the CI process. You will also need to separately install 7z and add it to the PATH so `7z` can be run as a command. [Chocolatey](https://chocolatey.org/) or other package managers can be used to install it easily.
|
||||
|
||||
### Runner on UNIX systems
|
||||
If you're on macOS or Linux take a look at `macports-deps.txt` or `apt-deps.txt` to see the dependencies expected to be on your machine.
|
||||
45
docs/CREDITS.md
Normal file
45
docs/CREDITS.md
Normal file
@@ -0,0 +1,45 @@
|
||||
# Credits
|
||||
|
||||
## The Harbour Masters Are...
|
||||
|
||||
Kenix | Lead Developer/Public Relations - Resource Management Programmer, Audio System Programmer, and General Programmer
|
||||
Jack Walker | Lead Developer - OTR Format Programmer, Resource Load Programmer, and General Programmer
|
||||
Louist103 | Developer - Save System Programmer and General Programmer
|
||||
Emil | Developer - Fast3D Programmer
|
||||
m4xw | Developer - Shipwright, Throwing Baguettes, and General Programmer
|
||||
MelonSpeedruns | Developer - General Programmer
|
||||
Rozlette | Developer - General Programmer
|
||||
JoshDuMan | Developer - General Programmer
|
||||
KiritoDev/Lywx | Developer - General Programmer
|
||||
Theo3 | Developer - General Programmer
|
||||
Random06457 | Developer - Linux Build
|
||||
|
||||
## Special Thanks
|
||||
|
||||
Decomp & ZAPD | Made this project even possible in the first place!
|
||||
MNGoldenEagle | Patiently explained audio data formats, encouragement, and founding ZSO which was the first source of the game's code and resource format documentation.
|
||||
Rrrrry123 | Speedbunner, encouragement, and community moderation
|
||||
Fierce deity | Encouragement and community moderation
|
||||
mzxrules | For his contributions to decomp
|
||||
zel. | For his contributions to decomp
|
||||
Aloxado | Developer - General Programmer
|
||||
MegaMech | Developer - General Programmer
|
||||
Revo | Tester - GCC support and General Testing
|
||||
zfg | Tester - General Testing
|
||||
Horseless Headman | Tester - General Testing
|
||||
Steven Pritchett | Tester - General Testing
|
||||
Trenton May | Tester - General Testing
|
||||
Zeldaboy14 | Tester - General Testing, encouragement, and community moderation
|
||||
Koby Howell | Tester - General Testing
|
||||
Logg | Tester - General Testing
|
||||
Taylor Daley | Graphic Design
|
||||
Can't Sleep | Graphic Design
|
||||
|
||||
## Video Credits
|
||||
Kenix | Producer / Writer
|
||||
briaguya | Writer
|
||||
rainbow_fash | Executive Producer
|
||||
ReveriePass | Editor
|
||||
MicTheMicrophone | Gwonam / The King
|
||||
Amphibibro | Link
|
||||
AceHeart | Zelda
|
||||
24
docs/CUSTOM_MUSIC.md
Normal file
24
docs/CUSTOM_MUSIC.md
Normal file
@@ -0,0 +1,24 @@
|
||||
### Custom Music
|
||||
|
||||
We support importing custom [Seq64](https://github.com/sauraen/seq64) files to replace the in game music and fanfares (Sound effect and instrument replacement is currently not supported).
|
||||
|
||||
First you will need to prepare a folder with the desired sequences. Every sequence requires two files with the same name and different extensions - a `.seq` Seq64 file and a `.meta` plaintext file. These files can be categorically nested in folders if desired, - Retro will recursively search each subfolder it finds.
|
||||
|
||||
The `.meta` file requires two lines - the first line is the name that will be displayed in the SFX editor, and the second line is the instrument set number in `base16` format. For example, if there is a sequence file `Foo.seq` then you need a meta file `Foo.meta` that could contain:
|
||||
```
|
||||
Awesome Name
|
||||
C
|
||||
```
|
||||
|
||||
Once you have prepared your sequences folder:
|
||||
1. Download and open [Retro](https://github.com/HarbourMasters/retro/releases).
|
||||
1. Choose the "Create OTR" option.
|
||||
1. Choose the "Custom Sequences" option.
|
||||
1. Using the file selection screen, choose the sequences folder you prepared in the previous instructions.
|
||||
1. Click the "Stage Files" button.
|
||||
(*NOTE:* SoH can handle 1024 custom sequence in total. This includes the original music. Keep that in mind!)
|
||||
1. Click the "Finalize OTR" text in the green footer.
|
||||
1. Click "Generate OTR" and, using the file selection screen, save the file to the `mods` folder of your SoH installation.
|
||||
- This `mods` folder should be in the same folder as your `oot.o2r` file.
|
||||
|
||||
Assuming you have done everything correctly, boot up SoH and select the SFX Editor from the enhancements dropdown menu. You should now be able to swap out any of the in game sequences/fanfares for the sequences added in your newly generated OTR file. If you have any trouble with this process, please reach out in the support section of the Discord.
|
||||
38
docs/GAME_CONTROLLER_DB.md
Normal file
38
docs/GAME_CONTROLLER_DB.md
Normal file
@@ -0,0 +1,38 @@
|
||||
# SDL GameControllerDB
|
||||
|
||||
The Ship of Harkinian utilizes a text file with SDL controller mappings for extended controller hardware support.
|
||||
This file is pulled from https://github.com/mdqinc/SDL_GameControllerDB during the build process as [a part of CMakeLists.txt](https://github.com/HarbourMasters/Shipwright/blob/bb643661f62865dfc757c185d0daaebb32f2d53d/soh/CMakeLists.txt#L760).
|
||||
|
||||
## Released versions
|
||||
|
||||
| Release | sha | diff |
|
||||
| - | - | - |
|
||||
| Zhora Alfa 4.0.0 | [967daa8](https://github.com/mdqinc/SDL_GameControllerDB/tree/967daa8f89c48b01ed0f9c6a86ac849930442fc6) | |
|
||||
| Zhora Bravo 4.0.1 | [ccac7cd](https://github.com/mdqinc/SDL_GameControllerDB/tree/ccac7cd97f445955d4437e21c5f82123d9b4349b) | [+1](https://github.com/mdqinc/SDL_GameControllerDB/compare/967daa8...ccac7cd) |
|
||||
| Zhora Charlie 4.0.2 | [ff26eb0](https://github.com/mdqinc/SDL_GameControllerDB/tree/ff26eb04d0fe18356985d968119429d6012e7d75) | [+8/-3](https://github.com/mdqinc/SDL_GameControllerDB/compare/ccac7cd...ff26eb0) |
|
||||
| Zhora Delta 4.0.3 | [ad02da5](https://github.com/mdqinc/SDL_GameControllerDB/tree/ad02da5a95ca8005f2c1facc11a5a52f8522f0ee) | [+4/-5](https://github.com/mdqinc/SDL_GameControllerDB/compare/ff26eb0...ad02da5) |
|
||||
| Zohra Echo 4.0.4 | [c203690](https://github.com/mdqinc/SDL_GameControllerDB/tree/c203690b1e13980699802918d362cd9dadf89bd0) | [+8/-4](https://github.com/mdqinc/SDL_GameControllerDB/compare/ad02da5...c203690) |
|
||||
| Zhora Foxtrot 4.0.5 | [9db8101](https://github.com/mdqinc/SDL_GameControllerDB/tree/9db8101a5780d1b0721bf6de385e6ffe0d07dfc7) | [+6](https://github.com/mdqinc/SDL_GameControllerDB/compare/c203690...9db8101) |
|
||||
| Flynn Alfa 5.0.0 | [163cc5d](https://github.com/mdqinc/SDL_GameControllerDB/tree/163cc5d45e9fc2f1bb2b95ea7eee4bbc9a57955c) | [+29/-8](https://github.com/mdqinc/SDL_GameControllerDB/compare/9db8101...163cc5d) |
|
||||
| Flynn Bravo 5.0.1 | [7efce7d](https://github.com/mdqinc/SDL_GameControllerDB/tree/7efce7d3f309ec1fa409b1af09153f9eb77fbedf) | [-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/163cc5d...7efce7d) |
|
||||
| Flynn Charlie 5.0.2 | [e607703](https://github.com/mdqinc/SDL_GameControllerDB/tree/e607703392145343e8aca42be052121c0b7bd1c9) | [+40/-17](https://github.com/mdqinc/SDL_GameControllerDB/compare/7efce7d...e607703) |
|
||||
| Bradley Alfa 5.1.0 | [2ba9676](https://github.com/mdqinc/SDL_GameControllerDB/tree/2ba96761af795c15e916cc97790b51e09dc0cd54) | [+1/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/e607703...2ba9676) |
|
||||
| Bradley Charlie 5.1.2 | [4f5d1d4](https://github.com/mdqinc/SDL_GameControllerDB/tree/4f5d1d497985b75f4a83a5de46f596dc4d7f002e) | [+5/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/2ba9676...4f5d1d4) |
|
||||
| Bradley Delta 5.1.3 | [9b73049](https://github.com/mdqinc/SDL_GameControllerDB/tree/9b73049ee62a2cc862d6ad94c2c777f2e8363a48) | [+4/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/4f5d1d4...9b73049) |
|
||||
| Bradley Echo 5.1.4 | [6d3801f](https://github.com/mdqinc/SDL_GameControllerDB/tree/6d3801fcfe74b1989de96403b7b560eba72a175c) | [+56/-21](https://github.com/mdqinc/SDL_GameControllerDB/compare/9b73049...6d3801f) |
|
||||
| Gibbs Alfa 6.0.0 | [0562b00](https://github.com/mdqinc/SDL_GameControllerDB/tree/0562b00eaf5c0308c49d329b79263d2dae1c3a85) | [+8/-2](https://github.com/mdqinc/SDL_GameControllerDB/compare/6d3801f...0562b00) |
|
||||
| Khan Alfa 6.1.0 | [436c7e3](https://github.com/mdqinc/SDL_GameControllerDB/tree/436c7e3d54a57189ea0ab44d05f36b7cc7ea496c) | [+31/-16](https://github.com/mdqinc/SDL_GameControllerDB/compare/0562b00...436c7e3) |
|
||||
| Khan Bravo 6.1.1 | [01cca2e](https://github.com/mdqinc/SDL_GameControllerDB/tree/01cca2e77f9bf9f1432be04f876f287eb78297fe) | [+23/-6](https://github.com/mdqinc/SDL_GameControllerDB/compare/436c7e3...01cca2e) |
|
||||
| Khan Charlie 6.1.2 | [6852946](https://github.com/mdqinc/SDL_GameControllerDB/tree/6852946487534c69b7d228fd4eb8c87cf6966475) | [+25/-15](https://github.com/mdqinc/SDL_GameControllerDB/compare/01cca2e...6852946) |
|
||||
| Spock Alfa 7.0.0 | [38bda81](https://github.com/mdqinc/SDL_GameControllerDB/tree/38bda816dc786f18493876f7bc30bc12dfd2636a) | [+15/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/6852946...38bda81) |
|
||||
| Spock Bravo 7.0.1 | [228d980](https://github.com/mdqinc/SDL_GameControllerDB/tree/228d980d3d791e9df3b096472f6b97459f8709fe) | [+7/-3](https://github.com/mdqinc/SDL_GameControllerDB/compare/38bda81...228d980) |
|
||||
| Spock Charlie 7.0.2 | [c5b4df0](https://github.com/mdqinc/SDL_GameControllerDB/tree/c5b4df0e1061175cb11e3ebbf8045178339864a5) | [+3](https://github.com/mdqinc/SDL_GameControllerDB/compare/228d980...c5b4df0) |
|
||||
| Sulu Alfa 7.1.0 | [a2cf171](https://github.com/mdqinc/SDL_GameControllerDB/tree/a2cf1711b4ebc646a3814705d2fb6aac5707bcae) | [+4/-1](https://github.com/mdqinc/SDL_GameControllerDB/compare/c5b4df0...a2cf171) |
|
||||
| Sulu Bravo 7.1.1 | [cc9f777](https://github.com/mdqinc/SDL_GameControllerDB/tree/cc9f777721f0cb30058d9eef52a295130b734a4a) | [+29/-9](https://github.com/mdqinc/SDL_GameControllerDB/compare/a2cf171...cc9f777) |
|
||||
| MacReady Alfa 8.0.0 | [c56329f](https://github.com/mdqinc/SDL_GameControllerDB/tree/c56329f4df93fc7a780bdbeae47a9c91447b629c) | [+67/-23](https://github.com/mdqinc/SDL_GameControllerDB/compare/cc9f777...c56329f) |
|
||||
| MacReady Bravo 8.0.1 | [721b575](https://github.com/mdqinc/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+5/-5](https://github.com/mdqinc/SDL_GameControllerDB/compare/c56329f...721b575) |
|
||||
| MacReady Charlie 8.0.2 | [721b575](https://github.com/mdqinc/SDL_GameControllerDB/tree/721b575d3053b21d6d30419bf74afb5b1d0fa7a4) | [+0/-0](https://github.com/mdqinc/SDL_GameControllerDB/compare/721b575...721b575) |
|
||||
| MacReady Delta 8.0.3 | [d4ab609](https://github.com/mdqinc/SDL_GameControllerDB/tree/d4ab609121ee6e687bc3d3a7e80244b3b26d1164) | [+5/-3](https://github.com/mdqinc/SDL_GameControllerDB/compare/721b575...d4ab609) |
|
||||
| MacReady Echo 8.0.4 | [6555d47](https://github.com/mdqinc/SDL_GameControllerDB/tree/6555d47ecb5d9eebac0e3d8cd19a545e9d946c40) | [+2/-0](https://github.com/mdqinc/SDL_GameControllerDB/compare/d4ab609...6555d47) |
|
||||
| MacReady Foxtrot 8.0.5 | [037d6a1](https://github.com/mdqinc/SDL_GameControllerDB/tree/037d6a1533ed94fbc6a8c71e6f1f9aff1e46208a) | [+47/-14](https://github.com/mdqinc/SDL_GameControllerDB/compare/6555d47...037d6a1) |
|
||||
| MacReady Golf 8.0.6 | [075c154](https://github.com/mdqinc/SDL_GameControllerDB/tree/075c1549075ef89a397fd7e0663d21e53a2485fd) | [+340/-301](https://github.com/mdqinc/SDL_GameControllerDB/compare/037d6a1...075c154) |
|
||||
207
docs/MODDING.md
Normal file
207
docs/MODDING.md
Normal file
@@ -0,0 +1,207 @@
|
||||
# Modding
|
||||
|
||||
> So you would like to create a code mod? _BUCKLE UP_
|
||||
|
||||
## Preface
|
||||
|
||||
Git is required to be installed. Knowing how to use git is going to help, I will list out commands that should set you on the right but without a general understanding you will likely get stuck if you deviate from the happy path.
|
||||
|
||||
General coding knowledge is also usually a requirement. You might be able to get by without, but the more knowledgeable the better, as it will allow you to find what you are looking for and troubleshoot much more easily.
|
||||
|
||||
## Making a fork in the road
|
||||
|
||||
Your first step is to fork the repository. To do this, you will need a github account. Assuming you have a github account you can navigate to the Shipwright repo [here](https://github.com/HarbourMasters/Shipwright) and press the `Fork` button in the top right of the screen. When that process is complete you should land on a page that looks similar to the original repo, but under your username (eg: `https://github.com/<GITHUB USERNAME>/Shipwright`).
|
||||
|
||||
On this page you should see a green `Code` button, click this and copy the URL within. (You may use the github desktop app here as well, but I will not provide instructions for it). Then in your terminal/command prompt you will git clone to a local development folder using the copied URL
|
||||
|
||||
```bash
|
||||
cd <path to where you'll clone (eg, ~/Documents)>
|
||||
git clone https://github.com/<GITHUB USERNAME>/Shipwright.git
|
||||
```
|
||||
|
||||
At this point, I will now direct you to our [BUILDING](building.md) guide, it will have the most up to date documentation on getting the Ship running on your local machine. Once you have successfully built and launched the executable you may return here.
|
||||
|
||||
## Look at all those branches!
|
||||
|
||||
Congrats, if you have made it this far! Before we start making changes, you will need to create a new branch. It's recommended that you cut all your branches from the `develop` branch, as that tends to be the most up-to-date. Before cutting a branch make sure you are on the `develop` branch with the following command:
|
||||
|
||||
```bash
|
||||
git checkout develop
|
||||
```
|
||||
|
||||
Then cut your branch with the following command:
|
||||
|
||||
```bash
|
||||
git checkout -b <BRANCH NAME>
|
||||
```
|
||||
|
||||
You can name your branch whatever you want, but it's recommended to name it something that describes the feature you are working on. For example, if you are adding a new feature to the ship, you might name your branch `feature/ship-new-feature`. If you are fixing a bug, you might name your branch `bugfix/ship-bugfix`. If you are adding a new mod, you might name your branch `mod/ship-new-mod`. The important thing is to be descriptive and consistent.
|
||||
|
||||
## Making the changes
|
||||
|
||||
The limit is your imagination. You can add new features, fix bugs, add new mods, or even change the way the game works. We will demonstrate this by creating a mod that changes the speed of the day/night cycle.
|
||||
|
||||
Let's begin by finding where the time is updated. Thankfully in the save editor we have a slider already hooked up to the time of day so we can check there for reference. The save editor file is at `soh/soh/Enhancements/debugger/debugSaveEditor.cpp`, if we do a quick search within that file for time we will find the following at around line 217:
|
||||
|
||||
```cpp
|
||||
SliderInt("Time", (int32_t*)&gSaveContext.dayTime, intSliderOptionsBase.Min(0).Max(0xFFFF).Tooltip("Time of day"));
|
||||
if (Button("Dawn", buttonOptionsBase)) {
|
||||
gSaveContext.dayTime = 0x4000;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (Button("Noon", buttonOptionsBase)) {
|
||||
gSaveContext.dayTime = 0x8000;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (Button("Sunset", buttonOptionsBase)) {
|
||||
gSaveContext.dayTime = 0xC001;
|
||||
}
|
||||
ImGui::SameLine();
|
||||
if (Button("Midnight", buttonOptionsBase)) {
|
||||
gSaveContext.dayTime = 0;
|
||||
}
|
||||
```
|
||||
|
||||
So this tells us that `gSaveContext.dayTime` is what we're looking for. Let's now do a global search for this to see if we can find where it is updated. We find the following in `soh/src/code/z_kankyo.c` around line 925:
|
||||
|
||||
```cpp
|
||||
if (IS_DAY || gTimeIncrement >= 0x190) {
|
||||
gSaveContext.dayTime += gTimeIncrement;
|
||||
} else {
|
||||
gSaveContext.dayTime += gTimeIncrement * 2; // time moves twice as fast at night
|
||||
}
|
||||
```
|
||||
|
||||
We can make a quick change to this code to verify this is indeed what we are looking for, lets multiply the gTimeIncrement by 10:
|
||||
|
||||
```diff
|
||||
if (IS_DAY || gTimeIncrement >= 0x190) {
|
||||
- gSaveContext.dayTime += gTimeIncrement;
|
||||
+ gSaveContext.dayTime += gTimeIncrement * 10;
|
||||
} else {
|
||||
- gSaveContext.dayTime += gTimeIncrement * 2; // time moves twice as fast at night
|
||||
+ gSaveContext.dayTime += gTimeIncrement * 2 * 10; // time moves twice as fast at night
|
||||
}
|
||||
```
|
||||
|
||||
Rebuild the game and launch it, then load a save file. You should see that the time of day is now moving much faster. Terrific! While we could wrap this up and call it a day, we could make this user configurable by making a few more changes. I think a slider would be good for this, there's a slider in the cheat menu that we can use as a reference. Let's find it in `soh/soh/SohGui/SohMenuEnhancements.cpp` around line 1565:
|
||||
|
||||
```cpp
|
||||
AddWidget(path, "Hookshot Reach Multiplier: %.2fx", WIDGET_CVAR_SLIDER_FLOAT)
|
||||
.CVar(CVAR_CHEAT("HookshotReachMultiplier"))
|
||||
.Options(FloatSliderOptions().Format("%.2f").Min(1.0f).Max(5.0f));
|
||||
```
|
||||
This adds a `Widget` which sets a CVar, which then sets the options of the slider. We'll make our minimum 0.2 to allow it to move slower, and our maximum 5.0 to allow it to move up to 5x faster. We'll also set the default to 1.0 so that it doesn't change the behavior by default. Copy this line and paste it below, then make the relevant changes:
|
||||
|
||||
```cpp
|
||||
AddWidget(path, "Time Multiplier: %.2fx", WIDGET_CVAR_SLIDER_FLOAT)
|
||||
.CVar(CVAR_CHEAT("TimeOfDayMultiplier"))
|
||||
.Options(FloatSliderOptions().Format("%.2f").Min(0.2f).Max(5.0f).DefaultValue(1.0f));
|
||||
```
|
||||
|
||||
Now we need to replace our hard coded values with the new variable. We can do this by replacing the `10` with a cvar call
|
||||
|
||||
```diff
|
||||
if (IS_DAY || gTimeIncrement >= 0x190) {
|
||||
- gSaveContext.dayTime += gTimeIncrement * 10;
|
||||
+ gSaveContext.dayTime += gTimeIncrement * CVarGetFloat(CVAR_CHEAT("TimeOfDayMultiplier"),1.0f);
|
||||
} else {
|
||||
- gSaveContext.dayTime += gTimeIncrement * 2 * 10;
|
||||
+ gSaveContext.dayTime += gTimeIncrement * 2 * CVarGetFloat(CVAR_CHEAT("TimeOfDayMultiplier"),1.0f);
|
||||
}
|
||||
```
|
||||
|
||||
After rebuilding and launching the game, you should now see a new slider in the cheat menu that allows you to change the speed of the day/night cycle. Nice!
|
||||
If you're ever not sure about how something would be implemented, you can always look at external resources like the [Cloudmodding Wiki](https://wiki.cloudmodding.com/oot/Main_Page) to get a better perspective.
|
||||
## Are you committed?
|
||||
|
||||
Now that we have made our changes, we need to commit them. First we need to add the files we changed to the staging area. We can do this with the following command:
|
||||
|
||||
```bash
|
||||
git add .
|
||||
```
|
||||
|
||||
This will add all the files we changed to the staging area. If you want to add specific files you can do so by replacing the `.` with the file path. For example, if we only wanted to add the `soh/soh/SohMenuBar.cpp` file we would do the following:
|
||||
|
||||
```bash
|
||||
git add soh/soh/SohMenuBar.cpp
|
||||
```
|
||||
|
||||
Now that we have added our files to the staging area, we need to commit them. We can do this with the following command:
|
||||
|
||||
```bash
|
||||
git commit -m "Add time multiplier cheat"
|
||||
```
|
||||
|
||||
You can verify everything was committed correctly by running the following command:
|
||||
|
||||
```bash
|
||||
git status
|
||||
```
|
||||
|
||||
Now push your changes to your fork with the following command:
|
||||
|
||||
```bash
|
||||
git push origin <BRANCH NAME>
|
||||
```
|
||||
|
||||
## Sharing the treasure
|
||||
|
||||
Now that you have made your changes, you can share them with the world! You can do this by creating a pull request to your own fork. You can navigate around in the Github UI to find this, or you can use the following replacing the relevant info:
|
||||
```
|
||||
https://github.com/<GITHUB USERNAME>/Shipwright/compare/develop...<BRANCH NAME>
|
||||
```
|
||||
|
||||
From there you should see all of your changes listed, and a big green `Create pull request` button. You can fill out relevant information and a title and create the pull request. Once you have done this the CI will begin building distributables for your changes, and when they are ready they will be added to the bottom of your Pull request description! (See other PRs for examples)
|
||||
|
||||
Note: DO NOT MERGE THIS PULL REQUEST. You will want your fork's develop branch to stay in sync with the upstream develop branch. We will go over this in the next section, but all changes should stay on their own branches, with open PR's to continue generating distributables.
|
||||
|
||||
## Maintaining your fork'in mod
|
||||
|
||||
A month has passed, and new features have been added upstream that you want included in your distribution. You can do this by rebasing your branch on top of the upstream develop branch. You can do this with the following commands:
|
||||
|
||||
```bash
|
||||
# This command will add the upstream repository as a remote, only needs to be done once
|
||||
git remote add upstream https://github.com/HarbourMasters/Shipwright.git
|
||||
|
||||
git checkout develop
|
||||
git pull upstream develop
|
||||
git checkout <BRANCH NAME>
|
||||
git pull origin develop --rebase
|
||||
```
|
||||
|
||||
If you happen to run into merge conflicts, it is outside the scope of this tutorial to explain how to resolve them. If you want to abort the rebase you can run the following command:
|
||||
|
||||
```bash
|
||||
git rebase --abort
|
||||
```
|
||||
|
||||
Assuming all went well, you can now push your changes to your fork with the following command:
|
||||
|
||||
```bash
|
||||
git push origin <BRANCH NAME> --force
|
||||
```
|
||||
|
||||
## Combining multiple mods
|
||||
|
||||
You have been working on your mod for a while, and you want to combine it with another mod. You can do this by adding the other mod as a remote, and then merging it into your branch. You can do this with the following commands:
|
||||
|
||||
```bash
|
||||
# This command will add the other repository as a remote, only needs to be done once
|
||||
git remote add <MOD AUTHOR NAME> https://github.com/<MOD AUTHOR>/Shipwright.git
|
||||
|
||||
git checkout <YOUR BRANCH NAME>
|
||||
git pull <MOD AUTHOR NAME> <MOD AUTHOR BRANCH NAME>
|
||||
```
|
||||
|
||||
If you happen to run into merge conflicts, it is outside the scope of this tutorial to explain how to resolve them. If you want to abort the merge you can run the following command:
|
||||
|
||||
```bash
|
||||
git merge --abort
|
||||
```
|
||||
|
||||
Assuming all went well, you can now push your changes to your fork with the following command:
|
||||
|
||||
```bash
|
||||
git push origin <YOUR BRANCH NAME>
|
||||
```
|
||||
5
docs/VERSIONING.md
Normal file
5
docs/VERSIONING.md
Normal file
@@ -0,0 +1,5 @@
|
||||
## About Versions
|
||||
|
||||
The Ship of Harkinian's versioning system is a unique system, comprising of a three-numbered version (`x.y.z`) and a version codename. The main version number `x` signifies major feature updates that require a new `oot.o2r` file. The version number `y` signifies major feature updates and bugfixes that do not require a new `oot.o2r` file. The version number `z` signifies minor updates such as a collection of bugfixes.
|
||||
|
||||
The version codename consists of a sci-fi film character followed by a phonetic alphabet code word. The film character represents a major release version which increments with the major `x` or `y` version bumps. The code word represents a minor release version which increments with the minor `z` version bump.
|
||||
78
docs/supportedHashes.json
Normal file
78
docs/supportedHashes.json
Normal file
@@ -0,0 +1,78 @@
|
||||
[
|
||||
{
|
||||
"name": "PAL 1.0",
|
||||
"sha1": "328a1f1beba30ce5e178f031662019eb32c5f3b5"
|
||||
},
|
||||
{
|
||||
"name": "PAL 1.1",
|
||||
"sha1": "cfbb98d392e4a9d39da8285d10cbef3974c2f012"
|
||||
},
|
||||
{
|
||||
"name": "PAL GC",
|
||||
"sha1": "0227d7c0074f2d0ac935631990da8ec5914597b4"
|
||||
},
|
||||
{
|
||||
"name": "PAL MQ",
|
||||
"sha1": "f46239439f59a2a594ef83cf68ef65043b1bffe2"
|
||||
},
|
||||
{
|
||||
"name": "PAL GC (Debug)",
|
||||
"sha1": "cee6bc3c2a634b41728f2af8da54d9bf8cc14099"
|
||||
},
|
||||
{
|
||||
"name": "PAL MQ (Debug)",
|
||||
"sha1": "079b855b943d6ad8bd1eb026c0ed169ecbdac7da"
|
||||
},
|
||||
{
|
||||
"name": "PAL MQ (Debug)",
|
||||
"sha1": "50bebedad9e0f10746a52b07239e47fa6c284d03"
|
||||
},
|
||||
{
|
||||
"name": "PAL MQ (Debug)",
|
||||
"sha1": "cfecfdc58d650e71a200c81f033de4e6d617a9f6"
|
||||
},
|
||||
{
|
||||
"name": "NTSC 1.0 (US)",
|
||||
"sha1": "ad69c91157f6705e8ab06c79fe08aad47bb57ba7"
|
||||
},
|
||||
{
|
||||
"name": "NTSC 1.1 (US)",
|
||||
"sha1": "d3ecb253776cd847a5aa63d859d8c89a2f37b364"
|
||||
},
|
||||
{
|
||||
"name": "NTSC 1.2 (US)",
|
||||
"sha1": "41b3bdc48d98c48529219919015a1af22f5057c2"
|
||||
},
|
||||
{
|
||||
"name": "NTSC 1.0 (JP)",
|
||||
"sha1": "c892bbda3993e66bd0d56a10ecd30b1ee612210f"
|
||||
},
|
||||
{
|
||||
"name": "NTSC 1.1 (JP)",
|
||||
"sha1": "dbfc81f655187dc6fefd93fa6798face770d579d"
|
||||
},
|
||||
{
|
||||
"name": "NTSC 1.2 (JP)",
|
||||
"sha1": "fa5f5942b27480d60243c2d52c0e93e26b9e6b86"
|
||||
},
|
||||
{
|
||||
"name": "NTSC GC (US)",
|
||||
"sha1": "b82710ba2bd3b4c6ee8aa1a7e9acf787dfc72e9b"
|
||||
},
|
||||
{
|
||||
"name": "NTSC MQ (US)",
|
||||
"sha1": "8b5d13aac69bfbf989861cfdc50b1d840945fc1d"
|
||||
},
|
||||
{
|
||||
"name": "NTSC GC (JP)",
|
||||
"sha1": "0769c84615422d60f16925cd859593cdfa597f84"
|
||||
},
|
||||
{
|
||||
"name": "NTSC GC (JP) (Collector's Edition)",
|
||||
"sha1": "2ce2d1a9f0534c9cd9fa04ea5317b80da21e5e73"
|
||||
},
|
||||
{
|
||||
"name": "NTSC MQ (JP)",
|
||||
"sha1": "dd14e143c4275861fe93ea79d0c02e36ae8c6c2f"
|
||||
}
|
||||
]
|
||||
49
run-clang-format.ps1
Normal file
49
run-clang-format.ps1
Normal file
@@ -0,0 +1,49 @@
|
||||
Using Namespace System
|
||||
$url = "https://github.com/llvm/llvm-project/releases/download/llvmorg-14.0.6/LLVM-14.0.6-win64.exe"
|
||||
$llvmInstallerPath = ".\LLVM-14.0.6-win64.exe"
|
||||
$clangFormatFilePath = ".\clang-format.exe"
|
||||
$requiredVersion = "clang-format version 14.0.6"
|
||||
$currentVersion = ""
|
||||
|
||||
function Test-7ZipInstalled {
|
||||
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
|
||||
return Test-Path $sevenZipPath -PathType Leaf
|
||||
}
|
||||
|
||||
if (Test-Path $clangFormatFilePath) {
|
||||
$currentVersion = & $clangFormatFilePath --version
|
||||
if (-not ($currentVersion -eq $requiredVersion)) {
|
||||
# Delete the existing file if the version is incorrect
|
||||
Remove-Item $clangFormatFilePath -Force
|
||||
}
|
||||
}
|
||||
|
||||
if (-not (Test-Path $clangFormatFilePath) -or ($currentVersion -ne $requiredVersion)) {
|
||||
if (-not (Test-7ZipInstalled)) {
|
||||
Write-Host "7-Zip is not installed. Please install 7-Zip and run the script again."
|
||||
exit
|
||||
}
|
||||
|
||||
$wc = New-Object net.webclient
|
||||
$wc.Downloadfile($url, $PSScriptRoot + $llvmInstallerPath)
|
||||
|
||||
$sevenZipPath = "C:\Program Files\7-Zip\7z.exe"
|
||||
$specificFileInArchive = "bin\clang-format.exe"
|
||||
& "$sevenZipPath" e $llvmInstallerPath $specificFileInArchive
|
||||
|
||||
Remove-Item $llvmInstallerPath -Force
|
||||
}
|
||||
|
||||
$basePath = (Resolve-Path .).Path
|
||||
$files = Get-ChildItem -Path $basePath\soh -Recurse -File `
|
||||
| Where-Object { ($_.Extension -eq '.c' -or $_.Extension -eq '.cpp' -or `
|
||||
(($_.Extension -eq '.h' -or $_.Extension -eq '.hpp') -and `
|
||||
(-not ($_.FullName -like "*\soh\src\*" -or $_.FullName -like "*\soh\include\*")))) -and `
|
||||
(-not ($_.FullName -like "*\soh\assets\*" -or $_.FullName -like "*\soh\build\*")) }
|
||||
|
||||
for ($i = 0; $i -lt $files.Length; $i++) {
|
||||
$file = $files[$i]
|
||||
$relativePath = $file.FullName.Substring($basePath.Length + 1)
|
||||
Write-Host "Formatting [$($i+1)/$($files.Length)] $relativePath"
|
||||
.\clang-format.exe -i $file.FullName
|
||||
}
|
||||
29
run-clang-format.sh
Executable file
29
run-clang-format.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
# this line does quite a bit, so let's break it down
|
||||
#
|
||||
# find soh
|
||||
# use "find" to look in the "soh" directory
|
||||
# this ensures we don't try to format stuff in the submodules
|
||||
#
|
||||
# -type f
|
||||
# only look for files
|
||||
#
|
||||
# -name "*.c" -o -name "*.cpp"
|
||||
# find all .c and .cpp files
|
||||
#
|
||||
# ( -name "*.h" -o -name "*.hpp" ) ! -path "soh/src/**.h" ! -path "soh/include/**.h"
|
||||
# find all .h and .hpp files that aren't in soh/src or soh/include
|
||||
# this is because zret decomp only runs clang-format on c files
|
||||
# https://github.com/zeldaret/mm/blob/b7e5468ca16315a7e322055eff3d97fe980bbc25/format.py#L182
|
||||
#
|
||||
# ! -path "soh/assets/*"
|
||||
# asset headers are autogenerated, don't fight them
|
||||
#
|
||||
# -print0
|
||||
# separate paths with NUL bytes, avoiding issues with spaces in paths
|
||||
#
|
||||
# | xargs -0 clang-format-14 -i -verbose
|
||||
# use xargs to take each path we've found
|
||||
# and pass it as an argument to clang-format
|
||||
# verbose to print files being formatted and X out of Y status
|
||||
|
||||
find soh -type f \( -name "*.c" -o -name "*.cpp" -o \( \( -name "*.h" -o -name "*.hpp" \) ! -path "soh/src/*" ! -path "soh/include/*" \) \) ! -path "soh/assets/*" -print0 | xargs -0 clang-format-14 -i --verbose
|
||||
6
scripts/linux/appimage/build.sh
Executable file
6
scripts/linux/appimage/build.sh
Executable file
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
|
||||
cmake --no-warn-unused-cli -H. -Bbuild-cmake -GNinja -DCMAKE_BUILD_TYPE:STRING=Release
|
||||
cmake --build build-cmake --config Release --
|
||||
|
||||
(cd build-cmake && cpack -G External)
|
||||
9
scripts/linux/appimage/soh.desktop
Normal file
9
scripts/linux/appimage/soh.desktop
Normal file
@@ -0,0 +1,9 @@
|
||||
[Desktop Entry]
|
||||
Version=1.0
|
||||
Name=SOH
|
||||
Exec=soh.elf
|
||||
Terminal=false
|
||||
Icon=sohIcon
|
||||
Type=Application
|
||||
Categories=Game;
|
||||
X-AppImage-Integrate=false
|
||||
4
scripts/switch/build.sh
Executable file
4
scripts/switch/build.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
cmake -H. -Bbuild-switch -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/Switch.cmake
|
||||
cmake --build build-switch --target soh_nro
|
||||
4
scripts/wiiu/build.sh
Executable file
4
scripts/wiiu/build.sh
Executable file
@@ -0,0 +1,4 @@
|
||||
#!/bin/bash
|
||||
|
||||
cmake -H. -Bbuild-wiiu -GNinja -DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/WiiU.cmake -DCMAKE_BUILD_TYPE:STRING=Release
|
||||
cmake --build build-wiiu --target soh_wuhb --config Release
|
||||
23
soh/.clang-format
Normal file
23
soh/.clang-format
Normal file
@@ -0,0 +1,23 @@
|
||||
IndentWidth: 4
|
||||
Language: Cpp
|
||||
UseTab: Never
|
||||
ColumnLimit: 120
|
||||
PointerAlignment: Left
|
||||
BreakBeforeBraces: Attach
|
||||
SpaceAfterCStyleCast: false
|
||||
Cpp11BracedListStyle: false
|
||||
IndentCaseLabels: true
|
||||
BinPackArguments: true
|
||||
BinPackParameters: true
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignOperands: true
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakBeforeBinaryOperators: None
|
||||
AllowShortBlocksOnASingleLine: true
|
||||
AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortFunctionsOnASingleLine: false
|
||||
AlignEscapedNewlines: Left
|
||||
AlignTrailingComments: true
|
||||
SortIncludes: false
|
||||
5
soh/.clang-tidy
Normal file
5
soh/.clang-tidy
Normal file
@@ -0,0 +1,5 @@
|
||||
Checks: '-*,readability-braces-around-statements'
|
||||
WarningsAsErrors: ''
|
||||
HeaderFilterRegex: '(src|include)\/.*\.h$'
|
||||
FormatStyle: 'file'
|
||||
CheckOptions:
|
||||
2
soh/.gitattributes
vendored
Normal file
2
soh/.gitattributes
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
# Auto detect text files and perform LF normalization
|
||||
* text=auto
|
||||
413
soh/.gitignore
vendored
Normal file
413
soh/.gitignore
vendored
Normal file
@@ -0,0 +1,413 @@
|
||||
# Cache files
|
||||
__pycache__/
|
||||
.pyc
|
||||
.DS_Store
|
||||
|
||||
# Text editor remnants
|
||||
.vscode/
|
||||
.vs/
|
||||
.idea/
|
||||
cmake-build-debug
|
||||
venv/
|
||||
|
||||
# Project-specific ignores
|
||||
build/
|
||||
expected/
|
||||
notes/
|
||||
baserom/
|
||||
docs/doxygen/
|
||||
*.elf
|
||||
*-arm64
|
||||
*-x86_64
|
||||
*.sra
|
||||
*.z64
|
||||
*.n64
|
||||
*.v64
|
||||
*.map
|
||||
*.dump
|
||||
*.app/
|
||||
*.icns
|
||||
out.txt
|
||||
shipofharkinian.ini
|
||||
imgui.ini
|
||||
oot.otr
|
||||
oot_save.sav
|
||||
|
||||
# Tool artifacts
|
||||
tools/mipspro7.2_compiler/
|
||||
tools/overlayhelpers/batchdisasm/output/*
|
||||
tools/overlayhelpers/batchdisasm/output2/*
|
||||
tools/overlayhelpers/batchdisasm/mipsdisasm/*
|
||||
tools/disasm/output/*
|
||||
tools/asmsplitter/asm/*
|
||||
tools/asmsplitter/c/*
|
||||
ctx.c
|
||||
tools/*dSYM/
|
||||
graphs/
|
||||
|
||||
# Assets
|
||||
*.png
|
||||
*.jpg
|
||||
*.mdli
|
||||
*.anmi
|
||||
*.obj
|
||||
*.mtl
|
||||
*.fbx
|
||||
!*_custom*
|
||||
.extracted-assets.json
|
||||
|
||||
# Docs
|
||||
!docs/tutorial/
|
||||
|
||||
# Per-user configuration
|
||||
.python-version
|
||||
|
||||
|
||||
## Ignore Visual Studio temporary files, build results, and
|
||||
## files generated by popular Visual Studio add-ons.
|
||||
##
|
||||
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
*.user
|
||||
*.userosscache
|
||||
*.sln.docstates
|
||||
|
||||
# User-specific files (MonoDevelop/Xamarin Studio)
|
||||
*.userprefs
|
||||
|
||||
# Build results
|
||||
[Dd]ebug/
|
||||
[Dd]ebugPublic/
|
||||
[Rr]elease/
|
||||
[Rr]eleases/
|
||||
x64/
|
||||
x86/
|
||||
bld/
|
||||
[Bb]in/
|
||||
[Oo]bj/
|
||||
[Ll]og/
|
||||
|
||||
# Visual Studio 2015/2017 cache/options directory
|
||||
.vs/
|
||||
# Uncomment if you have tasks that create the project's static files in wwwroot
|
||||
#wwwroot/
|
||||
|
||||
# Visual Studio 2017 auto generated files
|
||||
Generated\ Files/
|
||||
|
||||
# MSTest test Results
|
||||
[Tt]est[Rr]esult*/
|
||||
[Bb]uild[Ll]og.*
|
||||
|
||||
# NUNIT
|
||||
*.VisualState.xml
|
||||
TestResult.xml
|
||||
|
||||
# Build Results of an ATL Project
|
||||
[Dd]ebugPS/
|
||||
[Rr]eleasePS/
|
||||
dlldata.c
|
||||
|
||||
# Benchmark Results
|
||||
BenchmarkDotNet.Artifacts/
|
||||
|
||||
# .NET Core
|
||||
project.lock.json
|
||||
project.fragment.lock.json
|
||||
artifacts/
|
||||
**/Properties/launchSettings.json
|
||||
|
||||
# StyleCop
|
||||
StyleCopReport.xml
|
||||
|
||||
# Files built by Visual Studio
|
||||
*_i.c
|
||||
*_p.c
|
||||
*_i.h
|
||||
*.ilk
|
||||
*.meta
|
||||
*.obj
|
||||
*.iobj
|
||||
*.pch
|
||||
*.pdb
|
||||
*.ipdb
|
||||
*.pgc
|
||||
*.pgd
|
||||
*.rsp
|
||||
*.sbr
|
||||
*.tlb
|
||||
*.tli
|
||||
*.tlh
|
||||
*.tmp
|
||||
*.tmp_proj
|
||||
*.log
|
||||
*.vspscc
|
||||
*.vssscc
|
||||
.builds
|
||||
*.pidb
|
||||
*.svclog
|
||||
*.scc
|
||||
|
||||
# Chutzpah Test files
|
||||
_Chutzpah*
|
||||
|
||||
# Visual C++ cache files
|
||||
ipch/
|
||||
*.aps
|
||||
*.ncb
|
||||
*.opendb
|
||||
*.opensdf
|
||||
*.sdf
|
||||
*.cachefile
|
||||
*.VC.db
|
||||
*.VC.VC.opendb
|
||||
|
||||
# Visual Studio profiler
|
||||
*.psess
|
||||
*.vsp
|
||||
*.vspx
|
||||
*.sap
|
||||
|
||||
# Visual Studio Trace Files
|
||||
*.e2e
|
||||
|
||||
# TFS 2012 Local Workspace
|
||||
$tf/
|
||||
|
||||
# Guidance Automation Toolkit
|
||||
*.gpState
|
||||
|
||||
# ReSharper is a .NET coding add-in
|
||||
_ReSharper*/
|
||||
*.[Rr]e[Ss]harper
|
||||
*.DotSettings.user
|
||||
|
||||
# JustCode is a .NET coding add-in
|
||||
.JustCode
|
||||
|
||||
# TeamCity is a build add-in
|
||||
_TeamCity*
|
||||
|
||||
# DotCover is a Code Coverage Tool
|
||||
*.dotCover
|
||||
|
||||
# AxoCover is a Code Coverage Tool
|
||||
.axoCover/*
|
||||
!.axoCover/settings.json
|
||||
|
||||
# Visual Studio code coverage results
|
||||
*.coverage
|
||||
*.coveragexml
|
||||
|
||||
# NCrunch
|
||||
_NCrunch_*
|
||||
.*crunch*.local.xml
|
||||
nCrunchTemp_*
|
||||
|
||||
# MightyMoose
|
||||
*.mm.*
|
||||
AutoTest.Net/
|
||||
|
||||
# Web workbench (sass)
|
||||
.sass-cache/
|
||||
|
||||
# Installshield output folder
|
||||
[Ee]xpress/
|
||||
|
||||
# DocProject is a documentation generator add-in
|
||||
DocProject/buildhelp/
|
||||
DocProject/Help/*.HxT
|
||||
DocProject/Help/*.HxC
|
||||
DocProject/Help/*.hhc
|
||||
DocProject/Help/*.hhk
|
||||
DocProject/Help/*.hhp
|
||||
DocProject/Help/Html2
|
||||
DocProject/Help/html
|
||||
|
||||
# Click-Once directory
|
||||
publish/
|
||||
|
||||
# Publish Web Output
|
||||
*.[Pp]ublish.xml
|
||||
*.azurePubxml
|
||||
# Note: Comment the next line if you want to checkin your web deploy settings,
|
||||
# but database connection strings (with potential passwords) will be unencrypted
|
||||
*.pubxml
|
||||
*.publishproj
|
||||
|
||||
# Microsoft Azure Web App publish settings. Comment the next line if you want to
|
||||
# checkin your Azure Web App publish settings, but sensitive information contained
|
||||
# in these scripts will be unencrypted
|
||||
PublishScripts/
|
||||
|
||||
# NuGet Packages
|
||||
*.nupkg
|
||||
# The packages folder can be ignored because of Package Restore
|
||||
**/[Pp]ackages/*
|
||||
# except build/, which is used as an MSBuild target.
|
||||
!**/[Pp]ackages/build/
|
||||
# Uncomment if necessary however generally it will be regenerated when needed
|
||||
#!**/[Pp]ackages/repositories.config
|
||||
# NuGet v3's project.json files produces more ignorable files
|
||||
*.nuget.props
|
||||
*.nuget.targets
|
||||
|
||||
# Microsoft Azure Build Output
|
||||
csx/
|
||||
*.build.csdef
|
||||
|
||||
# Microsoft Azure Emulator
|
||||
ecf/
|
||||
rcf/
|
||||
|
||||
# Windows Store app package directories and files
|
||||
AppPackages/
|
||||
BundleArtifacts/
|
||||
Package.StoreAssociation.xml
|
||||
_pkginfo.txt
|
||||
*.appx
|
||||
|
||||
# Visual Studio cache files
|
||||
# files ending in .cache can be ignored
|
||||
*.[Cc]ache
|
||||
# but keep track of directories ending in .cache
|
||||
!*.[Cc]ache/
|
||||
|
||||
# Others
|
||||
ClientBin/
|
||||
~$*
|
||||
*~
|
||||
*.dbmdl
|
||||
*.dbproj.schemaview
|
||||
*.jfm
|
||||
*.pfx
|
||||
*.publishsettings
|
||||
orleans.codegen.cs
|
||||
|
||||
# Including strong name files can present a security risk
|
||||
# (https://github.com/github/gitignore/pull/2483#issue-259490424)
|
||||
#*.snk
|
||||
|
||||
# Since there are multiple workflows, uncomment next line to ignore bower_components
|
||||
# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622)
|
||||
#bower_components/
|
||||
|
||||
# RIA/Silverlight projects
|
||||
Generated_Code/
|
||||
|
||||
# Backup & report files from converting an old project file
|
||||
# to a newer Visual Studio version. Backup files are not needed,
|
||||
# because we have git ;-)
|
||||
_UpgradeReport_Files/
|
||||
Backup*/
|
||||
UpgradeLog*.XML
|
||||
UpgradeLog*.htm
|
||||
ServiceFabricBackup/
|
||||
*.rptproj.bak
|
||||
|
||||
# SQL Server files
|
||||
*.mdf
|
||||
*.ldf
|
||||
*.ndf
|
||||
|
||||
# Business Intelligence projects
|
||||
*.rdl.data
|
||||
*.bim.layout
|
||||
*.bim_*.settings
|
||||
*.rptproj.rsuser
|
||||
|
||||
# Microsoft Fakes
|
||||
FakesAssemblies/
|
||||
|
||||
# GhostDoc plugin setting file
|
||||
*.GhostDoc.xml
|
||||
|
||||
# Node.js Tools for Visual Studio
|
||||
.ntvs_analysis.dat
|
||||
node_modules/
|
||||
|
||||
# Visual Studio 6 build log
|
||||
*.plg
|
||||
|
||||
# Visual Studio 6 workspace options file
|
||||
*.opt
|
||||
|
||||
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
|
||||
*.vbw
|
||||
|
||||
# Visual Studio LightSwitch build output
|
||||
**/*.HTMLClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/GeneratedArtifacts
|
||||
**/*.DesktopClient/ModelManifest.xml
|
||||
**/*.Server/GeneratedArtifacts
|
||||
**/*.Server/ModelManifest.xml
|
||||
_Pvt_Extensions
|
||||
|
||||
# Paket dependency manager
|
||||
.paket/paket.exe
|
||||
paket-files/
|
||||
|
||||
# FAKE - F# Make
|
||||
.fake/
|
||||
|
||||
# JetBrains Rider
|
||||
.idea/
|
||||
*.sln.iml
|
||||
|
||||
# CodeRush
|
||||
.cr/
|
||||
|
||||
# Python Tools for Visual Studio (PTVS)
|
||||
__pycache__/
|
||||
*.pyc
|
||||
|
||||
# Cake - Uncomment if you are using it
|
||||
# tools/**
|
||||
# !tools/packages.config
|
||||
|
||||
# Tabs Studio
|
||||
*.tss
|
||||
|
||||
# Telerik's JustMock configuration file
|
||||
*.jmconfig
|
||||
|
||||
# BizTalk build output
|
||||
*.btp.cs
|
||||
*.btm.cs
|
||||
*.odx.cs
|
||||
*.xsd.cs
|
||||
|
||||
# OpenCover UI analysis results
|
||||
OpenCover/
|
||||
|
||||
# Azure Stream Analytics local run output
|
||||
ASALocalRun/
|
||||
|
||||
# MSBuild Binary and Structured Log
|
||||
*.binlog
|
||||
|
||||
# NVidia Nsight GPU debugger configuration file
|
||||
*.nvuser
|
||||
|
||||
# MFractors (Xamarin productivity tool) working folder
|
||||
.mfractor/
|
||||
|
||||
*.out
|
||||
*.o
|
||||
*.d
|
||||
lib/libgfxd/libgfxd.a
|
||||
ExporterTest/ExporterTest.a
|
||||
ZAPDUtils/ZAPDUtils.a
|
||||
.vscode/
|
||||
build/
|
||||
ZAPDUtils/build/
|
||||
ZAPD/BuildInfo.h
|
||||
cvars.cfg
|
||||
|
||||
DebugObj/*
|
||||
ReleaseObj/*
|
||||
|
||||
# Junk from App Bundle
|
||||
appsupport
|
||||
12
soh/.gitrepo
Normal file
12
soh/.gitrepo
Normal file
@@ -0,0 +1,12 @@
|
||||
; DO NOT EDIT (unless you know what you are doing)
|
||||
;
|
||||
; This subdirectory is a git "subrepo", and this file is maintained by the
|
||||
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
|
||||
;
|
||||
[subrepo]
|
||||
remote = https://github.com/HarbourMasters/soh.git
|
||||
branch = master
|
||||
commit = 75ccbade8ba26485266a8c8aa7d81e495d0ca4dd
|
||||
parent = 8417db65c73cb3d117f2a0f9040105022a45480c
|
||||
method = rebase
|
||||
cmdver = 0.4.1
|
||||
65
soh/CMake/Default.cmake
Normal file
65
soh/CMake/Default.cmake
Normal file
@@ -0,0 +1,65 @@
|
||||
################################################################################
|
||||
# Command for variable_watch. This command issues error message, if a variable
|
||||
# is changed. If variable PROPERTY_READER_GUARD_DISABLED is TRUE nothing happens
|
||||
# variable_watch(<variable> property_reader_guard)
|
||||
################################################################################
|
||||
function(property_reader_guard VARIABLE ACCESS VALUE CURRENT_LIST_FILE STACK)
|
||||
if("${PROPERTY_READER_GUARD_DISABLED}")
|
||||
return()
|
||||
endif()
|
||||
|
||||
if("${ACCESS}" STREQUAL "MODIFIED_ACCESS")
|
||||
message(FATAL_ERROR
|
||||
" Variable ${VARIABLE} is not supposed to be changed.\n"
|
||||
" It is used only for reading target property ${VARIABLE}.\n"
|
||||
" Use\n"
|
||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}\" \"<value>\")\n"
|
||||
" or\n"
|
||||
" set_target_properties(\"<target>\" PROPERTIES \"${VARIABLE}_<CONFIG>\" \"<value>\")\n"
|
||||
" instead.\n")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Create variable <name> with generator expression that expands to value of
|
||||
# target property <name>_<CONFIG>. If property is empty or not set then property
|
||||
# <name> is used instead. Variable <name> has watcher property_reader_guard that
|
||||
# doesn't allow to edit it.
|
||||
# create_property_reader(<name>)
|
||||
# Input:
|
||||
# name - Name of watched property and output variable
|
||||
################################################################################
|
||||
function(create_property_reader NAME)
|
||||
set(PROPERTY_READER_GUARD_DISABLED TRUE)
|
||||
set(CONFIG_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}_$<UPPER_CASE:$<CONFIG>>>>")
|
||||
set(IS_CONFIG_VALUE_EMPTY "$<STREQUAL:${CONFIG_VALUE},>")
|
||||
set(GENERAL_VALUE "$<TARGET_GENEX_EVAL:${PROPS_TARGET},$<TARGET_PROPERTY:${PROPS_TARGET},${NAME}>>")
|
||||
set("${NAME}" "$<IF:${IS_CONFIG_VALUE_EMPTY},${GENERAL_VALUE},${CONFIG_VALUE}>" PARENT_SCOPE)
|
||||
variable_watch("${NAME}" property_reader_guard)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Set property $<name>_${PROPS_CONFIG_U} of ${PROPS_TARGET} to <value>
|
||||
# set_config_specific_property(<name> <value>)
|
||||
# Input:
|
||||
# name - Prefix of property name
|
||||
# value - New value
|
||||
################################################################################
|
||||
function(set_config_specific_property NAME VALUE)
|
||||
set_target_properties("${PROPS_TARGET}" PROPERTIES "${NAME}_${PROPS_CONFIG_U}" "${VALUE}")
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
|
||||
create_property_reader("TARGET_NAME")
|
||||
create_property_reader("OUTPUT_DIRECTORY")
|
||||
|
||||
set_config_specific_property("TARGET_NAME" "${PROPS_TARGET}")
|
||||
set_config_specific_property("OUTPUT_NAME" "${TARGET_NAME}")
|
||||
set_config_specific_property("ARCHIVE_OUTPUT_NAME" "${TARGET_NAME}")
|
||||
set_config_specific_property("LIBRARY_OUTPUT_NAME" "${TARGET_NAME}")
|
||||
set_config_specific_property("RUNTIME_OUTPUT_NAME" "${TARGET_NAME}")
|
||||
|
||||
set_config_specific_property("ARCHIVE_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
||||
set_config_specific_property("LIBRARY_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
||||
set_config_specific_property("RUNTIME_OUTPUT_DIRECTORY" "${OUTPUT_DIRECTORY}")
|
||||
16
soh/CMake/DefaultCXX.cmake
Normal file
16
soh/CMake/DefaultCXX.cmake
Normal file
@@ -0,0 +1,16 @@
|
||||
include("${CMAKE_CURRENT_LIST_DIR}/Default.cmake")
|
||||
|
||||
set_config_specific_property("OUTPUT_DIRECTORY" "${CMAKE_SOURCE_DIR}$<$<NOT:$<STREQUAL:${CMAKE_VS_PLATFORM_NAME},Win32>>:/${CMAKE_VS_PLATFORM_NAME}>/${PROPS_CONFIG}")
|
||||
|
||||
if(MSVC)
|
||||
create_property_reader("DEFAULT_CXX_EXCEPTION_HANDLING")
|
||||
create_property_reader("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT")
|
||||
|
||||
set_target_properties("${PROPS_TARGET}" PROPERTIES MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>DLL")
|
||||
set_config_specific_property("DEFAULT_CXX_EXCEPTION_HANDLING" "/EHsc")
|
||||
if (CMAKE_C_COMPILER_LAUNCHER MATCHES "ccache|sccache")
|
||||
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Z7")
|
||||
else()
|
||||
set_config_specific_property("DEFAULT_CXX_DEBUG_INFORMATION_FORMAT" "/Zi")
|
||||
endif()
|
||||
endif()
|
||||
15
soh/CMake/Linux32bit-toolchain.cmake
Normal file
15
soh/CMake/Linux32bit-toolchain.cmake
Normal file
@@ -0,0 +1,15 @@
|
||||
# which compilers to use for C and C++
|
||||
set(CMAKE_C_COMPILER gcc)
|
||||
set(CMAKE_C_FLAGS "-m32")
|
||||
set(CMAKE_CXX_COMPILER g++)
|
||||
set(CMAKE_CXX_FLAGS -m32)
|
||||
|
||||
# here is the target environment located
|
||||
#set(CMAKE_FIND_ROOT_PATH /lib/i386-linux-gnu )
|
||||
|
||||
# adjust the default behaviour of the FIND_XXX() commands:
|
||||
# search headers and libraries in the target environment, search
|
||||
# programs in the host environment
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE BOTH)
|
||||
233
soh/CMake/Utils.cmake
Normal file
233
soh/CMake/Utils.cmake
Normal file
@@ -0,0 +1,233 @@
|
||||
# utils file for projects came from visual studio solution with cmake-converter.
|
||||
|
||||
################################################################################
|
||||
# Wrap each token of the command with condition
|
||||
################################################################################
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0054 NEW)
|
||||
macro(prepare_commands)
|
||||
unset(TOKEN_ROLE)
|
||||
unset(COMMANDS)
|
||||
foreach(TOKEN ${ARG_COMMANDS})
|
||||
if("${TOKEN}" STREQUAL "COMMAND")
|
||||
set(TOKEN_ROLE "KEYWORD")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "KEYWORD")
|
||||
set(TOKEN_ROLE "CONDITION")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
|
||||
set(TOKEN_ROLE "COMMAND")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
|
||||
set(TOKEN_ROLE "ARG")
|
||||
endif()
|
||||
|
||||
if("${TOKEN_ROLE}" STREQUAL "KEYWORD")
|
||||
list(APPEND COMMANDS "${TOKEN}")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "CONDITION")
|
||||
set(CONDITION ${TOKEN})
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "COMMAND")
|
||||
list(APPEND COMMANDS "$<$<NOT:${CONDITION}>:${DUMMY}>$<${CONDITION}:${TOKEN}>")
|
||||
elseif("${TOKEN_ROLE}" STREQUAL "ARG")
|
||||
list(APPEND COMMANDS "$<${CONDITION}:${TOKEN}>")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
cmake_policy(POP)
|
||||
|
||||
################################################################################
|
||||
# Transform all the tokens to absolute paths
|
||||
################################################################################
|
||||
macro(prepare_output)
|
||||
unset(OUTPUT)
|
||||
foreach(TOKEN ${ARG_OUTPUT})
|
||||
if(IS_ABSOLUTE ${TOKEN})
|
||||
list(APPEND OUTPUT "${TOKEN}")
|
||||
else()
|
||||
list(APPEND OUTPUT "${CMAKE_CURRENT_SOURCE_DIR}/${TOKEN}")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
################################################################################
|
||||
# Parse add_custom_command_if args.
|
||||
#
|
||||
# Input:
|
||||
# PRE_BUILD - Pre build event option
|
||||
# PRE_LINK - Pre link event option
|
||||
# POST_BUILD - Post build event option
|
||||
# TARGET - Target
|
||||
# OUTPUT - List of output files
|
||||
# DEPENDS - List of files on which the command depends
|
||||
# COMMANDS - List of commands(COMMAND condition1 commannd1 args1 COMMAND
|
||||
# condition2 commannd2 args2 ...)
|
||||
# Output:
|
||||
# OUTPUT - Output files
|
||||
# DEPENDS - Files on which the command depends
|
||||
# COMMENT - Comment
|
||||
# PRE_BUILD - TRUE/FALSE
|
||||
# PRE_LINK - TRUE/FALSE
|
||||
# POST_BUILD - TRUE/FALSE
|
||||
# TARGET - Target name
|
||||
# COMMANDS - Prepared commands(every token is wrapped in CONDITION)
|
||||
# NAME - Unique name for custom target
|
||||
# STEP - PRE_BUILD/PRE_LINK/POST_BUILD
|
||||
################################################################################
|
||||
function(add_custom_command_if_parse_arguments)
|
||||
cmake_parse_arguments("ARG" "PRE_BUILD;PRE_LINK;POST_BUILD" "TARGET;COMMENT" "DEPENDS;OUTPUT;COMMANDS" ${ARGN})
|
||||
|
||||
if(WIN32)
|
||||
set(DUMMY "cd.")
|
||||
elseif(UNIX)
|
||||
set(DUMMY "true")
|
||||
endif()
|
||||
|
||||
prepare_commands()
|
||||
prepare_output()
|
||||
|
||||
set(DEPENDS "${ARG_DEPENDS}")
|
||||
set(COMMENT "${ARG_COMMENT}")
|
||||
set(PRE_BUILD "${ARG_PRE_BUILD}")
|
||||
set(PRE_LINK "${ARG_PRE_LINK}")
|
||||
set(POST_BUILD "${ARG_POST_BUILD}")
|
||||
set(TARGET "${ARG_TARGET}")
|
||||
if(PRE_BUILD)
|
||||
set(STEP "PRE_BUILD")
|
||||
elseif(PRE_LINK)
|
||||
set(STEP "PRE_LINK")
|
||||
elseif(POST_BUILD)
|
||||
set(STEP "POST_BUILD")
|
||||
endif()
|
||||
set(NAME "${TARGET}_${STEP}")
|
||||
|
||||
set(OUTPUT "${OUTPUT}" PARENT_SCOPE)
|
||||
set(DEPENDS "${DEPENDS}" PARENT_SCOPE)
|
||||
set(COMMENT "${COMMENT}" PARENT_SCOPE)
|
||||
set(PRE_BUILD "${PRE_BUILD}" PARENT_SCOPE)
|
||||
set(PRE_LINK "${PRE_LINK}" PARENT_SCOPE)
|
||||
set(POST_BUILD "${POST_BUILD}" PARENT_SCOPE)
|
||||
set(TARGET "${TARGET}" PARENT_SCOPE)
|
||||
set(COMMANDS "${COMMANDS}" PARENT_SCOPE)
|
||||
set(STEP "${STEP}" PARENT_SCOPE)
|
||||
set(NAME "${NAME}" PARENT_SCOPE)
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Add conditional custom command
|
||||
#
|
||||
# Generating Files
|
||||
# The first signature is for adding a custom command to produce an output:
|
||||
# add_custom_command_if(
|
||||
# <OUTPUT output1 [output2 ...]>
|
||||
# <COMMANDS>
|
||||
# <COMMAND condition command1 [args1...]>
|
||||
# [COMMAND condition command2 [args2...]]
|
||||
# [DEPENDS [depends...]]
|
||||
# [COMMENT comment]
|
||||
#
|
||||
# Build Events
|
||||
# add_custom_command_if(
|
||||
# <TARGET target>
|
||||
# <PRE_BUILD | PRE_LINK | POST_BUILD>
|
||||
# <COMMAND condition command1 [args1...]>
|
||||
# [COMMAND condition command2 [args2...]]
|
||||
# [COMMENT comment]
|
||||
#
|
||||
# Input:
|
||||
# output - Output files the command is expected to produce
|
||||
# condition - Generator expression for wrapping the command
|
||||
# command - Command-line(s) to execute at build time.
|
||||
# args - Command`s args
|
||||
# depends - Files on which the command depends
|
||||
# comment - Display the given message before the commands are executed at
|
||||
# build time.
|
||||
# PRE_BUILD - Run before any other rules are executed within the target
|
||||
# PRE_LINK - Run after sources have been compiled but before linking the
|
||||
# binary
|
||||
# POST_BUILD - Run after all other rules within the target have been
|
||||
# executed
|
||||
################################################################################
|
||||
function(add_custom_command_if)
|
||||
add_custom_command_if_parse_arguments(${ARGN})
|
||||
|
||||
if(OUTPUT AND TARGET)
|
||||
message(FATAL_ERROR "Wrong syntax. A TARGET and OUTPUT can not both be specified.")
|
||||
endif()
|
||||
|
||||
if(OUTPUT)
|
||||
add_custom_command(OUTPUT ${OUTPUT}
|
||||
${COMMANDS}
|
||||
DEPENDS ${DEPENDS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT ${COMMENT})
|
||||
elseif(TARGET)
|
||||
if(PRE_BUILD AND NOT ${CMAKE_GENERATOR} MATCHES "Visual Studio")
|
||||
add_custom_target(
|
||||
${NAME}
|
||||
${COMMANDS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT ${COMMENT})
|
||||
add_dependencies(${TARGET} ${NAME})
|
||||
else()
|
||||
add_custom_command(
|
||||
TARGET ${TARGET}
|
||||
${STEP}
|
||||
${COMMANDS}
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
COMMENT ${COMMENT})
|
||||
endif()
|
||||
else()
|
||||
message(FATAL_ERROR "Wrong syntax. A TARGET or OUTPUT must be specified.")
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Use props file for a target and configs
|
||||
# use_props(<target> <configs...> <props_file>)
|
||||
# Inside <props_file> there are following variables:
|
||||
# PROPS_TARGET - <target>
|
||||
# PROPS_CONFIG - One of <configs...>
|
||||
# PROPS_CONFIG_U - Uppercase PROPS_CONFIG
|
||||
# Input:
|
||||
# target - Target to apply props file
|
||||
# configs - Build configurations to apply props file
|
||||
# props_file - CMake script
|
||||
################################################################################
|
||||
macro(use_props TARGET CONFIGS PROPS_FILE)
|
||||
set(PROPS_TARGET "${TARGET}")
|
||||
foreach(PROPS_CONFIG ${CONFIGS})
|
||||
string(TOUPPER "${PROPS_CONFIG}" PROPS_CONFIG_U)
|
||||
|
||||
get_filename_component(ABSOLUTE_PROPS_FILE "${PROPS_FILE}" ABSOLUTE BASE_DIR "${CMAKE_CURRENT_LIST_DIR}")
|
||||
if(EXISTS "${ABSOLUTE_PROPS_FILE}")
|
||||
include("${ABSOLUTE_PROPS_FILE}")
|
||||
else()
|
||||
message(WARNING "Corresponding cmake file from props \"${ABSOLUTE_PROPS_FILE}\" doesn't exist")
|
||||
endif()
|
||||
endforeach()
|
||||
endmacro()
|
||||
|
||||
################################################################################
|
||||
# Add compile options to source file
|
||||
# source_file_compile_options(<source_file> [compile_options...])
|
||||
# Input:
|
||||
# source_file - Source file
|
||||
# compile_options - Options to add to COMPILE_FLAGS property
|
||||
################################################################################
|
||||
function(source_file_compile_options SOURCE_FILE)
|
||||
if("${ARGC}" LESS_EQUAL "1")
|
||||
return()
|
||||
endif()
|
||||
|
||||
get_source_file_property(COMPILE_OPTIONS "${SOURCE_FILE}" COMPILE_OPTIONS)
|
||||
|
||||
if(COMPILE_OPTIONS)
|
||||
list(APPEND COMPILE_OPTIONS ${ARGN})
|
||||
else()
|
||||
set(COMPILE_OPTIONS "${ARGN}")
|
||||
endif()
|
||||
|
||||
set_source_files_properties("${SOURCE_FILE}" PROPERTIES COMPILE_OPTIONS "${COMPILE_OPTIONS}")
|
||||
endfunction()
|
||||
|
||||
################################################################################
|
||||
# Default properties of visual studio projects
|
||||
################################################################################
|
||||
set(DEFAULT_CXX_PROPS "${CMAKE_CURRENT_LIST_DIR}/DefaultCXX.cmake")
|
||||
775
soh/CMakeLists.txt
Normal file
775
soh/CMakeLists.txt
Normal file
@@ -0,0 +1,775 @@
|
||||
cmake_minimum_required(VERSION 3.26.0 FATAL_ERROR)
|
||||
|
||||
set(CMAKE_SYSTEM_VERSION 10.0 CACHE STRING "" FORCE)
|
||||
|
||||
project(soh LANGUAGES C CXX)
|
||||
set(CMAKE_CXX_STANDARD 20 CACHE STRING "The C++ standard to use")
|
||||
set(CMAKE_C_STANDARD 23 CACHE STRING "The C standard to use")
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
enable_language(OBJCXX)
|
||||
set(CMAKE_OBJC_FLAGS "${CMAKE_OBJC_FLAGS} -fobjc-arc")
|
||||
set(CMAKE_OBJCXX_FLAGS "${CMAKE_OBJCXX_FLAGS} -fobjc-arc")
|
||||
endif()
|
||||
|
||||
set (BUILD_UTILS OFF CACHE STRING "no utilities")
|
||||
set (BUILD_SHARED_LIBS OFF CACHE STRING "install/link shared instead of static libs")
|
||||
|
||||
################################################################################
|
||||
# Set target arch type if empty. Visual studio solution generator provides it.
|
||||
################################################################################
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
if(NOT CMAKE_VS_PLATFORM_NAME)
|
||||
set(CMAKE_VS_PLATFORM_NAME "x64")
|
||||
endif()
|
||||
message("${CMAKE_VS_PLATFORM_NAME} architecture in use")
|
||||
|
||||
if(NOT ("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64"
|
||||
OR "${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32"))
|
||||
message(FATAL_ERROR "${CMAKE_VS_PLATFORM_NAME} arch is not supported!")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Global configuration types
|
||||
################################################################################
|
||||
set(CMAKE_CONFIGURATION_TYPES
|
||||
"Debug"
|
||||
"Release"
|
||||
CACHE STRING "" FORCE
|
||||
)
|
||||
|
||||
################################################################################
|
||||
# Global compiler options
|
||||
################################################################################
|
||||
if(MSVC)
|
||||
# remove default flags provided with CMake for MSVC
|
||||
set(CMAKE_C_FLAGS "")
|
||||
set(CMAKE_C_FLAGS_DEBUG "")
|
||||
set(CMAKE_C_FLAGS_RELEASE "")
|
||||
set(CMAKE_CXX_FLAGS "")
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "")
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "")
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Global linker options
|
||||
################################################################################
|
||||
if(MSVC)
|
||||
# remove default flags provided with CMake for MSVC
|
||||
set(CMAKE_EXE_LINKER_FLAGS "")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "")
|
||||
set(CMAKE_STATIC_LINKER_FLAGS "")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS}")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_DEBUG "${CMAKE_MODULE_LINKER_FLAGS}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_DEBUG "${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
set(CMAKE_STATIC_LINKER_FLAGS_DEBUG "${CMAKE_STATIC_LINKER_FLAGS}")
|
||||
set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS}")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS_RELEASE "${CMAKE_MODULE_LINKER_FLAGS}")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE "${CMAKE_SHARED_LINKER_FLAGS}")
|
||||
set(CMAKE_STATIC_LINKER_FLAGS_RELEASE "${CMAKE_STATIC_LINKER_FLAGS}")
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Common utils
|
||||
################################################################################
|
||||
include(CMake/Utils.cmake)
|
||||
|
||||
################################################################################
|
||||
# Additional Global Settings(add specific info there)
|
||||
################################################################################
|
||||
include(CMake/GlobalSettingsInclude.cmake OPTIONAL)
|
||||
|
||||
################################################################################
|
||||
# Use solution folders feature
|
||||
################################################################################
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
################################################################################
|
||||
# Sub-projects
|
||||
################################################################################
|
||||
if (NOT TARGET libultraship)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../libultraship ${CMAKE_BINARY_DIR}/libultraship)
|
||||
endif()
|
||||
|
||||
if (NOT TARGET ZAPDLib)
|
||||
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPD ${CMAKE_BINARY_DIR}/ZAPD)
|
||||
endif()
|
||||
|
||||
set(PROJECT_NAME soh)
|
||||
|
||||
################################################################################
|
||||
# Sources
|
||||
################################################################################
|
||||
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/src/boot/build.c.in ${CMAKE_CURRENT_SOURCE_DIR}/src/boot/build.c @ONLY)
|
||||
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/properties.h.in ${CMAKE_CURRENT_SOURCE_DIR}/properties.h @ONLY)
|
||||
|
||||
set(Header_Files "resource.h")
|
||||
source_group("headers" FILES ${Header_Files})
|
||||
|
||||
# include {{{
|
||||
file(GLOB Header_Files__include "include/*.h" "include/*.inc")
|
||||
list(APPEND Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/libc/stdarg.h)
|
||||
list(REMOVE_ITEM Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/bgm.h)
|
||||
list(REMOVE_ITEM Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/math_n64.h)
|
||||
list(REMOVE_ITEM Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/stdbool_n64.h)
|
||||
list(REMOVE_ITEM Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/stddef_n64.h)
|
||||
list(REMOVE_ITEM Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/stdlib_n64.h)
|
||||
list(REMOVE_ITEM Header_Files__include ${CMAKE_CURRENT_SOURCE_DIR}/include/ultra64.h)
|
||||
source_group("include" FILES ${Header_Files__include})
|
||||
# }}}
|
||||
|
||||
# soh (root)
|
||||
file(GLOB_RECURSE soh__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "soh/*.c" "soh/*.cpp" "soh/*.h" "soh/*.hpp")
|
||||
|
||||
# Add specific files that don't match the pattern
|
||||
list(APPEND soh__ ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/savestates_extern.inc)
|
||||
list(APPEND soh__ ${CMAKE_CURRENT_SOURCE_DIR}/soh/Enhancements/speechsynthesizer/DarwinSpeechSynthesizer.mm)
|
||||
|
||||
# Create source groups that match the real file directory paths
|
||||
foreach(source IN LISTS soh__)
|
||||
get_filename_component(source_path "${source}" PATH)
|
||||
string(REPLACE "/" "\\" source_path_adjusted "${source_path}")
|
||||
source_group("${source_path_adjusted}" FILES "${source}")
|
||||
endforeach()
|
||||
|
||||
# Fix UTF-8 issues for MSVC
|
||||
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
|
||||
set_source_files_properties(soh/OTRGlobals.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||
set_source_files_properties(soh/Enhancements/tts/tts.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||
set_source_files_properties(soh/Enhancements/custom-message/CustomMessageManager.cpp PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||
set_source_files_properties(soh/Enhancements/custom-message/CustomMessageManager.h PROPERTIES COMPILE_FLAGS "/utf-8")
|
||||
endif()
|
||||
|
||||
# handle Network removals
|
||||
if (!BUILD_REMOTE_CONTROL)
|
||||
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/crowd-control/")
|
||||
endif()
|
||||
|
||||
# handle speechsynthesizer removals
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/Darwin")
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/SAPI")
|
||||
else()
|
||||
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/(Darwin|SAPI)")
|
||||
endif()
|
||||
|
||||
find_library(ESPEAK espeak-ng)
|
||||
if (NOT ESPEAK)
|
||||
list(FILTER soh__ EXCLUDE REGEX "soh/Enhancements/speechsynthesizer/ESpeak")
|
||||
endif()
|
||||
|
||||
# soh/Extractor {{{
|
||||
list(FILTER ship__ EXCLUDE REGEX "soh/Extractor/*")
|
||||
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
||||
file(GLOB_RECURSE soh__Extractor RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
"soh/Extractor/*.c"
|
||||
"soh/Extractor/*.cpp"
|
||||
"soh/Extractor/*.h"
|
||||
"soh/Extractor/*.hpp"
|
||||
)
|
||||
else()
|
||||
file(GLOB_RECURSE soh__Extractor RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||
"soh/Extractor/*.h"
|
||||
"soh/Extractor/*.hpp"
|
||||
)
|
||||
endif()
|
||||
# }}}
|
||||
|
||||
# src (decomp) {{{
|
||||
file(GLOB_RECURSE src__ RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} "src/*.c" "src/*.h")
|
||||
set_source_files_properties(${src__} PROPERTIES COMPILE_OPTIONS "${WARNING_OVERRIDE}")
|
||||
|
||||
list(APPEND src__ ${CMAKE_CURRENT_SOURCE_DIR}/Resource.rc)
|
||||
list(FILTER src__ EXCLUDE REGEX "src/dmadata/")
|
||||
list(FILTER src__ EXCLUDE REGEX "src/elf_message/")
|
||||
list(FILTER src__ EXCLUDE REGEX "src/libultra/io/")
|
||||
list(FILTER src__ EXCLUDE REGEX "src/libultra/libc/")
|
||||
list(FILTER src__ EXCLUDE REGEX "src/libultra/os/")
|
||||
list(FILTER src__ EXCLUDE REGEX "src/libultra/rmon/")
|
||||
list(APPEND src__ "src/libultra/libc/sprintf.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/cosf.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/lookat.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/lookathil.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/perspective.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/position.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/sinf.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/sinf.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/sqrtf.c")
|
||||
list(REMOVE_ITEM src__ "src/libultra/gu/us2dex.c")
|
||||
|
||||
source_group("src" REGULAR_EXPRESSION "src/*")
|
||||
source_group("src\\boot" REGULAR_EXPRESSION "src/boot/*")
|
||||
source_group("src\\buffers" REGULAR_EXPRESSION "src/buffers/*")
|
||||
source_group("src\\code" REGULAR_EXPRESSION "src/code/*")
|
||||
source_group("src\\libultra" REGULAR_EXPRESSION "src/libultra/*")
|
||||
source_group("src\\overlays\\actors" REGULAR_EXPRESSION "src/overlays/actors/*")
|
||||
source_group("src\\overlays\\effects" REGULAR_EXPRESSION "src/overlays/effects/*")
|
||||
source_group("src\\overlays\\gamestates" REGULAR_EXPRESSION "src/overlays/gamestates/*")
|
||||
source_group("src\\overlays\\misc" REGULAR_EXPRESSION "src/overlays/misc/*")
|
||||
# }}}
|
||||
|
||||
set(ALL_FILES
|
||||
${Header_Files}
|
||||
${Header_Files__include}
|
||||
${soh__}
|
||||
${soh__Extractor}
|
||||
${src__}
|
||||
)
|
||||
|
||||
################################################################################
|
||||
# Target
|
||||
################################################################################
|
||||
add_executable(${PROJECT_NAME} ${ALL_FILES})
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
use_props(${PROJECT_NAME} "${CMAKE_CONFIGURATION_TYPES}" "${DEFAULT_CXX_PROPS}")
|
||||
endif()
|
||||
|
||||
set(ROOT_NAMESPACE soh)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
VS_GLOBAL_KEYWORD "Win32Proj"
|
||||
)
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
|
||||
)
|
||||
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
INTERPROCEDURAL_OPTIMIZATION_RELEASE "TRUE"
|
||||
)
|
||||
endif()
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
XCODE_ATTRIBUTE_CLANG_ENABLE_OBJC_ARC YES
|
||||
OUTPUT_NAME "soh-macos"
|
||||
)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES
|
||||
OUTPUT_NAME "soh.elf"
|
||||
)
|
||||
endif()
|
||||
################################################################################
|
||||
# MSVC runtime library
|
||||
################################################################################
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
get_property(MSVC_RUNTIME_LIBRARY_DEFAULT TARGET ${PROJECT_NAME} PROPERTY MSVC_RUNTIME_LIBRARY)
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
|
||||
$<$<CONFIG:Debug>:
|
||||
MultiThreadedDebug
|
||||
>
|
||||
$<$<CONFIG:Release>:
|
||||
MultiThreaded
|
||||
>
|
||||
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
|
||||
)
|
||||
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
|
||||
string(CONCAT "MSVC_RUNTIME_LIBRARY_STR"
|
||||
$<$<CONFIG:Debug>:
|
||||
MultiThreadedDebug
|
||||
>
|
||||
$<$<CONFIG:Release>:
|
||||
MultiThreaded
|
||||
>
|
||||
$<$<NOT:$<OR:$<CONFIG:Debug>,$<CONFIG:Release>>>:${MSVC_RUNTIME_LIBRARY_DEFAULT}>
|
||||
)
|
||||
endif()
|
||||
set_target_properties(${PROJECT_NAME} PROPERTIES MSVC_RUNTIME_LIBRARY ${MSVC_RUNTIME_LIBRARY_STR})
|
||||
endif()
|
||||
################################################################################
|
||||
# Find/download Dr Libs (For custom audio)
|
||||
################################################################################
|
||||
include(FetchContent)
|
||||
|
||||
FetchContent_Declare(
|
||||
dr_libs
|
||||
GIT_REPOSITORY https://github.com/mackron/dr_libs.git
|
||||
GIT_TAG da35f9d6c7374a95353fd1df1d394d44ab66cf01
|
||||
)
|
||||
FetchContent_MakeAvailable(dr_libs)
|
||||
|
||||
find_package(SDL2)
|
||||
set(SDL2-INCLUDE ${SDL2_INCLUDE_DIRS})
|
||||
|
||||
if (BUILD_REMOTE_CONTROL)
|
||||
find_package(SDL2_net)
|
||||
|
||||
if(NOT SDL2_net_FOUND)
|
||||
message(STATUS "SDL2_net not found (it's possible the version installed is too old). Disabling BUILD_REMOTE_CONTROL.")
|
||||
set(BUILD_REMOTE_CONTROL 0)
|
||||
else()
|
||||
set(SDL2-NET-INCLUDE ${SDL_NET_INCLUDE_DIRS})
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (ESPEAK)
|
||||
add_compile_definitions(ESPEAK=1)
|
||||
endif()
|
||||
|
||||
################################################################################
|
||||
# Compile definitions
|
||||
################################################################################
|
||||
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE assets
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/include/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/src/
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../libultraship/include
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/../ZAPDTR/ZAPD/resource/type
|
||||
${SDL2-INCLUDE}
|
||||
${SDL2-NET-INCLUDE}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/assets/
|
||||
${dr_libs_SOURCE_DIR}
|
||||
.
|
||||
)
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
"$<$<CONFIG:Debug>:"
|
||||
"_DEBUG;"
|
||||
"_CRT_SECURE_NO_WARNINGS;"
|
||||
"ENABLE_DX11;"
|
||||
">"
|
||||
"$<$<CONFIG:Release>:"
|
||||
"NDEBUG;"
|
||||
">"
|
||||
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:ENABLE_REMOTE_CONTROL>"
|
||||
"INCLUDE_GAME_PRINTF;"
|
||||
"F3DEX_GBI_2"
|
||||
"UNICODE;"
|
||||
"_UNICODE"
|
||||
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
|
||||
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
|
||||
STORMLIB_NO_AUTO_LINK
|
||||
"_CRT_SECURE_NO_WARNINGS;"
|
||||
NOMINMAX
|
||||
)
|
||||
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
"$<$<CONFIG:Debug>:"
|
||||
"NOINCLUDE_GAME_PRINTF;"
|
||||
"_DEBUG;"
|
||||
"_CRT_SECURE_NO_WARNINGS;"
|
||||
"ENABLE_OPENGL;"
|
||||
">"
|
||||
"$<$<CONFIG:Release>:"
|
||||
"NDEBUG;"
|
||||
">"
|
||||
"INCLUDE_GAME_PRINTF;"
|
||||
"F3DEX_GBI_2"
|
||||
"WIN32;"
|
||||
"UNICODE;"
|
||||
"_UNICODE;"
|
||||
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
|
||||
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
|
||||
STORMLIB_NO_AUTO_LINK
|
||||
NOMINMAX
|
||||
)
|
||||
endif()
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
"$<$<CONFIG:Debug>:"
|
||||
"_DEBUG;"
|
||||
">"
|
||||
"$<$<CONFIG:Release>:"
|
||||
"NDEBUG;"
|
||||
">"
|
||||
"F3DEX_GBI_2;"
|
||||
"SPDLOG_NO_THREAD_ID;"
|
||||
"SPDLOG_NO_TLS;"
|
||||
"STBI_NO_THREAD_LOCALS;"
|
||||
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
|
||||
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
|
||||
)
|
||||
elseif ("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU|Clang|AppleClang")
|
||||
target_compile_definitions(${PROJECT_NAME} PRIVATE
|
||||
"$<$<CONFIG:Debug>:"
|
||||
"_DEBUG;"
|
||||
">"
|
||||
"$<$<CONFIG:Release>:"
|
||||
"NDEBUG;"
|
||||
">"
|
||||
"F3DEX_GBI_2;"
|
||||
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:ENABLE_REMOTE_CONTROL>;"
|
||||
"_CONSOLE;"
|
||||
"_CRT_SECURE_NO_WARNINGS;"
|
||||
"ENABLE_OPENGL;"
|
||||
"UNICODE;"
|
||||
"_UNICODE;"
|
||||
SPDLOG_ACTIVE_LEVEL=${SPDLOG_MIN_CUTOFF}
|
||||
LOG_LEVEL_GAME_PRINTS=${SPDLOG_LEVEL_OFF}
|
||||
)
|
||||
endif()
|
||||
################################################################################
|
||||
# Compile and link options
|
||||
################################################################################
|
||||
if(MSVC)
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CONFIG:Debug>:
|
||||
/w;
|
||||
/Od
|
||||
>
|
||||
$<$<CONFIG:Release>:
|
||||
/Oi;
|
||||
/Gy;
|
||||
/W3
|
||||
>
|
||||
/bigobj;
|
||||
/sdl-;
|
||||
/permissive-;
|
||||
/MP;
|
||||
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
|
||||
${DEFAULT_CXX_EXCEPTION_HANDLING}
|
||||
)
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE $<$<CONFIG:Debug>:/ZI;>)
|
||||
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CONFIG:Debug>:
|
||||
/RTCs
|
||||
>
|
||||
$<$<CONFIG:Release>:
|
||||
/O2;
|
||||
/Oi;
|
||||
/Gy
|
||||
>
|
||||
/permissive-;
|
||||
/MP;
|
||||
/sdl-;
|
||||
/w;
|
||||
${DEFAULT_CXX_DEBUG_INFORMATION_FORMAT};
|
||||
${DEFAULT_CXX_EXCEPTION_HANDLING}
|
||||
)
|
||||
endif()
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CONFIG:Debug>:
|
||||
/INCREMENTAL
|
||||
>
|
||||
$<$<CONFIG:Release>:
|
||||
/OPT:REF;
|
||||
/OPT:ICF;
|
||||
/INCREMENTAL:NO;
|
||||
/FORCE:MULTIPLE
|
||||
>
|
||||
/MANIFEST:NO;
|
||||
/DEBUG;
|
||||
/SUBSYSTEM:WINDOWS
|
||||
)
|
||||
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
$<$<CONFIG:Debug>:
|
||||
/STACK:8777216
|
||||
>
|
||||
$<$<CONFIG:Release>:
|
||||
/OPT:REF;
|
||||
/OPT:ICF;
|
||||
/INCREMENTAL:NO;
|
||||
/FORCE:MULTIPLE
|
||||
>
|
||||
/MANIFEST:NO;
|
||||
/DEBUG;
|
||||
/SUBSYSTEM:WINDOWS
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|AppleClang")
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
-Wall -Wextra -Wno-error
|
||||
-Wformat-security
|
||||
-Wno-return-type
|
||||
-Wno-unused-parameter
|
||||
-Wno-unused-function
|
||||
-Wno-unused-variable
|
||||
-Wno-missing-field-initializers
|
||||
-Wno-parentheses
|
||||
-Wno-narrowing
|
||||
-Wno-missing-braces
|
||||
$<$<COMPILE_LANGUAGE:C>:
|
||||
-Werror-implicit-function-declaration
|
||||
-Wno-incompatible-pointer-types
|
||||
-Wno-int-conversion
|
||||
>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fpermissive>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:
|
||||
-Wno-c++11-narrowing
|
||||
-Wno-deprecated-enum-enum-conversion
|
||||
>
|
||||
-pthread
|
||||
)
|
||||
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
-pthread
|
||||
)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
-Wall -Wextra -Wno-error
|
||||
-Wformat-security
|
||||
-Wno-return-type
|
||||
-Wno-unused-parameter
|
||||
-Wno-unused-function
|
||||
-Wno-unused-variable
|
||||
-Wno-missing-field-initializers
|
||||
-Wno-parentheses
|
||||
-Wno-narrowing
|
||||
-Wno-missing-braces
|
||||
$<$<COMPILE_LANGUAGE:C>:
|
||||
-Werror-implicit-function-declaration
|
||||
-Wno-incompatible-pointer-types
|
||||
>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fpermissive>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:
|
||||
-Wno-c++11-narrowing
|
||||
-Wno-deprecated-enum-enum-conversion
|
||||
>
|
||||
-pthread
|
||||
)
|
||||
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
-pthread
|
||||
)
|
||||
elseif (CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
-O2
|
||||
|
||||
# disable some warnings to not clutter output
|
||||
-Wno-multichar
|
||||
-Wno-return-type
|
||||
-Wno-narrowing
|
||||
-Wno-switch-outside-range
|
||||
$<$<COMPILE_LANGUAGE:C>:
|
||||
-Werror-implicit-function-declaration
|
||||
-Wno-incompatible-pointer-types
|
||||
-Wno-discarded-array-qualifiers
|
||||
-Wno-discarded-qualifiers
|
||||
-Wno-int-conversion
|
||||
-Wno-builtin-declaration-mismatch
|
||||
-Wno-switch-unreachable
|
||||
-Wno-stringop-overflow
|
||||
>
|
||||
)
|
||||
else()
|
||||
if(CMAKE_SYSTEM_PROCESSOR MATCHES "x86_64")
|
||||
set(CPU_OPTION -msse2 -mfpmath=sse)
|
||||
endif()
|
||||
|
||||
target_compile_options(${PROJECT_NAME} PRIVATE
|
||||
-Wall -Wextra -Wno-error
|
||||
-Wformat-security
|
||||
-Wno-unused-parameter
|
||||
-Wno-unused-function
|
||||
-Wno-unused-variable
|
||||
-Wno-missing-field-initializers
|
||||
-Wno-parentheses
|
||||
-Wno-narrowing
|
||||
-Wno-missing-braces
|
||||
$<$<COMPILE_LANGUAGE:C>:
|
||||
-Werror-implicit-function-declaration
|
||||
-Wno-implicit-int
|
||||
-Wno-incompatible-pointer-types
|
||||
-Wno-int-conversion
|
||||
>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-fpermissive>
|
||||
$<$<COMPILE_LANGUAGE:CXX>:-Wno-deprecated-enum-enum-conversion>
|
||||
-pthread
|
||||
${CPU_OPTION}
|
||||
)
|
||||
|
||||
target_link_options(${PROJECT_NAME} PRIVATE
|
||||
-pthread
|
||||
#-fsanitize=address
|
||||
-Wl,-export-dynamic
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
################################################################################
|
||||
# Pre build events
|
||||
################################################################################
|
||||
if (CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||
add_custom_command(
|
||||
TARGET ${PROJECT_NAME}
|
||||
POST_BUILD
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor ${CMAKE_BINARY_DIR}/soh/assets
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml ${CMAKE_BINARY_DIR}/soh/assets/xml
|
||||
)
|
||||
endif()
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
||||
add_custom_command(
|
||||
TARGET ${PROJECT_NAME}
|
||||
POST_BUILD
|
||||
COMMENT "Copying asset xmls..."
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/extractor $<TARGET_FILE_DIR:soh>/assets
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory_if_different ${CMAKE_SOURCE_DIR}/soh/assets/xml $<TARGET_FILE_DIR:soh>/assets/xml
|
||||
COMMAND ${CMAKE_COMMAND} -E make_directory $<TARGET_FILE_DIR:soh>/assets/symbols
|
||||
# COMMAND ${VS_COPY_ASSETS_CMD}
|
||||
)
|
||||
endif()
|
||||
################################################################################
|
||||
# Dependencies
|
||||
################################################################################
|
||||
add_dependencies(${PROJECT_NAME}
|
||||
libultraship
|
||||
)
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
||||
add_dependencies(${PROJECT_NAME}
|
||||
ZAPDLib
|
||||
)
|
||||
endif()
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
find_package(glfw3 REQUIRED)
|
||||
find_package(Ogg CONFIG REQUIRED)
|
||||
link_libraries(Ogg::ogg)
|
||||
|
||||
find_package(Vorbis CONFIG REQUIRED)
|
||||
link_libraries(Vorbis::vorbisfile)
|
||||
find_package(Opus CONFIG REQUIRED)
|
||||
link_libraries(Opus::opus)
|
||||
find_package(OpusFile CONFIG REQUIRED)
|
||||
link_libraries(OpusFile::opusfile CONFIG REQUIRED)
|
||||
if("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "x64")
|
||||
set(ADDITIONAL_LIBRARY_DEPENDENCIES
|
||||
"libultraship;"
|
||||
"ZAPDLib;"
|
||||
"glu32;"
|
||||
"SDL2::SDL2;"
|
||||
"SDL2::SDL2main;"
|
||||
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:SDL2_net::SDL2_net-static>"
|
||||
"glfw;"
|
||||
"winmm;"
|
||||
"imm32;"
|
||||
"version;"
|
||||
"setupapi"
|
||||
"Ogg::ogg"
|
||||
"Opus::opus"
|
||||
"Vorbis::vorbis"
|
||||
"Vorbis::vorbisenc"
|
||||
"Vorbis::vorbisfile"
|
||||
"OpusFile::opusfile"
|
||||
)
|
||||
elseif("${CMAKE_VS_PLATFORM_NAME}" STREQUAL "Win32")
|
||||
set(ADDITIONAL_LIBRARY_DEPENDENCIES
|
||||
"libultraship;"
|
||||
"ZAPDLib;"
|
||||
"glu32;"
|
||||
"SDL2::SDL2;"
|
||||
"SDL2::SDL2main;"
|
||||
"glfw;"
|
||||
"winmm;"
|
||||
"imm32;"
|
||||
"version;"
|
||||
"setupapi"
|
||||
)
|
||||
endif()
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "NintendoSwitch")
|
||||
find_package(SDL2)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
set(ADDITIONAL_LIBRARY_DEPENDENCIES
|
||||
"libultraship;"
|
||||
SDL2::SDL2
|
||||
-lglad
|
||||
Threads::Threads
|
||||
)
|
||||
elseif(CMAKE_SYSTEM_NAME STREQUAL "CafeOS")
|
||||
find_package(SDL2 REQUIRED)
|
||||
set(ADDITIONAL_LIBRARY_DEPENDENCIES
|
||||
"libultraship;"
|
||||
SDL2::SDL2-static
|
||||
|
||||
"$<$<CONFIG:Debug>:-Wl,--wrap=abort>"
|
||||
)
|
||||
target_include_directories(${PROJECT_NAME} PRIVATE
|
||||
${DEVKITPRO}/portlibs/wiiu/include/
|
||||
)
|
||||
else()
|
||||
find_package(SDL2)
|
||||
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||
find_package(Threads REQUIRED)
|
||||
find_package(Ogg REQUIRED)
|
||||
find_package(Vorbis REQUIRED)
|
||||
find_package(Opus REQUIRED)
|
||||
find_package(OpusFile REQUIRED)
|
||||
set(ADDITIONAL_LIBRARY_DEPENDENCIES
|
||||
"libultraship;"
|
||||
"ZAPDLib;"
|
||||
SDL2::SDL2
|
||||
"Ogg::ogg"
|
||||
"Vorbis::vorbis"
|
||||
"Vorbis::vorbisenc"
|
||||
"Vorbis::vorbisfile"
|
||||
"Opus::opus"
|
||||
"Opusfile::Opusfile"
|
||||
"$<$<BOOL:${BUILD_REMOTE_CONTROL}>:SDL2_net::SDL2_net>"
|
||||
${CMAKE_DL_LIBS}
|
||||
Threads::Threads
|
||||
)
|
||||
endif()
|
||||
|
||||
if(NOT CMAKE_SYSTEM_NAME MATCHES "Darwin|NintendoSwitch|CafeOS")
|
||||
INSTALL(TARGETS soh DESTINATION . COMPONENT ship)
|
||||
endif()
|
||||
|
||||
if (CMAKE_SYSTEM_NAME STREQUAL "Windows")
|
||||
INSTALL(FILES $<TARGET_PDB_FILE:soh> DESTINATION ./debug COMPONENT ship)
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.o2r DESTINATION . COMPONENT ship)
|
||||
endif()
|
||||
|
||||
find_program(CURL NAMES curl DOC "Path to the curl program. Used to download files.")
|
||||
execute_process(COMMAND ${CURL} -sSfL https://raw.githubusercontent.com/mdqinc/SDL_GameControllerDB/master/gamecontrollerdb.txt -o ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt OUTPUT_VARIABLE RESULT)
|
||||
|
||||
if("${CMAKE_SYSTEM_NAME}" STREQUAL "Darwin")
|
||||
configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/macosx/Info.plist.in ${CMAKE_BINARY_DIR}/macosx/Info.plist @ONLY)
|
||||
INSTALL(TARGETS soh DESTINATION ../MacOS COMPONENT ship)
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION ../MacOS COMPONENT ship)
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/soh/soh.o2r DESTINATION ../Resources COMPONENT ship)
|
||||
elseif(NOT "${CMAKE_SYSTEM_NAME}" MATCHES "NintendoSwitch|CafeOS")
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/gamecontrollerdb.txt DESTINATION . COMPONENT ship)
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch|CafeOS")
|
||||
if (NOT TARGET pathconf)
|
||||
add_library(pathconf OBJECT platform/pathconf.c)
|
||||
endif()
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}" $<TARGET_OBJECTS:pathconf> )
|
||||
else()
|
||||
target_link_libraries(${PROJECT_NAME} PRIVATE "${ADDITIONAL_LIBRARY_DEPENDENCIES}")
|
||||
endif()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "NintendoSwitch")
|
||||
|
||||
nx_generate_nacp(Ship.nacp
|
||||
NAME "Ship of Harkinian"
|
||||
AUTHOR "${PROJECT_TEAM}"
|
||||
VERSION "${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}"
|
||||
)
|
||||
|
||||
nx_create_nro(soh
|
||||
NACP Ship.nacp
|
||||
ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.jpg
|
||||
)
|
||||
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/soh.nro DESTINATION . COMPONENT ship)
|
||||
|
||||
elseif(CMAKE_SYSTEM_NAME MATCHES "CafeOS")
|
||||
|
||||
wut_create_rpx(${PROJECT_NAME})
|
||||
|
||||
wut_create_wuhb(${PROJECT_NAME}
|
||||
NAME "Ship of Harkinian"
|
||||
SHORTNAME "SoH"
|
||||
AUTHOR "${PROJECT_TEAM}"
|
||||
ICON ${CMAKE_CURRENT_SOURCE_DIR}/icon.jpg
|
||||
)
|
||||
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/soh.rpx ${CMAKE_CURRENT_BINARY_DIR}/soh.wuhb DESTINATION . COMPONENT ship)
|
||||
|
||||
endif()
|
||||
115
soh/Resource.rc
Normal file
115
soh/Resource.rc
Normal file
@@ -0,0 +1,115 @@
|
||||
// Microsoft Visual C++ generated resource script.
|
||||
//
|
||||
#include <ship/resource/Resource.h>
|
||||
#include "properties.h"
|
||||
|
||||
#define APSTUDIO_READONLY_SYMBOLS
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 2 resource.
|
||||
//
|
||||
#include "winres.h"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#undef APSTUDIO_READONLY_SYMBOLS
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
// English (United States) resources
|
||||
|
||||
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
|
||||
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
|
||||
#pragma code_page(1252)
|
||||
|
||||
#ifdef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// TEXTINCLUDE
|
||||
//
|
||||
|
||||
1 TEXTINCLUDE
|
||||
BEGIN
|
||||
"resource.h\0"
|
||||
END
|
||||
|
||||
2 TEXTINCLUDE
|
||||
BEGIN
|
||||
"#include ""winres.h""\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
3 TEXTINCLUDE
|
||||
BEGIN
|
||||
"\r\n"
|
||||
"\0"
|
||||
END
|
||||
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Version Info
|
||||
//
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION VER_FILEVERSION
|
||||
PRODUCTVERSION VER_PRODUCTVERSION
|
||||
FILEFLAGSMASK VS_FFI_FILEFLAGSMASK
|
||||
#ifdef _DEBUG
|
||||
FILEFLAGS VS_FF_DEBUG
|
||||
#else
|
||||
FILEFLAGS 0x0L
|
||||
#endif
|
||||
FILEOS VOS_NT_WINDOWS32
|
||||
FILETYPE VFT_APP
|
||||
FILESUBTYPE VFT2_UNKNOWN
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904b0"
|
||||
BEGIN
|
||||
VALUE "CompanyName", VER_COMPANYNAME_STR
|
||||
VALUE "FileDescription", VER_FILEDESCRIPTION_STR
|
||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||
VALUE "InternalName", VER_INTERNALNAME_STR
|
||||
VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
|
||||
VALUE "ProductName", VER_PRODUCTNAME_STR
|
||||
VALUE "ProductVersion", VER_PRODUCTVERSION_str
|
||||
END
|
||||
END
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
VALUE "Translation", 0x409, 1200
|
||||
END
|
||||
END
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Icon
|
||||
//
|
||||
|
||||
// Icon with lowest ID value placed first to ensure application icon
|
||||
// remains consistent on all systems.
|
||||
IDI_ICON1 ICON "SHIPOFHARKINIAN.ico"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// RT_MANIFEST
|
||||
//
|
||||
|
||||
1 RT_MANIFEST "SHIPOFHARKINIAN.manifest"
|
||||
|
||||
#endif // English (United States) resources
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
#ifndef APSTUDIO_INVOKED
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Generated from the TEXTINCLUDE 3 resource.
|
||||
//
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////
|
||||
#endif // not APSTUDIO_INVOKED
|
||||
|
||||
BIN
soh/SHIPOFHARKINIAN.ico
Normal file
BIN
soh/SHIPOFHARKINIAN.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 127 KiB |
37
soh/SHIPOFHARKINIAN.manifest
Normal file
37
soh/SHIPOFHARKINIAN.manifest
Normal file
@@ -0,0 +1,37 @@
|
||||
<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
|
||||
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
|
||||
<dependency>
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity
|
||||
type="win32"
|
||||
name="Microsoft.Windows.Common-Controls"
|
||||
version="6.0.0.0"
|
||||
publicKeyToken="6595b64144ccf1df"
|
||||
language="*"
|
||||
processorArchitecture="*" />
|
||||
</dependentAssembly>
|
||||
</dependency>
|
||||
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
|
||||
<security>
|
||||
<requestedPrivileges>
|
||||
<requestedExecutionLevel level='asInvoker' uiAccess='false' />
|
||||
</requestedPrivileges>
|
||||
</security>
|
||||
</trustInfo>
|
||||
<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
|
||||
<application>
|
||||
<!-- Windows 8 -->
|
||||
<supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}" />
|
||||
<!-- Windows 8.1 -->
|
||||
<supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}" />
|
||||
<!-- Windows 10 -->
|
||||
<supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}" />
|
||||
</application>
|
||||
</compatibility>
|
||||
<asmv3:application xmlns:asmv3="urn:schemas-microsoft-com:asm.v3">
|
||||
<asmv3:windowsSettings>
|
||||
<dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true/pm</dpiAware> <!-- legacy -->
|
||||
<dpiAwareness xmlns="http://schemas.microsoft.com/SMI/2016/WindowsSettings">permonitorv2,permonitor</dpiAwareness> <!-- falls back to pm if pmv2 is not available -->
|
||||
</asmv3:windowsSettings>
|
||||
</asmv3:application>
|
||||
</assembly>
|
||||
8
soh/assets/.gitignore
vendored
Normal file
8
soh/assets/.gitignore
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
*.bin
|
||||
*.c
|
||||
!text/*.c
|
||||
*.cfg
|
||||
*.vtx.inc
|
||||
*.dlist.inc
|
||||
!*.png
|
||||
custom/shaders
|
||||
21
soh/assets/code/fbdemo_circle/z_fbdemo_circle.h
Normal file
21
soh/assets/code/fbdemo_circle/z_fbdemo_circle.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef CODE_Z_FBDEMO_CIRCLE_H
|
||||
#define CODE_Z_FBDEMO_CIRCLE_H 1
|
||||
|
||||
#include "align_asset_macro.h"
|
||||
|
||||
#define dsTransCircleNormalTex "__OTR__code/z_fbdemo_circle/sTransCircleNormalTex"
|
||||
static const ALIGN_ASSET(2) char sTransCircleNormalTex[] = dsTransCircleNormalTex;
|
||||
|
||||
#define dsTransCircleWaveTex "__OTR__code/z_fbdemo_circle/sTransCircleWaveTex"
|
||||
static const ALIGN_ASSET(2) char sTransCircleWaveTex[] = dsTransCircleWaveTex;
|
||||
|
||||
#define dsTransCircleRippleTex "__OTR__code/z_fbdemo_circle/sTransCircleRippleTex"
|
||||
static const ALIGN_ASSET(2) char sTransCircleRippleTex[] = dsTransCircleRippleTex;
|
||||
|
||||
#define dsTransCircleStarburstTex "__OTR__code/z_fbdemo_circle/sTransCircleStarburstTex"
|
||||
static const ALIGN_ASSET(2) char sTransCircleStarburstTex[] = dsTransCircleStarburstTex;
|
||||
|
||||
#define dsTransCircleVtx "__OTR__code/z_fbdemo_circle/sTransCircleVtx"
|
||||
static const ALIGN_ASSET(2) char sTransCircleVtx[] = dsTransCircleVtx;
|
||||
|
||||
#endif // CODE_Z_FBDEMO_CIRCLE_H
|
||||
12
soh/assets/code/fbdemo_triforce/z_fbdemo_triforce.h
Normal file
12
soh/assets/code/fbdemo_triforce/z_fbdemo_triforce.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef CODE_Z_FBDEMO_TRIFORCE_H
|
||||
#define CODE_Z_FBDEMO_TRIFORCE_H 1
|
||||
|
||||
#include "align_asset_macro.h"
|
||||
|
||||
#define dsTransTriforceDL "__OTR__code/z_fbdemo_triforce/sTransTriforceDL"
|
||||
static const ALIGN_ASSET(2) char sTransTriforceDL[] = dsTransTriforceDL;
|
||||
|
||||
#define dsTransTriforceVtx "__OTR__code/z_fbdemo_triforce/sTransTriforceVtx"
|
||||
static const ALIGN_ASSET(2) char sTransTriforceVtx[] = dsTransTriforceVtx;
|
||||
|
||||
#endif // CODE_Z_FBDEMO_TRIFORCE_H
|
||||
12
soh/assets/code/fbdemo_wipe1/z_fbdemo_wipe1.h
Normal file
12
soh/assets/code/fbdemo_wipe1/z_fbdemo_wipe1.h
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef CODE_Z_FBDEMO_WIPE1_H
|
||||
#define CODE_Z_FBDEMO_WIPE1_H 1
|
||||
|
||||
#include "align_asset_macro.h"
|
||||
|
||||
#define dsTransWipeVtx "__OTR__code/z_fbdemo_wipe1/sTransWipeVtx"
|
||||
static const ALIGN_ASSET(2) char sTransWipeVtx[] = dsTransWipeVtx;
|
||||
|
||||
#define dsTransWipeTex "__OTR__code/z_fbdemo_wipe1/sTransWipeTex"
|
||||
static const ALIGN_ASSET(2) char sTransWipeTex[] = dsTransWipeTex;
|
||||
|
||||
#endif // CODE_Z_FBDEMO_WIPE1_H
|
||||
29
soh/assets/custom/accessibility/texts/filechoose_eng.json
Normal file
29
soh/assets/custom/accessibility/texts/filechoose_eng.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"file1": "File 1",
|
||||
"file2": "File 2",
|
||||
"file3": "File 3",
|
||||
"options": "Options",
|
||||
"copy": "Copy",
|
||||
"erase": "Erase",
|
||||
"quit": "Quit",
|
||||
"confirm": "Yes",
|
||||
"end": "End",
|
||||
"hyphen": "Hyphen",
|
||||
"period": "Period",
|
||||
"space": "Space",
|
||||
"backspace": "Backspace",
|
||||
"capital_letter": "Capital $0",
|
||||
"audio_stereo": "Sound - Stereo",
|
||||
"audio_mono": "Sound - Mono",
|
||||
"audio_headset": "Sound - Headset",
|
||||
"audio_surround": "Sound - Surround",
|
||||
"target_switch": "Targeting Mode - Switch",
|
||||
"target_hold": "Targeting Mode - Hold",
|
||||
"language_english": "Language - English",
|
||||
"language_german": "Language - German",
|
||||
"language_french": "Language - French",
|
||||
"quest_sel_vanilla": "Quest - Original",
|
||||
"quest_sel_mq": "Quest - Master Quest",
|
||||
"quest_sel_randomizer": "Quest - Randomizer",
|
||||
"quest_sel_boss_rush": "Quest - Boss Rush"
|
||||
}
|
||||
29
soh/assets/custom/accessibility/texts/filechoose_fra.json
Normal file
29
soh/assets/custom/accessibility/texts/filechoose_fra.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"file1": "Fichier 1",
|
||||
"file2": "Fichier 2",
|
||||
"file3": "Fichier 3",
|
||||
"options": "Options",
|
||||
"copy": "Copier",
|
||||
"erase": "Effacer",
|
||||
"quit": "Retour",
|
||||
"confirm": "Oui",
|
||||
"end": "Fin",
|
||||
"hyphen": "Trait d'union",
|
||||
"period": "Point",
|
||||
"space": "Espace",
|
||||
"backspace": "Retour arrière",
|
||||
"capital_letter": "Majuscule $0",
|
||||
"audio_stereo": "Son - Stéréo",
|
||||
"audio_mono": "Son - Mono",
|
||||
"audio_headset": "Son - Casque",
|
||||
"audio_surround": "Son - Surround",
|
||||
"target_switch": "Visée - Fixe",
|
||||
"target_hold": "Visée - Maintenue",
|
||||
"language_english": "Langue - Anglaise",
|
||||
"language_german": "Langue - Allemande",
|
||||
"language_french": "Langue - Français",
|
||||
"quest_sel_vanilla": "Quête - Originale",
|
||||
"quest_sel_mq": "Quête - Master Quest",
|
||||
"quest_sel_randomizer": "Quête - Randomizer",
|
||||
"quest_sel_boss_rush": "Quête - Boss Rush"
|
||||
}
|
||||
29
soh/assets/custom/accessibility/texts/filechoose_ger.json
Normal file
29
soh/assets/custom/accessibility/texts/filechoose_ger.json
Normal file
@@ -0,0 +1,29 @@
|
||||
{
|
||||
"file1": "Datei 1",
|
||||
"file2": "Datei 2",
|
||||
"file3": "Datei 3",
|
||||
"options": "Optionen",
|
||||
"copy": "Kopieren",
|
||||
"erase": "Löschen",
|
||||
"quit": "Zurück",
|
||||
"confirm": "Ja",
|
||||
"end": "Ende",
|
||||
"hyphen": "Bindestrich",
|
||||
"period": "Punkt",
|
||||
"space": "Raum",
|
||||
"backspace": "Rücktaste",
|
||||
"capital_letter": "Großbuchstabe $0",
|
||||
"audio_stereo": "Sound - Stereo",
|
||||
"audio_mono": "Sound - Mono",
|
||||
"audio_headset": "Sound - Kopfhörer",
|
||||
"audio_surround": "Sound - Surround",
|
||||
"target_switch": "Zielerfassung - Einmal drücken",
|
||||
"target_hold": "Zielerfassung - Trigger halten",
|
||||
"language_english": "Sprache - Englisch",
|
||||
"language_german": "Sprache - Deutsch",
|
||||
"language_french": "Sprache - Französisch",
|
||||
"quest_sel_vanilla": "Quest - Original",
|
||||
"quest_sel_mq": "Quest - Master Quest",
|
||||
"quest_sel_randomizer": "Quest - Randomizer",
|
||||
"quest_sel_boss_rush": "Quest - Boss Rush"
|
||||
}
|
||||
234
soh/assets/custom/accessibility/texts/kaleidoscope_eng.json
Normal file
234
soh/assets/custom/accessibility/texts/kaleidoscope_eng.json
Normal file
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"health": "Health - $0 Hearts",
|
||||
"magic": "Magic - $0",
|
||||
"rupees": "Rupees - $0",
|
||||
"keys": "Keys - $0",
|
||||
"floor": "Floor $0",
|
||||
"basement": "Basement $0",
|
||||
"item_menu": "Select Item",
|
||||
"map_menu": "Map - $0",
|
||||
"quest_menu": "Quest Status",
|
||||
"equip_menu": "Equipment",
|
||||
"overworld": "Overworld",
|
||||
"equipped": "$0 - Equipped",
|
||||
"save_prompt": "Would you like to save?",
|
||||
"game_saved": "Game saved",
|
||||
"game_over": "Game Over",
|
||||
"continue_game": "Continue playing?",
|
||||
"assigned_to": "Assigned to $0",
|
||||
"0": "Deku Stick - $0",
|
||||
"1": "Deku Nut - $0",
|
||||
"2": "Bomb - $0",
|
||||
"3": "Fairy Bow - $0",
|
||||
"4": "Fire Arrow",
|
||||
"5": "Din's Fire",
|
||||
"6": "Fairy Slingshot - $0",
|
||||
"7": "Fairy Ocarina",
|
||||
"8": "Ocarina of Time",
|
||||
"9": "Bombchu - $0",
|
||||
"10": "Hookshot",
|
||||
"11": "Longshot",
|
||||
"12": "Ice Arrow",
|
||||
"13": "Farore's Wind",
|
||||
"14": "Boomerang",
|
||||
"15": "Lens of Truth",
|
||||
"16": "Magic Beans - $0",
|
||||
"17": "Megaton Hammer",
|
||||
"18": "Light Arrow",
|
||||
"19": "Nayru's Love",
|
||||
"20": "Empty Bottle",
|
||||
"21": "Red Potion",
|
||||
"22": "Green Potion",
|
||||
"23": "Blue Potion",
|
||||
"24": "Fairy",
|
||||
"25": "Fish",
|
||||
"26": "Milk Bottle",
|
||||
"27": "Ruto's Letter",
|
||||
"28": "Blue Fire",
|
||||
"29": "Bugs",
|
||||
"30": "Big Poe",
|
||||
"31": "Milk Bottle (Half)",
|
||||
"32": "Poe",
|
||||
"33": "Weird Egg",
|
||||
"34": "Chicken",
|
||||
"35": "Zelda's Letter",
|
||||
"36": "Keaton Mask",
|
||||
"37": "Skull Mask",
|
||||
"38": "Spooky Mask",
|
||||
"39": "Bunny Mask",
|
||||
"40": "Goron Mask",
|
||||
"41": "Zora Mask",
|
||||
"42": "Gerudo Mask",
|
||||
"43": "Mask of Truth",
|
||||
"44": "Sold Out",
|
||||
"45": "Pocket Egg",
|
||||
"46": "Pocket Cucco",
|
||||
"47": "Cojiro",
|
||||
"48": "Odd Mushroom",
|
||||
"49": "Odd Potion",
|
||||
"50": "Saw",
|
||||
"51": "Broken Sword",
|
||||
"52": "Prescription",
|
||||
"53": "Eyeball Frog",
|
||||
"54": "Eyedrops",
|
||||
"55": "Claim Check",
|
||||
"56": "Bow Fire Arrow",
|
||||
"57": "Bow Ice Arrow",
|
||||
"58": "Bow Light Arrow",
|
||||
"59": "Kokiri Sword",
|
||||
"60": "Master Sword",
|
||||
"61": "Giant's Knife",
|
||||
"62": "Deku Shield",
|
||||
"63": "Hylian Shield",
|
||||
"64": "Mirror Shield",
|
||||
"65": "Kokiri Tunic",
|
||||
"66": "Goron Tunic",
|
||||
"67": "Zora Tunic",
|
||||
"68": "Kokiri Boots",
|
||||
"69": "Iron Boots",
|
||||
"70": "Hover Boots",
|
||||
"71": "Bullet Bag (Holds 30)",
|
||||
"72": "Bullet Bag (Holds 40)",
|
||||
"73": "Bullet Bag (Holds 50)",
|
||||
"74": "Quiver (Holds 30)",
|
||||
"75": "Quiver (Holds 40)",
|
||||
"76": "Quiver (Holds 50)",
|
||||
"77": "Bomb Bag (Holds 20)",
|
||||
"78": "Bomb Bag (Holds 30)",
|
||||
"79": "Bomb Bag (Holds 40)",
|
||||
"80": "Goron's Bracelet",
|
||||
"81": "Silver Gauntlets",
|
||||
"82": "Golden Gauntlets",
|
||||
"83": "Silver Scale",
|
||||
"84": "Golden Scale",
|
||||
"85": "Giant's Knife (Broken)",
|
||||
"86": "WALLET ADULT",
|
||||
"87": "Giant's Wallet",
|
||||
"88": "Deku Seeds",
|
||||
"89": "Fishing Pole",
|
||||
"90": "Minuet of Forest",
|
||||
"91": "Bolero of Fire",
|
||||
"92": "Serenade of Water",
|
||||
"93": "Requiem of Spirit",
|
||||
"94": "Nocturne of Shadow",
|
||||
"95": "Prelude of Light",
|
||||
"96": "Zelda's Lullaby",
|
||||
"97": "Epona's Song",
|
||||
"98": "Saria's Song",
|
||||
"99": "Sun's Song",
|
||||
"100": "Song of Time",
|
||||
"101": "Song of Storms",
|
||||
"102": "Forest Medallion",
|
||||
"103": "Fire Medallion",
|
||||
"104": "Water Medallion",
|
||||
"105": "Spirit Medallion",
|
||||
"106": "Shadow Medallion",
|
||||
"107": "Light Medallion",
|
||||
"108": "Kokiri's Emerald",
|
||||
"109": "Goron's Ruby",
|
||||
"110": "Zora Sapphire",
|
||||
"111": "Stone of Agony",
|
||||
"112": "Gerudo's Card",
|
||||
"113": "Skulltula Token - $0",
|
||||
"114": "Piece of Heart - $0",
|
||||
"115": "Piece of Heart",
|
||||
"116": "Boss Key",
|
||||
"117": "Compass",
|
||||
"118": "Dungeon Map",
|
||||
"119": "Small Key",
|
||||
"120": "MAGIC SMALL",
|
||||
"121": "MAGIC LARGE",
|
||||
"122": "Biggoron's Sword",
|
||||
"123": "INVALID 1",
|
||||
"124": "INVALID 2",
|
||||
"125": "INVALID 3",
|
||||
"126": "INVALID 4",
|
||||
"127": "INVALID 5",
|
||||
"128": "INVALID 6",
|
||||
"129": "INVALID 7",
|
||||
"130": "Milk",
|
||||
"131": "Recovery Heart",
|
||||
"132": "Green Rupee",
|
||||
"133": "Blue Rupee",
|
||||
"134": "Red Rupee",
|
||||
"135": "Purple Rupee",
|
||||
"136": "Gold Rupee",
|
||||
"137": "INVALID 8",
|
||||
"138": "STICKS 5",
|
||||
"139": "STICKS 10",
|
||||
"140": "NUTS 5",
|
||||
"141": "NUTS 10",
|
||||
"142": "BOMBS 5",
|
||||
"143": "BOMBS 10",
|
||||
"144": "BOMBS 20",
|
||||
"145": "BOMBS 30",
|
||||
"146": "ARROWS SMALL",
|
||||
"147": "ARROWS MEDIUM",
|
||||
"148": "ARROWS LARGE",
|
||||
"149": "SEEDS 30",
|
||||
"150": "BOMBCHUS 5",
|
||||
"151": "BOMBCHUS 20",
|
||||
"152": "STICK UPGRADE 20",
|
||||
"153": "STICK UPGRADE 30",
|
||||
"154": "NUT UPGRADE 30",
|
||||
"155": "NUT UPGRADE 40",
|
||||
"255": "",
|
||||
"256": "Haunted Wasteland",
|
||||
"257": "Gerudos Fortress",
|
||||
"258": "Gerudo Valley",
|
||||
"259": "Hylia Lakeside",
|
||||
"260": "Lon Lon Ranch",
|
||||
"261": "Market",
|
||||
"262": "Hyrule Field",
|
||||
"263": "Death Mountain",
|
||||
"264": "Kakariko Village",
|
||||
"265": "Lost Woods",
|
||||
"266": "Kokiri Forest",
|
||||
"267": "Zoras Domain",
|
||||
"268": "",
|
||||
"269": "",
|
||||
"270": "",
|
||||
"271": "",
|
||||
"272": "",
|
||||
"273": "",
|
||||
"274": "",
|
||||
"275": "",
|
||||
"276": "",
|
||||
"277": "",
|
||||
"278": "",
|
||||
"279": "",
|
||||
"280": "",
|
||||
"281": "",
|
||||
"282": "",
|
||||
"283": "",
|
||||
"284": "",
|
||||
"285": "",
|
||||
"286": "",
|
||||
"287": "",
|
||||
"288": "",
|
||||
"289": "",
|
||||
"290": "",
|
||||
"291": "",
|
||||
"292": "Hyrule Field",
|
||||
"293": "Kakariko Village",
|
||||
"294": "Graveyard",
|
||||
"295": "Zoras River",
|
||||
"296": "Kokiri Forest",
|
||||
"297": "Sacred Forest Meadow",
|
||||
"298": "Lake Hylia",
|
||||
"299": "Zoras Domain",
|
||||
"300": "Zoras Fountain",
|
||||
"301": "Gerudo Valley",
|
||||
"302": "Lost Woods",
|
||||
"303": "Desert Colossus",
|
||||
"304": "Gerudo's Fortress",
|
||||
"305": "Haunted Wasteland",
|
||||
"306": "Market",
|
||||
"307": "Hyrule Castle",
|
||||
"308": "Death Mountain Trail",
|
||||
"309": "Death Mountain Crater",
|
||||
"310": "Goron City",
|
||||
"311": "Lon Lon Ranch",
|
||||
"312": "Question Mark",
|
||||
"313": "Ganon's Castle"
|
||||
}
|
||||
234
soh/assets/custom/accessibility/texts/kaleidoscope_fra.json
Normal file
234
soh/assets/custom/accessibility/texts/kaleidoscope_fra.json
Normal file
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"health": "Vie - $0 Coeurs",
|
||||
"magic": "Magie - $0",
|
||||
"rupees": "Rubis - $0",
|
||||
"keys": "Clés - $0",
|
||||
"floor": "Étage $0",
|
||||
"basement": "Sous-sol $0",
|
||||
"item_menu": "Inventaire",
|
||||
"map_menu": "Carte - $0",
|
||||
"quest_menu": "Statut de la quête",
|
||||
"equip_menu": "Equipment",
|
||||
"overworld": "Surmonde",
|
||||
"equipped": "$0 - Équipé",
|
||||
"save_prompt": "Voulez-vous sauvegarder ?",
|
||||
"game_saved": "Jeu sauvegardé",
|
||||
"game_over": "Game Over",
|
||||
"continue_game": "Continuer la partie ?",
|
||||
"assigned_to": "Assigné au $0",
|
||||
"0": "Bâton Mojo - $0",
|
||||
"1": "Noix Mojo - $0",
|
||||
"2": "Bombes - $0",
|
||||
"3": "Arc des Fées - $0",
|
||||
"4": "Flèche de Feu",
|
||||
"5": "Feu de Din",
|
||||
"6": "Lance-Pierre des Fées - $0",
|
||||
"7": "Ocarina des Fées",
|
||||
"8": "Ocarina of Temps",
|
||||
"9": "Missiles Teigneux - $0",
|
||||
"10": "Grappin",
|
||||
"11": "Super Grappin",
|
||||
"12": "Flèche de Glace",
|
||||
"13": "Vent de Farore",
|
||||
"14": "Boomerang",
|
||||
"15": "Monocle de Vérité",
|
||||
"16": "Haricot Magique - $0",
|
||||
"17": "Masse des Titans",
|
||||
"18": "Flèche de Lumière",
|
||||
"19": "Amour de Nayru",
|
||||
"20": "Bouteille Vide",
|
||||
"21": "Potion Rouge",
|
||||
"22": "Potion Verte",
|
||||
"23": "Potion Bleue",
|
||||
"24": "Fée",
|
||||
"25": "Poisson",
|
||||
"26": "Lait de Lon Lon",
|
||||
"27": "Lettre de Ruto",
|
||||
"28": "Flammme Bleue",
|
||||
"29": "Insectes",
|
||||
"30": "Âme",
|
||||
"31": "Lait de Lon Lon (moitié)",
|
||||
"32": "Esprit",
|
||||
"33": "Oeuf Curieux",
|
||||
"34": "Poulet",
|
||||
"35": "Lettre de Zelda",
|
||||
"36": "Masque du Renard",
|
||||
"37": "Masque de Mort",
|
||||
"38": "Masque d'Effroi",
|
||||
"39": "Masque du Lapin",
|
||||
"40": "Masque de Goron",
|
||||
"41": "Masque de Zora",
|
||||
"42": "Masque de Gerudo",
|
||||
"43": "Masque de Vérité",
|
||||
"44": "VENDU",
|
||||
"45": "Oeuf de Poche",
|
||||
"46": "Cocotte de poche",
|
||||
"47": "P'tit Poulet",
|
||||
"48": "Champignon suspect",
|
||||
"49": "Mixture suspecte",
|
||||
"50": "Scie du chasseur",
|
||||
"51": "Épée de Goron (brisée)",
|
||||
"52": "Ordonnance",
|
||||
"53": "Crapaud-qui-louche",
|
||||
"54": "Gouttes",
|
||||
"55": "Certificat",
|
||||
"56": "Arc et Flèche de Feu",
|
||||
"57": "Arc et Flèche de Glace",
|
||||
"58": "Arc et Flèche de Lumière",
|
||||
"59": "Épée Kokiri",
|
||||
"60": "Épée de Légende",
|
||||
"61": "Lame des Géants",
|
||||
"62": "Bouclier Mojo",
|
||||
"63": "Bouclier Hylien",
|
||||
"64": "Bouclier Miroir",
|
||||
"65": "Tunique Kokiri",
|
||||
"66": "Tunique Goron",
|
||||
"67": "Tunique Zora",
|
||||
"68": "Bottes Kokiri",
|
||||
"69": "Bottes de plomb",
|
||||
"70": "Bottes des airs",
|
||||
"71": "Sac de graines (Contient 30)",
|
||||
"72": "Sac de graines (Contient 40)",
|
||||
"73": "Sac de graines (Contient 50)",
|
||||
"74": "Carquois (Contient 30)",
|
||||
"75": "Carquois (Contient 40)",
|
||||
"76": "Carquois (Contient 50)",
|
||||
"77": "Sac de bombes (Contient 20)",
|
||||
"78": "Sac de bombes (Contient 30)",
|
||||
"79": "Sac de bombes (Contient 40)",
|
||||
"80": "Bracelet Goron",
|
||||
"81": "Gantelets d'argent",
|
||||
"82": "Gentelets d'or",
|
||||
"83": "Écaille d'argent",
|
||||
"84": "Écaille d'or",
|
||||
"85": "Lame des Géants (Brisée)",
|
||||
"86": "GRANDE BOURSE",
|
||||
"87": "Bourse de Géant",
|
||||
"88": "Deku Seeds",
|
||||
"89": "Canne à pèche",
|
||||
"90": "Menuet des Bois",
|
||||
"91": "Boléro du Feu",
|
||||
"92": "Sérénade de l'Eau",
|
||||
"93": "Requiem des Esprits",
|
||||
"94": "Nocturne de l'Ombre",
|
||||
"95": "Prélude de la Lumière",
|
||||
"96": "Berceuse de Zelda",
|
||||
"97": "Chant d'Epona",
|
||||
"98": "Chant de Saria",
|
||||
"99": "Chant du Soleil",
|
||||
"100": "Chant du Temps",
|
||||
"101": "Chant des Tempêtes",
|
||||
"102": "Médaillon de la Forêt",
|
||||
"103": "Médaillon du Feu",
|
||||
"104": "Médaillon de l'Eau",
|
||||
"105": "Médaillon de l'Esprit",
|
||||
"106": "Médaillon de l'Ombre",
|
||||
"107": "Médaillon de la Lumière",
|
||||
"108": "Émeraude Kokiri",
|
||||
"109": "Rubis Goron",
|
||||
"110": "Saphir Zora",
|
||||
"111": "Pierre de Souffrance",
|
||||
"112": "Carte Gerudo",
|
||||
"113": "Skulltula d'or - $0",
|
||||
"114": "Quart de Coeur - $0",
|
||||
"115": "Quart de Coeur",
|
||||
"116": "Clé d'or",
|
||||
"117": "Boussole",
|
||||
"118": "Carte du Donjon",
|
||||
"119": "Petite Clé",
|
||||
"120": "PETITE BOUTEILLE DE MAGIE",
|
||||
"121": "GRANDE BOUTEILLE DE MAGIE",
|
||||
"122": "Épée de Biggoron",
|
||||
"123": "INVALIDE 1",
|
||||
"124": "INVALIDE 2",
|
||||
"125": "INVALIDE 3",
|
||||
"126": "INVALIDE 4",
|
||||
"127": "INVALIDE 5",
|
||||
"128": "INVALIDE 6",
|
||||
"129": "INVALIDE 7",
|
||||
"130": "Lait de Lon Lon",
|
||||
"131": "Coeur de Vie",
|
||||
"132": "Rubis Vert",
|
||||
"133": "Rubis Bleu",
|
||||
"134": "Rubis Rouge",
|
||||
"135": "Rubis Pourpre",
|
||||
"136": "Énorme Rubis",
|
||||
"137": "INVALIDE 8",
|
||||
"138": "BÂTON MOJO 5",
|
||||
"139": "BÂTON MOJO 10",
|
||||
"140": "NOIX MOJO 5",
|
||||
"141": "NOIX MOJO 10",
|
||||
"142": "BOMBES 5",
|
||||
"143": "BOMBES 10",
|
||||
"144": "BOMBES 20",
|
||||
"145": "BOMBES 30",
|
||||
"146": "ARROWS SMALL",
|
||||
"147": "ARROWS MEDIUM",
|
||||
"148": "ARROWS LARGE",
|
||||
"149": "GRAINES MOJO 30",
|
||||
"150": "MISSILES TEIGNEUX 5",
|
||||
"151": "MISSILES TEIGNEUX 20",
|
||||
"152": "AMÉLIORATION BÂTON MOJO 20",
|
||||
"153": "AMÉLIORATION BÂTON MOJO 30",
|
||||
"154": "AMÉLIORATION NOIX MOJO 30",
|
||||
"155": "AMÉLIORATION NOIX MOJO 40",
|
||||
"255": "",
|
||||
"256": "Désert Hanté",
|
||||
"257": "Forteresse Gerudo",
|
||||
"258": "Vallée Gerudo",
|
||||
"259": "Laboratoire du Lac",
|
||||
"260": "Ranch Lon Lon",
|
||||
"261": "Place du Marché",
|
||||
"262": "Plaine d'Hyrule",
|
||||
"263": "Montagne du Péril",
|
||||
"264": "Village Cocorico",
|
||||
"265": "Bois Perdus",
|
||||
"266": "Forêt Kokiri",
|
||||
"267": "Domaine Zora",
|
||||
"268": "",
|
||||
"269": "",
|
||||
"270": "",
|
||||
"271": "",
|
||||
"272": "",
|
||||
"273": "",
|
||||
"274": "",
|
||||
"275": "",
|
||||
"276": "",
|
||||
"277": "",
|
||||
"278": "",
|
||||
"279": "",
|
||||
"280": "",
|
||||
"281": "",
|
||||
"282": "",
|
||||
"283": "",
|
||||
"284": "",
|
||||
"285": "",
|
||||
"286": "",
|
||||
"287": "",
|
||||
"288": "",
|
||||
"289": "",
|
||||
"290": "",
|
||||
"291": "",
|
||||
"292": "Plaine d'Hyrule",
|
||||
"293": "Village Cocorico",
|
||||
"294": "Cimetière",
|
||||
"295": "Rivière Zora",
|
||||
"296": "Forêt Kokiri",
|
||||
"297": "Bosquet Sacré",
|
||||
"298": "Lac Hylia",
|
||||
"299": "Domaine Zora",
|
||||
"300": "Fountaine Zora",
|
||||
"301": "Vallée Gerudo",
|
||||
"302": "Bois Perdus",
|
||||
"303": "Colosse du Désert",
|
||||
"304": "Forteresse Gerudo",
|
||||
"305": "Désert Hanté",
|
||||
"306": "Place du Marché",
|
||||
"307": "Château d'Hyrule",
|
||||
"308": "Chemin du Péril",
|
||||
"309": "Cratère du Péril",
|
||||
"310": "Village Goron",
|
||||
"311": "Ranch Lon Lon",
|
||||
"312": "Point d'interrogation",
|
||||
"313": "Château de Ganon"
|
||||
}
|
||||
234
soh/assets/custom/accessibility/texts/kaleidoscope_ger.json
Normal file
234
soh/assets/custom/accessibility/texts/kaleidoscope_ger.json
Normal file
@@ -0,0 +1,234 @@
|
||||
{
|
||||
"health": "Energie - $0 Herzen",
|
||||
"magic": "Magie - $0",
|
||||
"rupees": "Rubine - $0",
|
||||
"keys": "Schlüssel - $0",
|
||||
"floor": "Etage $0",
|
||||
"basement": "Keller $0",
|
||||
"item_menu": "Gegenstände",
|
||||
"map_menu": "Karte - $0",
|
||||
"quest_menu": "Quest Status",
|
||||
"equip_menu": "Ausrüstung",
|
||||
"overworld": "Überwelt",
|
||||
"equipped": "$0 - Ausgerüstet",
|
||||
"save_prompt": "Spielstand sichern ?",
|
||||
"game_saved": "Spielstand gesichert",
|
||||
"game_over": "Game Over",
|
||||
"continue_game": "Spiel fortsetzen ?",
|
||||
"assigned_to": "$0 zugeordnet",
|
||||
"0": "Deku-Stab - $0",
|
||||
"1": "Deku-Nuß - $0",
|
||||
"2": "Bombe - $0",
|
||||
"3": "Feen-Bogen - $0",
|
||||
"4": "Feuer-Pfeil",
|
||||
"5": "Dins Feuerinferno",
|
||||
"6": "Feen-Schleuder - $0",
|
||||
"7": "Feen-Okarina",
|
||||
"8": "Okarina der Zeit",
|
||||
"9": "Krabbelmine - $0",
|
||||
"10": "Fanghaken",
|
||||
"11": "Enterhaken",
|
||||
"12": "Eis-Pfeil",
|
||||
"13": "Farores Donnersturm",
|
||||
"14": "Bumerang",
|
||||
"15": "Auge der Wahrheit",
|
||||
"16": "Wundererbsen - $0",
|
||||
"17": "Stahlhammer",
|
||||
"18": "Licht-Pfeil",
|
||||
"19": "Nayrus Umarmung",
|
||||
"20": "Flasche",
|
||||
"21": "Rotes Elixier",
|
||||
"22": "Grünes Elixier",
|
||||
"23": "Blaues Elixier",
|
||||
"24": "Fee",
|
||||
"25": "Fisch",
|
||||
"26": "Milch",
|
||||
"27": "Brief",
|
||||
"28": "Blaues Feuer",
|
||||
"29": "Käfer",
|
||||
"30": "Nachtschwärmer",
|
||||
"31": "Milch (Halbe Füllung)",
|
||||
"32": "Irrlicht",
|
||||
"33": "Seltsames Ei",
|
||||
"34": "Huhn",
|
||||
"35": "Zeldas Brief",
|
||||
"36": "Fuchs-Maske",
|
||||
"37": "Schädel-Maske",
|
||||
"38": "Geister-Maske",
|
||||
"39": "Hasenohren",
|
||||
"40": "Goronen-Maske",
|
||||
"41": "Zora-Maske",
|
||||
"42": "Gerudo-Maske",
|
||||
"43": "Maske des Wissens",
|
||||
"44": "Verkauft",
|
||||
"45": "Ei",
|
||||
"46": "Kiki",
|
||||
"47": "Henni",
|
||||
"48": "Schimmelpilz",
|
||||
"49": "Modertrank",
|
||||
"50": "Säge",
|
||||
"51": "Zerbr. Goronen-Schwert",
|
||||
"52": "Rezept",
|
||||
"53": "Glotzfrosch",
|
||||
"54": "Augentropfen",
|
||||
"55": "Zertifikat",
|
||||
"56": "Bogen Feuer-Pfeil",
|
||||
"57": "Bogen Eis-Pfeil",
|
||||
"58": "Bogen Licht-Pfeil",
|
||||
"59": "Kokiri-Schwert",
|
||||
"60": "Master-Schwert",
|
||||
"61": "Langschwert",
|
||||
"62": "Deku-Schild",
|
||||
"63": "Hylia-Schild",
|
||||
"64": "Spiegel-Schild",
|
||||
"65": "Kokiri-Rüstung",
|
||||
"66": "Goronen-Rüstung",
|
||||
"67": "Zora-Rüstung",
|
||||
"68": "Lederstiefel",
|
||||
"69": "Eisenstiefel",
|
||||
"70": "Gleitstiefel",
|
||||
"71": "Munitionstasche (30)",
|
||||
"72": "Munitionstasche (40)",
|
||||
"73": "Munitionstasche (50)",
|
||||
"74": "Köcher (30)",
|
||||
"75": "Köcher (40)",
|
||||
"76": "Köcher (50)",
|
||||
"77": "Bombentasche (20)",
|
||||
"78": "Bombentasche (30)",
|
||||
"79": "Bombentasche (40)",
|
||||
"80": "Goronen-Armband",
|
||||
"81": "Krafthandschuh",
|
||||
"82": "Titanhandschuh",
|
||||
"83": "Silberne Schuppe",
|
||||
"84": "Goldene Schuppe",
|
||||
"85": "Zerbr. Langschwert",
|
||||
"86": "Große Börse",
|
||||
"87": "Riesenbörse",
|
||||
"88": "Deku-Kerne",
|
||||
"89": "Angelrute",
|
||||
"90": "Menuett des Waldes",
|
||||
"91": "Bolero des Feuers",
|
||||
"92": "Serenade des Wassers",
|
||||
"93": "Requiem der Geister",
|
||||
"94": "Nocturne des Schattens",
|
||||
"95": "Kantate des Lichts",
|
||||
"96": "Zeldas Wiegenlied",
|
||||
"97": "Eponas Lied",
|
||||
"98": "Salias Lied",
|
||||
"99": "Hymne der Sonne",
|
||||
"100": "Hymne der Zeit",
|
||||
"101": "Hymne des Sturms",
|
||||
"102": "Amulett des Waldes",
|
||||
"103": "Amulett des Feuers",
|
||||
"104": "Amulett des Wassers",
|
||||
"105": "Amulett der Geister",
|
||||
"106": "Amulett des Schattens",
|
||||
"107": "Amulett des Lichts",
|
||||
"108": "Kokiri-Smaragd",
|
||||
"109": "Goronen-Rubin",
|
||||
"110": "Zora-Saphir",
|
||||
"111": "Stein des Wissens",
|
||||
"112": "Gerudo-Paß",
|
||||
"113": "Skulltula-Symbol - $0",
|
||||
"114": "Herzteil - $0",
|
||||
"115": "Herzteil",
|
||||
"116": "Master-Schlüssel",
|
||||
"117": "Kompaß",
|
||||
"118": "Labyrinth-Karte",
|
||||
"119": "Kleiner Schlüssel",
|
||||
"120": "Kleine Magieflasche",
|
||||
"121": "Große Magieflasche",
|
||||
"122": "Biggoron-Schwert",
|
||||
"123": "UNGÜLTIG 1",
|
||||
"124": "UNGÜLTIG 2",
|
||||
"125": "UNGÜLTIG 3",
|
||||
"126": "UNGÜLTIG 4",
|
||||
"127": "UNGÜLTIG 5",
|
||||
"128": "UNGÜLTIG 6",
|
||||
"129": "UNGÜLTIG 7",
|
||||
"130": "Milch",
|
||||
"131": "Herz",
|
||||
"132": "ein Rubin",
|
||||
"133": "5 Rubine",
|
||||
"134": "20 Rubine",
|
||||
"135": "50 Rubine",
|
||||
"136": "200 Rubine",
|
||||
"137": "UNGÜLTIG 8",
|
||||
"138": "DEKU-STÄBE 5",
|
||||
"139": "DEKU-STÄBE 10",
|
||||
"140": "DEKU-NÜSSE 5",
|
||||
"141": "DEKU-NÜSSE 10",
|
||||
"142": "BOMBEN 5",
|
||||
"143": "BOMBEN 10",
|
||||
"144": "BOMBEN 20",
|
||||
"145": "BOMBEN 30",
|
||||
"146": "PFEILE 5",
|
||||
"147": "PFEILE 10",
|
||||
"148": "PFEILE 30",
|
||||
"149": "DEKU-KERNE 30",
|
||||
"150": "KRABBELMINEN 5",
|
||||
"151": "KRABBELMINEN 20",
|
||||
"152": "DEKU-STAB-KAPAZITÄT 20",
|
||||
"153": "DEKU-STAB-KAPAZITÄT 30",
|
||||
"154": "DEKU-NUẞ-KAPAZITÄT 30",
|
||||
"155": "DEKU-NUẞ-KAPAZITÄT 40",
|
||||
"255": "",
|
||||
"256": "Gespensterwüste",
|
||||
"257": "Gerudo-Festung",
|
||||
"258": "Gerudotal",
|
||||
"259": "Hylia-See",
|
||||
"260": "Lon Lon-Farm",
|
||||
"261": "Marktplatz",
|
||||
"262": "Hylianische Steppe",
|
||||
"263": "Todesberg",
|
||||
"264": "Kakariko",
|
||||
"265": "Verlorene Wälder",
|
||||
"266": "Kokiri-Wald",
|
||||
"267": "Zoras Reich",
|
||||
"268": "",
|
||||
"269": "",
|
||||
"270": "",
|
||||
"271": "",
|
||||
"272": "",
|
||||
"273": "",
|
||||
"274": "",
|
||||
"275": "",
|
||||
"276": "",
|
||||
"277": "",
|
||||
"278": "",
|
||||
"279": "",
|
||||
"280": "",
|
||||
"281": "",
|
||||
"282": "",
|
||||
"283": "",
|
||||
"284": "",
|
||||
"285": "",
|
||||
"286": "",
|
||||
"287": "",
|
||||
"288": "",
|
||||
"289": "",
|
||||
"290": "",
|
||||
"291": "",
|
||||
"292": "Hylianische Steppe",
|
||||
"293": "Kakariko",
|
||||
"294": "Friedhof",
|
||||
"295": "Zora-Fluss",
|
||||
"296": "Kokiri-Wald",
|
||||
"297": "Heilige Lichtung",
|
||||
"298": "Hylia-See",
|
||||
"299": "Zoras Reich",
|
||||
"300": "Zoras Quelle",
|
||||
"301": "Gerudotal",
|
||||
"302": "Verlorene Wälder",
|
||||
"303": "Wüstenkoloss",
|
||||
"304": "Gerudo-Festung",
|
||||
"305": "Gespensterwüste",
|
||||
"306": "Marktplatz",
|
||||
"307": "Schloß Hyrule",
|
||||
"308": "Pfad zum Todesberg",
|
||||
"309": "Todeskrater",
|
||||
"310": "Goronia",
|
||||
"311": "Lon Lon-Farm",
|
||||
"312": "Fragezeichen",
|
||||
"313": "Teufelsturm"
|
||||
}
|
||||
24
soh/assets/custom/accessibility/texts/misc_eng.json
Normal file
24
soh/assets/custom/accessibility/texts/misc_eng.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"minutes_plural" : "$0 minutes",
|
||||
"minutes_singular" : "$0 minute",
|
||||
"seconds_plural" : "$0 seconds",
|
||||
"seconds_singular" : "$0 second",
|
||||
"input_button_a": "the A button",
|
||||
"input_button_b": "the B button",
|
||||
"input_button_c": "the C button",
|
||||
"input_button_l": "the L button",
|
||||
"input_button_r": "the R button",
|
||||
"input_button_z": "the Z button",
|
||||
"input_button_c_up": "C Up",
|
||||
"input_button_c_down": "C Down",
|
||||
"input_button_c_left": "C Left",
|
||||
"input_button_c_right": "C Right",
|
||||
"input_analog_stick": "the Analog Stick",
|
||||
"input_d_pad": "the D-Pad",
|
||||
"input_d_pad_up": "D-Pad Up",
|
||||
"input_d_pad_down": "D-Pad Down",
|
||||
"input_d_pad_left": "D-Pad Left",
|
||||
"input_d_pad_right": "D-Pad Right",
|
||||
"yes": "Yes",
|
||||
"no": "No"
|
||||
}
|
||||
24
soh/assets/custom/accessibility/texts/misc_fra.json
Normal file
24
soh/assets/custom/accessibility/texts/misc_fra.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"minutes_plural" : "$0 minutes",
|
||||
"minutes_singular" : "$0 minute",
|
||||
"seconds_plural" : "$0 secondes",
|
||||
"seconds_singular" : "$0 seconde",
|
||||
"input_button_a": "le bouton A",
|
||||
"input_button_b": "le bouton B",
|
||||
"input_button_c": "le bouton C",
|
||||
"input_button_l": "le bouton L",
|
||||
"input_button_r": "le bouton R",
|
||||
"input_button_z": "le bouton Z",
|
||||
"input_button_c_up": "C Haut",
|
||||
"input_button_c_down": "C Bas",
|
||||
"input_button_c_left": "C Gauche",
|
||||
"input_button_c_right": "C Droit",
|
||||
"input_analog_stick": "le Stick Analogique",
|
||||
"input_d_pad": "D-Pad",
|
||||
"input_d_pad_up": "D-Pad Haut",
|
||||
"input_d_pad_down": "D-Pad Bas",
|
||||
"input_d_pad_left": "D-Pad Gauche",
|
||||
"input_d_pad_right": "D-Pad Droit",
|
||||
"yes": "Oui",
|
||||
"no": "Non"
|
||||
}
|
||||
24
soh/assets/custom/accessibility/texts/misc_ger.json
Normal file
24
soh/assets/custom/accessibility/texts/misc_ger.json
Normal file
@@ -0,0 +1,24 @@
|
||||
{
|
||||
"minutes_plural" : "$0 Minuten",
|
||||
"minutes_singular" : "eine Minute",
|
||||
"seconds_plural" : "$0 Sekunden",
|
||||
"seconds_singular" : "eine Sekunde",
|
||||
"input_button_a": "den A-Knopf",
|
||||
"input_button_b": "den B-Knopf",
|
||||
"input_button_c": "den C-Knopf",
|
||||
"input_button_l": "den L-Knopf",
|
||||
"input_button_r": "den R-Knopf",
|
||||
"input_button_z": "den Z-Knopf",
|
||||
"input_button_c_up": "C Oben",
|
||||
"input_button_c_down": "C Unten",
|
||||
"input_button_c_left": "C Links",
|
||||
"input_button_c_right": "C Rechts",
|
||||
"input_analog_stick": "den Analog-Stick",
|
||||
"input_d_pad": "das Steuerkreuz",
|
||||
"input_d_pad_up": "Steuerkreuz Oben",
|
||||
"input_d_pad_down": "Steuerkreuz Unten",
|
||||
"input_d_pad_left": "Steuerkreuz Links",
|
||||
"input_d_pad_right": "Steuerkreuz Rechts",
|
||||
"yes": "Ja",
|
||||
"no": "Nein"
|
||||
}
|
||||
112
soh/assets/custom/accessibility/texts/scenes_eng.json
Normal file
112
soh/assets/custom/accessibility/texts/scenes_eng.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"0": "Inside the Deku Tree",
|
||||
"1": "Dodongo's Cavern",
|
||||
"2": "Inside Jabu-Jabu's Belly",
|
||||
"3": "Forest Temple",
|
||||
"4": "Fire Temple",
|
||||
"5": "Water Temple",
|
||||
"6": "Spirit Temple",
|
||||
"7": "Shadow Temple",
|
||||
"8": "Bottom of The Well",
|
||||
"9": "Ice Cavern",
|
||||
"10": "", // Stairs to Ganondorf's Lair (No title card)
|
||||
"11": "Gerudo Training Ground",
|
||||
"12": "Thieves' Hideout",
|
||||
"13": "Ganon's Castle",
|
||||
"14": "", // Escape from Ganon's Castle (No title card)
|
||||
"15": "", // Escape from Ganon's Castle 5 (No title card)x
|
||||
"16": "Treasure Box Shop",
|
||||
"17": "Parasitic Armored Arachnid - Gohma",
|
||||
"18": "Infernal Dinosaur - King Dodongo",
|
||||
"19": "Bio-electric Anemone - Barinade",
|
||||
"20": "Evil Spirit from Beyond - Phantom Ganon",
|
||||
"21": "Subterranean Lava Dragon - Volvagia",
|
||||
"22": "Giant Aquatic Amoeba - Morpha",
|
||||
"23": "Sorceress Sisters - Twinrova",
|
||||
"24": "Phantom Shadow Beast - Bongo Bongo",
|
||||
"25": "Great King of Evil - Ganondorf",
|
||||
"26": "",
|
||||
"27": "", // Entrance to Market (No title card)
|
||||
"28": "",
|
||||
"29": "",
|
||||
"30": "Back Alley",
|
||||
"31": "Back Alley",
|
||||
"32": "Market",
|
||||
"33": "Market",
|
||||
"34": "Market",
|
||||
"35": "", // Temple of Time Exterior (No title card)
|
||||
"36": "SCENE_SHRINE_N",
|
||||
"37": "SCENE_SHRINE_R",
|
||||
"38": "", // House of the Know-it-All Brothers (No title card)
|
||||
"39": "", // House of Twins (No title card)
|
||||
"40": "", // House of the Great Mido (No title card)
|
||||
"41": "", // Saria's House (No title card)
|
||||
"42": "", // Kakariko House 1 (No title card)
|
||||
"43": "", // Back Alley House 1 (No title card)
|
||||
"44": "Bazaar",
|
||||
"45": "Kokiri Shop",
|
||||
"46": "Goron Shop",
|
||||
"47": "Zora Shop",
|
||||
"48": "", // Closed Shop (No title card)
|
||||
"49": "Potion Shop",
|
||||
"50": "", // Bombchu Shop (No title card)
|
||||
"51": "Happy Mask Shop",
|
||||
"52": "", // Link's House (No title card)
|
||||
"53": "", // Dog Lady's House (No title card)
|
||||
"54": "Stable",
|
||||
"55": "", // Impa's House (No title card)
|
||||
"56": "Lakeside Laboratory",
|
||||
"57": "", // Running Man's Tent (No title card)
|
||||
"58": "Gravekeepers Hut",
|
||||
"59": "Great Fairy's Fountain",
|
||||
"60": "Fairy's Fountain",
|
||||
"61": "Great Fairy's Fountain",
|
||||
"62": "", // Grottos (No title card)
|
||||
"63": "", // Tomb 1 (No title card)
|
||||
"64": "", // Tomb 2 (No title card)
|
||||
"65": "Royal Family's Tomb",
|
||||
"66": "Shooting Gallery",
|
||||
"67": "Temple of Time",
|
||||
"68": "Chamber of The Sages",
|
||||
"69": "Castle Courtyard",
|
||||
"70": "Castle Courtyard",
|
||||
"71": "", // Goddesses Cutscene (No title card)
|
||||
"72": "Unknown Place",
|
||||
"73": "Fishing Pond",
|
||||
"74": "Castle Courtyard",
|
||||
"75": "Bombchu Bowling Alley",
|
||||
"76": "", // Lon Lon Ranch House/Silo (No title card)
|
||||
"77": "", // Guard House (No title card)
|
||||
"78": "", // Potion Shop (No title card)
|
||||
"79": "Ganon",
|
||||
"80": "House of Skulltula",
|
||||
"81": "Hyrule Field",
|
||||
"82": "Kakariko Village",
|
||||
"83": "Graveyard",
|
||||
"84": "Zora's River",
|
||||
"85": "Kokiri Forest",
|
||||
"86": "Sacred Forest Meadow",
|
||||
"87": "Lake Hylia",
|
||||
"88": "Zoras Domain",
|
||||
"89": "Zoras Fountain",
|
||||
"90": "Gerudo Valley",
|
||||
"91": "Lost Woods",
|
||||
"92": "Desert Colossus",
|
||||
"93": "Gerudo's Fortress",
|
||||
"94": "Haunted Wasteland",
|
||||
"95": "Hyrule Castle",
|
||||
"96": "Death Mountain Trail",
|
||||
"97": "Death Mountain Crater",
|
||||
"98": "Goron City",
|
||||
"99": "Lon Lon Ranch",
|
||||
"100": "",
|
||||
"101": "", // Debug: Test Map (No title card)
|
||||
"102": "", // Debug: Test Room (No title card)
|
||||
"103": "", // Debug: Depth Test (No title card)
|
||||
"104": "", // Debug: Stalfos Miniboss Room (No title card)
|
||||
"105": "", // Debug: Stalfos Boss Room (No title card)
|
||||
"106": "", // Debug: Dark Link Room (No title card)
|
||||
"107": "",
|
||||
"108": "", // Debug: SRD Room (No title card)
|
||||
"109": "" // Debug: Treasure Chest Warp (No title card)
|
||||
}
|
||||
112
soh/assets/custom/accessibility/texts/scenes_fra.json
Normal file
112
soh/assets/custom/accessibility/texts/scenes_fra.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"0": "Arbre Mojo",
|
||||
"1": "Caverne Dodongo",
|
||||
"2": "Ventre de Jabu-Jabu",
|
||||
"3": "Temple de la Forêt",
|
||||
"4": "Temple du Feu",
|
||||
"5": "Temple de l'Eau",
|
||||
"6": "Temple de l'Esprit",
|
||||
"7": "Temple de l'Ombre",
|
||||
"8": "Puits",
|
||||
"9": "Caverne Polaire",
|
||||
"10": "", // Escaliers vers le Repaire de Ganondorf (No title card)
|
||||
"11": "Gymnase Gerudo",
|
||||
"12": "Repaire des Voleurs",
|
||||
"13": "Tour de Ganon",
|
||||
"14": "", // Fuite du Château de Ganon (No title card)
|
||||
"15": "", // Fuite du Château de Ganon 5 (No title card)
|
||||
"16": "Chasse aux Trésors",
|
||||
"17": "Monstre Insectoide Géant - Gohma",
|
||||
"18": "Dinosaure Infernal - King Dodongo",
|
||||
"19": "Anémone Bio-Electrique - Barinade",
|
||||
"20": "Esprit Maléfique de l'Au-Delà - Ganon Spectral",
|
||||
"21": "Dragon des Profondeurs - Volcania",
|
||||
"22": "Amibe Aquatique Géante - Morpha",
|
||||
"23": "Sorcières Jumelles - Duo Maléfique",
|
||||
"24": "Monstre de l'Ombre - Bongo Bongo",
|
||||
"25": "Seigneur du Malin - Ganondorf",
|
||||
"26": "",
|
||||
"27": "", // Entrée vers le Marché (No title card)
|
||||
"28": "",
|
||||
"29": "",
|
||||
"30": "Ruelle",
|
||||
"31": "Ruelle",
|
||||
"32": "Place du Marché",
|
||||
"33": "Place du Marché",
|
||||
"34": "Place du Marché",
|
||||
"35": "", // Extérieur du Temple du Temps (No title card)
|
||||
"36": "SCENE_SHRINE_N",
|
||||
"37": "SCENE_SHRINE_R",
|
||||
"38": "", // Cabane des Frères Je-Sais-Tout (No title card)
|
||||
"39": "", // Cabane des Jumelles (No title card)
|
||||
"40": "", // Cabane du Grand Mido (No title card)
|
||||
"41": "", // Cabane de Saria (No title card)
|
||||
"42": "", // Maison du Village Cocorico 1 (No title card)
|
||||
"43": "", // Maison de la Ruelle 1 (No title card)
|
||||
"44": "Bazar",
|
||||
"45": "Boutique Kokiri",
|
||||
"46": "Boutique Goron",
|
||||
"47": "Boutique Zora",
|
||||
"48": "", // Magasin Fermé (No title card)
|
||||
"49": "Apothicaire",
|
||||
"50": "", // Magasin de Missiles (No title card)
|
||||
"51": "Foire aux Masques",
|
||||
"52": "", // Cabane de Link (No title card)
|
||||
"53": "", // Dog Lady's House (No title card)
|
||||
"54": "Étable",
|
||||
"55": "", // Maison d'Impa (No title card)
|
||||
"56": "Laboratoire du Lac",
|
||||
"57": "", // Tente du Marathonien (No title card)
|
||||
"58": "Cabane du fossoyeur",
|
||||
"59": "Fontaine Royale des Fées",
|
||||
"60": "Fontaine des Fées",
|
||||
"61": "Fontaine Royale des Fées",
|
||||
"62": "", // Grottes (No title card)
|
||||
"63": "", // Tombe 1 (No title card)
|
||||
"64": "", // Tombe 2 (No title card)
|
||||
"65": "Tombe Royale",
|
||||
"66": "Jeu d'adresse",
|
||||
"67": "Temple du Temps",
|
||||
"68": "Sanctuaire des Sages",
|
||||
"69": "Cour du Château",
|
||||
"70": "Cour du Château",
|
||||
"71": "", // Goddesses Cutscene (No title card)
|
||||
"72": "Endroit Inconnu",
|
||||
"73": "Étang",
|
||||
"74": "Cour du Château",
|
||||
"75": "Bowling Teigneux",
|
||||
"76": "", // Lon Lon Ranch House/Silo (No title card)
|
||||
"77": "", // Guard House (No title card)
|
||||
"78": "", // Potion Shop (No title card)
|
||||
"79": "Ganon",
|
||||
"80": "Maison des Araignées",
|
||||
"81": "Plaine d'Hyrule",
|
||||
"82": "Village Cocorico",
|
||||
"83": "Cimetière",
|
||||
"84": "Fleuve Zora",
|
||||
"85": "Forêt Kokiri",
|
||||
"86": "Bosquet Sacré",
|
||||
"87": "Lac Hylia",
|
||||
"88": "Domaine Zora",
|
||||
"89": "Fontaine Zora",
|
||||
"90": "Vallée Gerudo",
|
||||
"91": "Bois Perdu",
|
||||
"92": "Colosse du Désert",
|
||||
"93": "Forteresse Gerudo",
|
||||
"94": "Désert Hanté",
|
||||
"95": "Château d'Hyrule",
|
||||
"96": "Chemin du Péril",
|
||||
"97": "Cratère du Péril",
|
||||
"98": "Village Goron",
|
||||
"99": "Ranch Lon Lon",
|
||||
"100": "",
|
||||
"101": "", // Debug: Test Map (No title card)
|
||||
"102": "", // Debug: Test Room (No title card)
|
||||
"103": "", // Debug: Depth Test (No title card)
|
||||
"104": "", // Debug: Stalfos Miniboss Room (No title card)
|
||||
"105": "", // Debug: Stalfos Boss Room (No title card)
|
||||
"106": "", // Debug: Dark Link Room (No title card)
|
||||
"107": "",
|
||||
"108": "", // Debug: SRD Room (No title card)
|
||||
"109": "" // Debug: Treasure Chest Warp (No title card)
|
||||
}
|
||||
112
soh/assets/custom/accessibility/texts/scenes_ger.json
Normal file
112
soh/assets/custom/accessibility/texts/scenes_ger.json
Normal file
@@ -0,0 +1,112 @@
|
||||
{
|
||||
"0": "Im Deku-Baum",
|
||||
"1": "Dodongos Höhle",
|
||||
"2": "Jabu-Jabus Bauch",
|
||||
"3": "Waldtempel",
|
||||
"4": "Feuertempel",
|
||||
"5": "Wassertempel",
|
||||
"6": "Geistertempel",
|
||||
"7": "Schattentempel",
|
||||
"8": "Grund des Brunnens",
|
||||
"9": "Eishöhle",
|
||||
"10": "", // Treppe zu Ganondorfs Verlies (Keine Title-Card)
|
||||
"11": "Gerudo-Arena",
|
||||
"12": "Diebesversteck",
|
||||
"13": "Ganons Schloß",
|
||||
"14": "", // Flucht aus Ganons Schloß (Keine Title-Card)
|
||||
"15": "", // Flucht aus Ganons Schloß 5 (Keine Title-Card)
|
||||
"16": "Truhenlotterie",
|
||||
"17": "Gepanzerter Spinnenparasit - Gohma",
|
||||
"18": "Infernosaurus - King Dodongo",
|
||||
"19": "Elektroterristrisches Biotentakel - Barinade",
|
||||
"20": "Reitendes Unheil - Phantom-Ganon",
|
||||
"21": "Subterraner Lavadrachoid - Volvagia",
|
||||
"22": "Aquamöbes Wassertentakel - Morpha",
|
||||
"23": "Höllische Hexenarmada - Twinrova",
|
||||
"24": "Bestialische Schattenmonstrosität - Bongo Bongo",
|
||||
"25": "Großmeister des Bösen - Ganondorf",
|
||||
"26": "",
|
||||
"27": "", // Eingang zum Marktplatz (Keine Title-Card)
|
||||
"28": "",
|
||||
"29": "",
|
||||
"30": "Seitenstraße",
|
||||
"31": "Seitenstraße",
|
||||
"32": "Marktplatz",
|
||||
"33": "Marktplatz",
|
||||
"34": "Marktplatz",
|
||||
"35": "", // Vor der Zitadelle der Zeit (Keine Title-Card)
|
||||
"36": "SCENE_SHRINE_N",
|
||||
"37": "SCENE_SHRINE_R",
|
||||
"38": "", // Haus der Allwissenden Brüder (Keine Title-Card)
|
||||
"39": "", // Haus der Zwillinge (Keine Title-Card)
|
||||
"40": "", // Midos Haus (Keine Title-Card)
|
||||
"41": "", // Salias Haus (Keine Title-Card)
|
||||
"42": "", // Kakariko Haus 1 (Keine Title-Card)
|
||||
"43": "", // Steinstraßen Haus 1 (Keine Title-Card)
|
||||
"44": "Basar",
|
||||
"45": "Kokiri-Laden",
|
||||
"46": "Goronen-Laden",
|
||||
"47": "Zora-Laden",
|
||||
"48": "", // Geschlossener Laden (Keine Title-Card)
|
||||
"49": "Magie-Laden",
|
||||
"50": "", // Krabbelminen-Laden (Keine Title-Card)
|
||||
"51": "Maskenhändler",
|
||||
"52": "", // Links Haus (Keine Title-Card)
|
||||
"53": "", // Haus der Hunde-Dame (Keine Title-Card)
|
||||
"54": "Stall",
|
||||
"55": "", // Impas Haus (Keine Title-Card)
|
||||
"56": "Hylia-See Laboratorium",
|
||||
"57": "", // Zelt des Rennläufers (Keine Title-Card)
|
||||
"58": "Hütte des Totengräbers",
|
||||
"59": "Feen-Quelle",
|
||||
"60": "Feen-Brunnen",
|
||||
"61": "Feen-Quelle",
|
||||
"62": "", // Grotten (Keine Title-Card)
|
||||
"63": "", // Grab 1 (Keine Title-Card)
|
||||
"64": "", // Grab 2 (Keine Title-Card)
|
||||
"65": "Königsgrab",
|
||||
"66": "Schießbude",
|
||||
"67": "Zitadelle der Zeit",
|
||||
"68": "Halle der Weisen",
|
||||
"69": "Burghof",
|
||||
"70": "Burghof",
|
||||
"71": "", // Göttinnen Cutscene (Keine Title-Card)
|
||||
"72": "Unbekannter Ort",
|
||||
"73": "Fischweiher",
|
||||
"74": "Burghof",
|
||||
"75": "Minenbowlingbahn",
|
||||
"76": "", // Lon Lon-Farm Haus/Silo (Keine Title-Card)
|
||||
"77": "", // Wachposten (Keine Title-Card)
|
||||
"78": "", // Magie-Laden (Keine Title-Card)
|
||||
"79": "Ganon",
|
||||
"80": "Skulltulas Haus",
|
||||
"81": "Hylianische Steppe",
|
||||
"82": "Kakariko",
|
||||
"83": "Friedhof",
|
||||
"84": "Zora-Fluß",
|
||||
"85": "Kokiri-Wald",
|
||||
"86": "Waldlichtung",
|
||||
"87": "Hylia-See",
|
||||
"88": "Zoras Reich",
|
||||
"89": "Zoras Quelle",
|
||||
"90": "Gerudotal",
|
||||
"91": "Verlorene Wälder",
|
||||
"92": "Wüstenkoloss",
|
||||
"93": "Gerudo-Festung",
|
||||
"94": "Geisterwüste",
|
||||
"95": "Schloß Hyrule",
|
||||
"96": "Pfad zum Todesberg",
|
||||
"97": "Todeskrater",
|
||||
"98": "Goronia",
|
||||
"99": "Lon Lon-Farm",
|
||||
"100": "",
|
||||
"101": "", // Debug: Test Karte (Keine Title-Card)
|
||||
"102": "", // Debug: Test Raum (Keine Title-Card)
|
||||
"103": "", // Debug: Tiefen Test (Keine Title-Card)
|
||||
"104": "", // Debug: Stalfos-Ritter Miniboss Raum (Keine Title-Card)
|
||||
"105": "", // Debug: Stalfos-Ritter Boss Raum (Keine Title-Card)
|
||||
"106": "", // Debug: Schwarzer Link Raum (Keine Title-Card)
|
||||
"107": "",
|
||||
"108": "", // Debug: SRD Raum (Keine Title-Card)
|
||||
"109": "" // Debug: Schatzkisten Teleport (Keine Title-Card)
|
||||
}
|
||||
BIN
soh/assets/custom/fonts/Fipps-Regular.otf
Normal file
BIN
soh/assets/custom/fonts/Fipps-Regular.otf
Normal file
Binary file not shown.
BIN
soh/assets/custom/fonts/Inconsolata-Regular.ttf
Normal file
BIN
soh/assets/custom/fonts/Inconsolata-Regular.ttf
Normal file
Binary file not shown.
BIN
soh/assets/custom/fonts/Montserrat-Regular.ttf
Normal file
BIN
soh/assets/custom/fonts/Montserrat-Regular.ttf
Normal file
Binary file not shown.
BIN
soh/assets/custom/fonts/NotoSansJP-Regular.ttf
Normal file
BIN
soh/assets/custom/fonts/NotoSansJP-Regular.ttf
Normal file
Binary file not shown.
BIN
soh/assets/custom/fonts/PressStart2P-Regular.ttf
Normal file
BIN
soh/assets/custom/fonts/PressStart2P-Regular.ttf
Normal file
Binary file not shown.
@@ -0,0 +1,5 @@
|
||||
<DisplayList Version="0">
|
||||
<Grayscale Enabled="false"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
||||
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotBaseNoise_8
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotBaseNoise_8
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceNoise_16
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceNoise_16
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceYellow_16
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFaceYellow_16
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFace_32
Normal file
BIN
soh/assets/custom/objects/gameplay_dangeon_keep/PotFace_32
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16
Normal file
BIN
soh/assets/custom/objects/gameplay_field_keep/BushTex.rgba16
Normal file
Binary file not shown.
BIN
soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16
Normal file
BIN
soh/assets/custom/objects/gameplay_field_keep/LeafTex.rgba16
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,14 @@
|
||||
<DisplayList Version="0">
|
||||
<ClearGeometryMode G_LIGHTING="1" />
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_cull" VertexBufferIndex="0" VertexOffset="0" Count="8"/>
|
||||
<SetGeometryMode G_LIGHTING="1" />
|
||||
<CullDisplayList Start="0" End="7"/>
|
||||
<CallDisplayList Path="objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_shrubbery"/>
|
||||
<CallDisplayList Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_0"/>
|
||||
<CallDisplayList Path="objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_leaf"/>
|
||||
<CallDisplayList Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_1"/>
|
||||
<CallDisplayList Path="objects/gameplay_field_keep/mat_gFieldBushBossKeyDL_f3dlite_flower_bosskey"/>
|
||||
<CallDisplayList Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_tri_2"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_0" VertexBufferIndex="0" VertexOffset="0" Count="14"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="5" V02="6" Flag0="0" V10="7" V11="8" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="10" V02="11" Flag0="0" V10="7" V11="12" V12="13" Flag1="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="0" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="1" V12="0" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="4" V02="1" Flag0="0" V10="5" V11="4" V12="3" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="6" V02="5" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="5" V11="8" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="10" V02="11" Flag0="0" V10="12" V11="10" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="13" V02="10" Flag0="0" V10="14" V11="13" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="15" V02="14" Flag0="0" V10="7" V11="14" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="16" V02="14" Flag0="0" V10="14" V11="16" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="18" V02="19" Flag0="0" V10="20" V11="18" V12="17" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="21" V02="18" Flag0="0" V10="22" V11="21" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="23" V02="22" Flag0="0" V10="7" V11="22" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="24" V02="22" Flag0="0" V10="22" V11="24" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="25" V01="26" V02="27" Flag0="0" V10="28" V11="26" V12="25" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="29" V02="26" Flag0="0" V10="30" V11="29" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="31" V02="30" Flag0="0" V10="7" V11="30" V12="31" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="32" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="2" V11="1" V12="3" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="7" V11="5" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="9" V11="8" V12="7" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="10" V02="9" Flag0="0" V10="0" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="11" V02="9" Flag0="0" V10="9" V11="11" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="13" V02="14" Flag0="0" V10="15" V11="13" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="16" V02="13" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="18" V02="17" Flag0="0" V10="19" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="20" V02="17" Flag0="0" V10="17" V11="20" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="22" V02="23" Flag0="0" V10="24" V11="22" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="25" V02="22" Flag0="0" V10="26" V11="25" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="27" V02="26" Flag0="0" V10="19" V11="26" V12="27" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="28" V02="26" Flag0="0" V10="26" V11="28" V12="25" Flag1="0"/>
|
||||
<Triangle1 V00="29" V01="30" V02="31"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="64" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="3" V12="1" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="3" V02="0" Flag0="0" V10="0" V11="5" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="4" V02="5" Flag0="0" V10="6" V11="7" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="7" V02="3" Flag0="0" V10="8" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="11" V01="9" V02="8" Flag0="0" V10="11" V11="12" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="13" V01="12" V02="11" Flag0="0" V10="11" V11="14" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="13" V02="14" Flag0="0" V10="6" V11="15" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="13" V01="15" V02="12" Flag0="0" V10="16" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="17" V02="16" Flag0="0" V10="19" V11="20" V12="17" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="20" V02="19" Flag0="0" V10="19" V11="22" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="21" V02="22" Flag0="0" V10="6" V11="23" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="23" V02="20" Flag0="0" V10="24" V11="25" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="27" V01="25" V02="24" Flag0="0" V10="27" V11="28" V12="25" Flag1="0"/>
|
||||
<Triangles2 V00="29" V01="28" V02="27" Flag0="0" V10="27" V11="30" V12="29" Flag1="0"/>
|
||||
<Triangle1 V00="31" V01="29" V02="30"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="96" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="2" V11="1" V12="3" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="7" V11="5" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="9" V11="8" V12="7" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="10" V02="9" Flag0="0" V10="0" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="11" V02="9" Flag0="0" V10="9" V11="11" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="13" V02="14" Flag0="0" V10="15" V11="13" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="16" V02="13" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="18" V02="17" Flag0="0" V10="0" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="19" V02="17" Flag0="0" V10="17" V11="19" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="21" V02="22" Flag0="0" V10="23" V11="21" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="23" V01="24" V02="21" Flag0="0" V10="25" V11="24" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="23" V01="26" V02="25" Flag0="0" V10="0" V11="25" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="27" V02="25" Flag0="0" V10="25" V11="27" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="29" V02="30" Flag0="0" V10="31" V11="29" V12="28" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="128" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="1" V12="0" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="4" V02="3" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="5" V01="6" V02="3" Flag0="0" V10="3" V11="6" V12="1" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="9" Flag0="0" V10="10" V11="7" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="10" V01="9" V02="11" Flag0="0" V10="12" V11="10" V12="11" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="11" V02="13" Flag0="0" V10="14" V11="12" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="15" V02="12" Flag0="0" V10="10" V11="12" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="16" V01="17" V02="18" Flag0="0" V10="19" V11="16" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="21" V11="19" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="20" V02="22" Flag0="0" V10="14" V11="21" V12="22" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="23" V02="21" Flag0="0" V10="19" V11="21" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="25" V02="26" Flag0="0" V10="27" V11="24" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="29" V11="27" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="14" V11="29" V12="30" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="31" V02="29" Flag0="0" V10="27" V11="29" V12="31" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="160" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="3" V11="5" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="10" V02="11" Flag0="0" V10="12" V11="9" V12="11" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="11" V02="13" Flag0="0" V10="14" V11="12" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="13" V02="15" Flag0="0" V10="7" V11="14" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="16" V02="14" Flag0="0" V10="12" V11="14" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="18" V02="19" Flag0="0" V10="20" V11="17" V12="19" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="19" V02="21" Flag0="0" V10="22" V11="20" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="22" V01="21" V02="23" Flag0="0" V10="24" V11="22" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="25" V02="22" Flag0="0" V10="20" V11="22" V12="25" Flag1="0"/>
|
||||
<Triangles2 V00="26" V01="27" V02="28" Flag0="0" V10="29" V11="26" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="31" V11="29" V12="30" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="192" Count="30"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="4" V02="0" Flag0="0" V10="5" V11="0" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="9" V11="6" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="8" V02="10" Flag0="0" V10="11" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="11" V01="10" V02="12" Flag0="0" V10="3" V11="11" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="13" V02="11" Flag0="0" V10="9" V11="11" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="15" V02="16" Flag0="0" V10="17" V11="14" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="16" V02="18" Flag0="0" V10="19" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="3" V11="19" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="21" V02="19" Flag0="0" V10="17" V11="19" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="22" V01="23" V02="24" Flag0="0" V10="25" V11="22" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="25" V01="24" V02="26" Flag0="0" V10="27" V11="25" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="3" V11="27" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="29" V02="27" Flag0="0" V10="25" V11="27" V12="29" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="222" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="3" V11="5" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="10" V02="11" Flag0="0" V10="12" V11="9" V12="11" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="11" V02="13" Flag0="0" V10="14" V11="12" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="13" V02="15" Flag0="0" V10="7" V11="14" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="16" V02="14" Flag0="0" V10="12" V11="14" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="18" V02="19" Flag0="0" V10="20" V11="17" V12="19" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="19" V02="21" Flag0="0" V10="22" V11="20" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="22" V01="21" V02="23" Flag0="0" V10="7" V11="22" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="24" V02="22" Flag0="0" V10="20" V11="22" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="25" V01="26" V02="27" Flag0="0" V10="28" V11="25" V12="27" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="27" V02="29" Flag0="0" V10="30" V11="28" V12="29" Flag1="0"/>
|
||||
<Triangles2 V00="30" V01="29" V02="31" Flag0="0" V10="7" V11="30" V12="31" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_1" VertexBufferIndex="0" VertexOffset="254" Count="12"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="2" V12="1" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="7" V11="4" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="6" V02="8" Flag0="0" V10="9" V11="7" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="8" V02="10" Flag0="0" V10="0" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="11" V02="9" Flag0="0" V10="7" V11="9" V12="11" Flag1="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
||||
@@ -0,0 +1,134 @@
|
||||
<DisplayList Version="0">
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="0" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="1" V12="0" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="4" V02="1" Flag0="0" V10="5" V11="4" V12="3" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="6" V02="5" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="5" V11="8" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="10" V02="11" Flag0="0" V10="12" V11="10" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="13" V02="10" Flag0="0" V10="14" V11="13" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="15" V02="14" Flag0="0" V10="7" V11="14" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="16" V02="14" Flag0="0" V10="14" V11="16" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="18" V02="19" Flag0="0" V10="20" V11="18" V12="17" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="21" V02="18" Flag0="0" V10="22" V11="21" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="23" V02="22" Flag0="0" V10="7" V11="22" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="24" V02="22" Flag0="0" V10="22" V11="24" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="25" V01="26" V02="27" Flag0="0" V10="28" V11="26" V12="25" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="29" V02="26" Flag0="0" V10="30" V11="29" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="31" V02="30" Flag0="0" V10="7" V11="30" V12="31" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="32" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="2" V11="1" V12="3" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="7" V11="5" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="9" V11="8" V12="7" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="10" V02="9" Flag0="0" V10="0" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="11" V02="9" Flag0="0" V10="9" V11="11" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="13" V02="14" Flag0="0" V10="15" V11="13" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="16" V02="13" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="18" V02="17" Flag0="0" V10="19" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="20" V02="17" Flag0="0" V10="17" V11="20" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="22" V02="23" Flag0="0" V10="24" V11="22" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="25" V02="22" Flag0="0" V10="26" V11="25" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="27" V02="26" Flag0="0" V10="19" V11="26" V12="27" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="28" V02="26" Flag0="0" V10="26" V11="28" V12="25" Flag1="0"/>
|
||||
<Triangle1 V00="29" V01="30" V02="31"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="64" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="0" V11="3" V12="1" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="3" V02="0" Flag0="0" V10="0" V11="5" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="4" V02="5" Flag0="0" V10="6" V11="7" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="7" V02="3" Flag0="0" V10="8" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="11" V01="9" V02="8" Flag0="0" V10="11" V11="12" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="13" V01="12" V02="11" Flag0="0" V10="11" V11="14" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="13" V02="14" Flag0="0" V10="6" V11="15" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="13" V01="15" V02="12" Flag0="0" V10="16" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="17" V02="16" Flag0="0" V10="19" V11="20" V12="17" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="20" V02="19" Flag0="0" V10="19" V11="22" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="21" V02="22" Flag0="0" V10="6" V11="23" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="23" V02="20" Flag0="0" V10="24" V11="25" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="27" V01="25" V02="24" Flag0="0" V10="27" V11="28" V12="25" Flag1="0"/>
|
||||
<Triangles2 V00="29" V01="28" V02="27" Flag0="0" V10="27" V11="30" V12="29" Flag1="0"/>
|
||||
<Triangle1 V00="31" V01="29" V02="30"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="96" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="2" V11="1" V12="3" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="7" V11="5" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="9" V11="8" V12="7" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="10" V02="9" Flag0="0" V10="0" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="11" V02="9" Flag0="0" V10="9" V11="11" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="13" V02="14" Flag0="0" V10="15" V11="13" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="16" V02="13" Flag0="0" V10="17" V11="16" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="15" V01="18" V02="17" Flag0="0" V10="0" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="19" V02="17" Flag0="0" V10="17" V11="19" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="21" V02="22" Flag0="0" V10="23" V11="21" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="23" V01="24" V02="21" Flag0="0" V10="25" V11="24" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="23" V01="26" V02="25" Flag0="0" V10="0" V11="25" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="27" V02="25" Flag0="0" V10="25" V11="27" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="29" V02="30" Flag0="0" V10="31" V11="29" V12="28" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="128" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="1" V12="0" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="4" V02="3" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="5" V01="6" V02="3" Flag0="0" V10="3" V11="6" V12="1" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="9" Flag0="0" V10="10" V11="7" V12="9" Flag1="0"/>
|
||||
<Triangles2 V00="10" V01="9" V02="11" Flag0="0" V10="12" V11="10" V12="11" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="11" V02="13" Flag0="0" V10="14" V11="12" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="15" V02="12" Flag0="0" V10="10" V11="12" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="16" V01="17" V02="18" Flag0="0" V10="19" V11="16" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="21" V11="19" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="21" V01="20" V02="22" Flag0="0" V10="14" V11="21" V12="22" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="23" V02="21" Flag0="0" V10="19" V11="21" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="25" V02="26" Flag0="0" V10="27" V11="24" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="29" V11="27" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="14" V11="29" V12="30" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="31" V02="29" Flag0="0" V10="27" V11="29" V12="31" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="160" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="3" V11="5" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="10" V02="11" Flag0="0" V10="12" V11="9" V12="11" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="11" V02="13" Flag0="0" V10="14" V11="12" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="13" V02="15" Flag0="0" V10="7" V11="14" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="16" V02="14" Flag0="0" V10="12" V11="14" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="18" V02="19" Flag0="0" V10="20" V11="17" V12="19" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="19" V02="21" Flag0="0" V10="22" V11="20" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="22" V01="21" V02="23" Flag0="0" V10="24" V11="22" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="24" V01="25" V02="22" Flag0="0" V10="20" V11="22" V12="25" Flag1="0"/>
|
||||
<Triangles2 V00="26" V01="27" V02="28" Flag0="0" V10="29" V11="26" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="29" V01="28" V02="30" Flag0="0" V10="31" V11="29" V12="30" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="192" Count="30"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="4" V02="0" Flag0="0" V10="5" V11="0" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="6" V01="7" V02="8" Flag0="0" V10="9" V11="6" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="8" V02="10" Flag0="0" V10="11" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="11" V01="10" V02="12" Flag0="0" V10="3" V11="11" V12="12" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="13" V02="11" Flag0="0" V10="9" V11="11" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="15" V02="16" Flag0="0" V10="17" V11="14" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="16" V02="18" Flag0="0" V10="19" V11="17" V12="18" Flag1="0"/>
|
||||
<Triangles2 V00="19" V01="18" V02="20" Flag0="0" V10="3" V11="19" V12="20" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="21" V02="19" Flag0="0" V10="17" V11="19" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="22" V01="23" V02="24" Flag0="0" V10="25" V11="22" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="25" V01="24" V02="26" Flag0="0" V10="27" V11="25" V12="26" Flag1="0"/>
|
||||
<Triangles2 V00="27" V01="26" V02="28" Flag0="0" V10="3" V11="27" V12="28" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="29" V02="27" Flag0="0" V10="25" V11="27" V12="29" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="222" Count="32"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="0" V12="2" Flag1="0"/>
|
||||
<Triangles2 V00="3" V01="2" V02="4" Flag0="0" V10="5" V11="3" V12="4" Flag1="0"/>
|
||||
<Triangles2 V00="5" V01="4" V02="6" Flag0="0" V10="7" V11="5" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="8" V02="5" Flag0="0" V10="3" V11="5" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="10" V02="11" Flag0="0" V10="12" V11="9" V12="11" Flag1="0"/>
|
||||
<Triangles2 V00="12" V01="11" V02="13" Flag0="0" V10="14" V11="12" V12="13" Flag1="0"/>
|
||||
<Triangles2 V00="14" V01="13" V02="15" Flag0="0" V10="7" V11="14" V12="15" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="16" V02="14" Flag0="0" V10="12" V11="14" V12="16" Flag1="0"/>
|
||||
<Triangles2 V00="17" V01="18" V02="19" Flag0="0" V10="20" V11="17" V12="19" Flag1="0"/>
|
||||
<Triangles2 V00="20" V01="19" V02="21" Flag0="0" V10="22" V11="20" V12="21" Flag1="0"/>
|
||||
<Triangles2 V00="22" V01="21" V02="23" Flag0="0" V10="7" V11="22" V12="23" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="24" V02="22" Flag0="0" V10="20" V11="22" V12="24" Flag1="0"/>
|
||||
<Triangles2 V00="25" V01="26" V02="27" Flag0="0" V10="28" V11="25" V12="27" Flag1="0"/>
|
||||
<Triangles2 V00="28" V01="27" V02="29" Flag0="0" V10="30" V11="28" V12="29" Flag1="0"/>
|
||||
<Triangles2 V00="30" V01="29" V02="31" Flag0="0" V10="7" V11="30" V12="31" Flag1="0"/>
|
||||
<LoadVertices Path="objects/gameplay_field_keep/gFieldBushBossKeyDL_vtx_2" VertexBufferIndex="0" VertexOffset="254" Count="12"/>
|
||||
<Triangles2 V00="0" V01="1" V02="2" Flag0="0" V10="3" V11="2" V12="1" Flag1="0"/>
|
||||
<Triangles2 V00="4" V01="5" V02="6" Flag0="0" V10="7" V11="4" V12="6" Flag1="0"/>
|
||||
<Triangles2 V00="7" V01="6" V02="8" Flag0="0" V10="9" V11="7" V12="8" Flag1="0"/>
|
||||
<Triangles2 V00="9" V01="8" V02="10" Flag0="0" V10="0" V11="9" V12="10" Flag1="0"/>
|
||||
<Triangles2 V00="0" V01="11" V02="9" Flag0="0" V10="7" V11="9" V12="11" Flag1="0"/>
|
||||
<EndDisplayList/>
|
||||
</DisplayList>
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="0" Y="98" Z="0" S="558" T="-664" R="0" G="0" B="129" A="255"/>
|
||||
<Vtx X="54" Y="0" Z="93" S="-281" T="1008" R="110" G="0" B="192" A="255"/>
|
||||
<Vtx X="-54" Y="0" Z="-93" S="1398" T="1008" R="110" G="0" B="192" A="255"/>
|
||||
<Vtx X="-107" Y="0" Z="0" S="-281" T="1008" R="0" G="0" B="127" A="255"/>
|
||||
<Vtx X="107" Y="0" Z="0" S="1398" T="1008" R="0" G="0" B="127" A="255"/>
|
||||
<Vtx X="54" Y="0" Z="-93" S="-281" T="1008" R="146" G="0" B="192" A="255"/>
|
||||
<Vtx X="-54" Y="0" Z="93" S="1398" T="1008" R="146" G="0" B="192" A="255"/>
|
||||
<Vtx X="0" Y="98" Z="0" S="558" T="-664" R="0" G="0" B="127" A="255"/>
|
||||
<Vtx X="-54" Y="0" Z="-93" S="1398" T="1008" R="146" G="0" B="64" A="255"/>
|
||||
<Vtx X="54" Y="0" Z="93" S="-281" T="1008" R="146" G="0" B="64" A="255"/>
|
||||
<Vtx X="107" Y="0" Z="0" S="1398" T="1008" R="0" G="0" B="129" A="255"/>
|
||||
<Vtx X="-107" Y="0" Z="0" S="-281" T="1008" R="0" G="0" B="129" A="255"/>
|
||||
<Vtx X="-54" Y="0" Z="93" S="1398" T="1008" R="110" G="0" B="64" A="255"/>
|
||||
<Vtx X="54" Y="0" Z="-93" S="-281" T="1008" R="110" G="0" B="64" A="255"/>
|
||||
</Vertex>
|
||||
@@ -0,0 +1,268 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-25" Y="44" Z="36" S="304" T="432" R="77" G="174" B="197" A="255"/>
|
||||
<Vtx X="-22" Y="48" Z="36" S="432" T="304" R="77" G="174" B="197" A="255"/>
|
||||
<Vtx X="-20" Y="43" Z="38" S="496" T="496" R="35" G="211" B="143" A="255"/>
|
||||
<Vtx X="-28" Y="43" Z="29" S="112" T="304" R="90" G="179" B="211" A="255"/>
|
||||
<Vtx X="-21" Y="50" Z="29" S="304" T="112" R="73" G="161" B="213" A="255"/>
|
||||
<Vtx X="-27" Y="49" Z="25" S="112" T="112" R="87" G="167" B="230" A="255"/>
|
||||
<Vtx X="-29" Y="46" Z="22" S="-16" T="176" R="77" G="160" B="224" A="255"/>
|
||||
<Vtx X="-26" Y="48" Z="16" S="-16" T="-16" R="81" G="171" B="209" A="255"/>
|
||||
<Vtx X="-24" Y="51" Z="22" S="176" T="-16" R="93" G="177" B="221" A="255"/>
|
||||
<Vtx X="-24" Y="63" Z="4" S="304" T="432" R="78" G="163" B="220" A="255"/>
|
||||
<Vtx X="-28" Y="61" Z="2" S="432" T="304" R="78" G="163" B="220" A="255"/>
|
||||
<Vtx X="-23" Y="62" Z="-1" S="496" T="496" R="45" G="142" B="31" A="255"/>
|
||||
<Vtx X="-22" Y="59" Z="10" S="112" T="304" R="72" G="167" B="201" A="255"/>
|
||||
<Vtx X="-30" Y="55" Z="5" S="304" T="112" R="90" G="178" B="213" A="255"/>
|
||||
<Vtx X="-28" Y="55" Z="13" S="112" T="112" R="84" G="186" B="191" A="255"/>
|
||||
<Vtx X="-24" Y="54" Z="15" S="-16" T="176" R="90" G="184" B="203" A="255"/>
|
||||
<Vtx X="-30" Y="51" Z="12" S="176" T="-16" R="76" G="176" B="194" A="255"/>
|
||||
<Vtx X="-42" Y="37" Z="22" S="304" T="432" R="89" G="181" B="205" A="255"/>
|
||||
<Vtx X="-39" Y="37" Z="27" S="432" T="304" R="89" G="181" B="205" A="255"/>
|
||||
<Vtx X="-40" Y="32" Z="25" S="496" T="496" R="110" G="255" B="193" A="255"/>
|
||||
<Vtx X="-38" Y="40" Z="17" S="112" T="304" R="85" G="169" B="221" A="255"/>
|
||||
<Vtx X="-33" Y="40" Z="26" S="304" T="112" R="73" G="169" B="199" A="255"/>
|
||||
<Vtx X="-33" Y="46" Z="21" S="112" T="112" R="67" G="156" B="216" A="255"/>
|
||||
<Vtx X="-33" Y="46" Z="16" S="-16" T="176" R="66" G="161" B="204" A="255"/>
|
||||
<Vtx X="-29" Y="46" Z="22" S="176" T="-16" R="77" G="160" B="224" A="255"/>
|
||||
<Vtx X="-14" Y="61" Z="25" S="304" T="432" R="70" G="163" B="206" A="255"/>
|
||||
<Vtx X="-15" Y="63" Z="20" S="432" T="304" R="70" G="163" B="206" A="255"/>
|
||||
<Vtx X="-9" Y="62" Z="22" S="496" T="496" R="252" G="142" B="201" A="255"/>
|
||||
<Vtx X="-18" Y="55" Z="25" S="112" T="304" R="82" G="178" B="199" A="255"/>
|
||||
<Vtx X="-19" Y="59" Z="16" S="304" T="112" R="84" G="167" B="221" A="255"/>
|
||||
<Vtx X="-24" Y="55" Z="20" S="112" T="112" R="98" G="186" B="214" A="255"/>
|
||||
<Vtx X="-24" Y="51" Z="22" S="-16" T="176" R="93" G="177" B="221" A="255"/>
|
||||
<Vtx X="-26" Y="48" Z="16" S="-16" T="-16" R="81" G="171" B="209" A="255"/>
|
||||
<Vtx X="-24" Y="54" Z="15" S="176" T="-16" R="90" G="184" B="203" A="255"/>
|
||||
<Vtx X="-24" Y="55" Z="20" S="112" T="112" R="98" G="186" B="214" A="255"/>
|
||||
<Vtx X="-19" Y="59" Z="16" S="304" T="112" R="84" G="167" B="221" A="255"/>
|
||||
<Vtx X="-41" Y="48" Z="3" S="304" T="432" R="90" G="174" B="219" A="255"/>
|
||||
<Vtx X="-43" Y="44" Z="6" S="432" T="304" R="90" G="174" B="219" A="255"/>
|
||||
<Vtx X="-42" Y="43" Z="0" S="496" T="496" R="116" G="211" B="26" A="255"/>
|
||||
<Vtx X="-34" Y="50" Z="6" S="112" T="304" R="74" G="162" B="214" A="255"/>
|
||||
<Vtx X="-38" Y="43" Z="11" S="304" T="112" R="84" G="179" B="200" A="255"/>
|
||||
<Vtx X="-34" Y="49" Z="14" S="112" T="112" R="65" G="167" B="192" A="255"/>
|
||||
<Vtx X="-30" Y="51" Z="12" S="-16" T="176" R="76" G="176" B="194" A="255"/>
|
||||
<Vtx X="-33" Y="46" Z="16" S="176" T="-16" R="66" G="161" B="204" A="255"/>
|
||||
<Vtx X="-18" Y="44" Z="-40" S="304" T="432" R="13" G="174" B="96" A="255"/>
|
||||
<Vtx X="-20" Y="48" Z="-37" S="432" T="304" R="13" G="174" B="96" A="255"/>
|
||||
<Vtx X="-23" Y="43" Z="-37" S="496" T="496" R="81" G="211" B="87" A="255"/>
|
||||
<Vtx X="-11" Y="43" Z="-39" S="112" T="304" R="250" G="179" B="101" A="255"/>
|
||||
<Vtx X="-14" Y="50" Z="-33" S="304" T="112" R="1" G="161" B="85" A="255"/>
|
||||
<Vtx X="-8" Y="49" Z="-36" S="112" T="112" R="235" G="167" B="88" A="255"/>
|
||||
<Vtx X="-5" Y="46" Z="-37" S="-16" T="176" R="245" G="160" B="82" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-31" S="-16" T="-16" R="0" G="171" B="94" A="255"/>
|
||||
<Vtx X="-7" Y="51" Z="-32" S="176" T="-16" R="239" G="177" B="98" A="255"/>
|
||||
<Vtx X="8" Y="63" Z="-23" S="304" T="432" R="248" G="163" B="86" A="255"/>
|
||||
<Vtx X="12" Y="61" Z="-25" S="432" T="304" R="248" G="163" B="86" A="255"/>
|
||||
<Vtx X="12" Y="62" Z="-19" S="496" T="496" R="206" G="142" B="24" A="255"/>
|
||||
<Vtx X="2" Y="59" Z="-24" S="112" T="304" R="11" G="167" B="90" A="255"/>
|
||||
<Vtx X="10" Y="55" Z="-28" S="304" T="112" R="248" G="178" B="100" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-31" S="112" T="112" R="14" G="187" B="105" A="255"/>
|
||||
<Vtx X="-1" Y="54" Z="-29" S="-16" T="176" R="1" G="184" B="104" A="255"/>
|
||||
<Vtx X="5" Y="51" Z="-32" S="176" T="-16" R="16" G="176" B="97" A="255"/>
|
||||
<Vtx X="2" Y="37" Z="-47" S="304" T="432" R="0" G="181" B="102" A="255"/>
|
||||
<Vtx X="-4" Y="37" Z="-47" S="432" T="304" R="0" G="181" B="102" A="255"/>
|
||||
<Vtx X="-1" Y="32" Z="-47" S="496" T="496" R="0" G="255" B="127" A="255"/>
|
||||
<Vtx X="4" Y="40" Z="-42" S="112" T="304" R="244" G="169" B="91" A="255"/>
|
||||
<Vtx X="-4" Y="37" Z="-47" S="432" T="304" R="0" G="181" B="102" A="255"/>
|
||||
<Vtx X="2" Y="37" Z="-47" S="304" T="432" R="0" G="181" B="102" A="255"/>
|
||||
<Vtx X="-6" Y="40" Z="-42" S="304" T="112" R="12" G="169" B="92" A="255"/>
|
||||
<Vtx X="-1" Y="46" Z="-39" S="112" T="112" R="1" G="156" B="78" A="255"/>
|
||||
<Vtx X="3" Y="46" Z="-37" S="-16" T="176" R="12" G="161" B="84" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-31" S="-16" T="-16" R="0" G="171" B="94" A="255"/>
|
||||
<Vtx X="-5" Y="46" Z="-37" S="176" T="-16" R="245" G="160" B="82" A="255"/>
|
||||
<Vtx X="-15" Y="61" Z="-25" S="304" T="432" R="8" G="163" B="86" A="255"/>
|
||||
<Vtx X="-10" Y="63" Z="-23" S="432" T="304" R="8" G="163" B="86" A="255"/>
|
||||
<Vtx X="-15" Y="62" Z="-19" S="496" T="496" R="50" G="142" B="24" A="255"/>
|
||||
<Vtx X="-12" Y="55" Z="-28" S="112" T="304" R="8" G="178" B="100" A="255"/>
|
||||
<Vtx X="-4" Y="59" Z="-24" S="304" T="112" R="245" G="167" B="90" A="255"/>
|
||||
<Vtx X="-5" Y="55" Z="-31" S="112" T="112" R="243" G="186" B="105" A="255"/>
|
||||
<Vtx X="-7" Y="51" Z="-32" S="-16" T="176" R="239" G="177" B="98" A="255"/>
|
||||
<Vtx X="-1" Y="54" Z="-29" S="176" T="-16" R="1" G="184" B="104" A="255"/>
|
||||
<Vtx X="18" Y="48" Z="-37" S="304" T="432" R="243" G="174" B="96" A="255"/>
|
||||
<Vtx X="16" Y="44" Z="-40" S="432" T="304" R="243" G="174" B="96" A="255"/>
|
||||
<Vtx X="21" Y="43" Z="-37" S="496" T="496" R="175" G="211" B="87" A="255"/>
|
||||
<Vtx X="12" Y="50" Z="-33" S="112" T="304" R="255" G="162" B="85" A="255"/>
|
||||
<Vtx X="9" Y="43" Z="-39" S="304" T="112" R="6" G="179" B="101" A="255"/>
|
||||
<Vtx X="5" Y="49" Z="-36" S="112" T="112" R="23" G="167" B="88" A="255"/>
|
||||
<Vtx X="5" Y="51" Z="-32" S="-16" T="176" R="16" G="176" B="97" A="255"/>
|
||||
<Vtx X="3" Y="46" Z="-37" S="176" T="-16" R="12" G="161" B="84" A="255"/>
|
||||
<Vtx X="44" Y="44" Z="4" S="304" T="432" R="166" G="174" B="219" A="255"/>
|
||||
<Vtx X="42" Y="48" Z="1" S="432" T="304" R="166" G="174" B="219" A="255"/>
|
||||
<Vtx X="43" Y="43" Z="-2" S="496" T="496" R="140" G="211" B="26" A="255"/>
|
||||
<Vtx X="39" Y="43" Z="10" S="112" T="304" R="172" G="179" B="200" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="4" S="304" T="112" R="182" G="161" B="215" A="255"/>
|
||||
<Vtx X="35" Y="49" Z="11" S="112" T="112" R="190" G="167" B="194" A="255"/>
|
||||
<Vtx X="34" Y="46" Z="14" S="-16" T="176" R="190" G="160" B="205" A="255"/>
|
||||
<Vtx X="27" Y="48" Z="14" S="-16" T="-16" R="174" G="171" B="209" A="255"/>
|
||||
<Vtx X="27" Y="48" Z="14" S="-16" T="-16" R="174" G="171" B="209" A="255"/>
|
||||
<Vtx X="31" Y="51" Z="10" S="176" T="-16" R="180" G="177" B="193" A="255"/>
|
||||
<Vtx X="35" Y="49" Z="11" S="112" T="112" R="190" G="167" B="194" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="4" S="304" T="112" R="182" G="161" B="215" A="255"/>
|
||||
<Vtx X="16" Y="63" Z="18" S="304" T="432" R="186" G="163" B="206" A="255"/>
|
||||
<Vtx X="15" Y="61" Z="23" S="432" T="304" R="186" G="163" B="206" A="255"/>
|
||||
<Vtx X="11" Y="62" Z="20" S="496" T="496" R="4" G="142" B="201" A="255"/>
|
||||
<Vtx X="20" Y="59" Z="14" S="112" T="304" R="172" G="167" B="221" A="255"/>
|
||||
<Vtx X="19" Y="55" Z="23" S="304" T="112" R="174" G="178" B="199" A="255"/>
|
||||
<Vtx X="25" Y="55" Z="18" S="112" T="112" R="158" G="187" B="216" A="255"/>
|
||||
<Vtx X="26" Y="54" Z="14" S="-16" T="176" R="165" G="184" B="205" A="255"/>
|
||||
<Vtx X="25" Y="51" Z="20" S="176" T="-16" R="164" G="176" B="221" A="255"/>
|
||||
<Vtx X="40" Y="37" Z="25" S="304" T="432" R="167" G="181" B="205" A="255"/>
|
||||
<Vtx X="43" Y="37" Z="20" S="432" T="304" R="167" G="181" B="205" A="255"/>
|
||||
<Vtx X="41" Y="32" Z="23" S="496" T="496" R="146" G="255" B="193" A="255"/>
|
||||
<Vtx X="34" Y="40" Z="24" S="112" T="304" R="183" G="169" B="200" A="255"/>
|
||||
<Vtx X="39" Y="40" Z="15" S="304" T="112" R="170" G="169" B="221" A="255"/>
|
||||
<Vtx X="34" Y="46" Z="19" S="112" T="112" R="188" G="156" B="218" A="255"/>
|
||||
<Vtx X="30" Y="46" Z="20" S="-16" T="176" R="177" G="161" B="225" A="255"/>
|
||||
<Vtx X="34" Y="46" Z="14" S="176" T="-16" R="190" G="160" B="205" A="255"/>
|
||||
<Vtx X="29" Y="61" Z="0" S="304" T="432" R="178" G="163" B="220" A="255"/>
|
||||
<Vtx X="25" Y="63" Z="3" S="432" T="304" R="178" G="163" B="220" A="255"/>
|
||||
<Vtx X="24" Y="62" Z="-3" S="496" T="496" R="211" G="142" B="31" A="255"/>
|
||||
<Vtx X="31" Y="55" Z="3" S="112" T="304" R="166" G="178" B="214" A="255"/>
|
||||
<Vtx X="23" Y="59" Z="8" S="304" T="112" R="184" G="167" B="201" A="255"/>
|
||||
<Vtx X="29" Y="55" Z="11" S="112" T="112" R="171" G="186" B="192" A="255"/>
|
||||
<Vtx X="31" Y="51" Z="10" S="-16" T="176" R="180" G="177" B="193" A="255"/>
|
||||
<Vtx X="26" Y="54" Z="14" S="176" T="-16" R="165" G="184" B="205" A="255"/>
|
||||
<Vtx X="23" Y="48" Z="34" S="304" T="432" R="179" G="174" B="197" A="255"/>
|
||||
<Vtx X="27" Y="44" Z="34" S="432" T="304" R="179" G="174" B="197" A="255"/>
|
||||
<Vtx X="21" Y="43" Z="36" S="496" T="496" R="221" G="211" B="143" A="255"/>
|
||||
<Vtx X="22" Y="50" Z="27" S="112" T="304" R="183" G="162" B="213" A="255"/>
|
||||
<Vtx X="22" Y="50" Z="27" S="112" T="304" R="183" G="162" B="213" A="255"/>
|
||||
<Vtx X="29" Y="43" Z="27" S="304" T="112" R="166" G="179" B="211" A="255"/>
|
||||
<Vtx X="27" Y="44" Z="34" S="432" T="304" R="179" G="174" B="197" A="255"/>
|
||||
<Vtx X="29" Y="49" Z="22" S="112" T="112" R="168" G="167" B="232" A="255"/>
|
||||
<Vtx X="25" Y="51" Z="20" S="-16" T="176" R="164" G="176" B="221" A="255"/>
|
||||
<Vtx X="27" Y="48" Z="14" S="-16" T="-16" R="174" G="171" B="209" A="255"/>
|
||||
<Vtx X="30" Y="46" Z="20" S="176" T="-16" R="177" G="161" B="225" A="255"/>
|
||||
<Vtx X="-25" Y="44" Z="36" S="304" T="432" R="179" G="82" B="59" A="255"/>
|
||||
<Vtx X="-20" Y="43" Z="38" S="496" T="496" R="221" G="45" B="113" A="255"/>
|
||||
<Vtx X="-22" Y="48" Z="36" S="432" T="304" R="179" G="82" B="59" A="255"/>
|
||||
<Vtx X="-28" Y="43" Z="29" S="112" T="304" R="166" G="77" B="45" A="255"/>
|
||||
<Vtx X="-21" Y="50" Z="29" S="304" T="112" R="183" G="95" B="43" A="255"/>
|
||||
<Vtx X="-27" Y="49" Z="25" S="112" T="112" R="169" G="89" B="26" A="255"/>
|
||||
<Vtx X="-24" Y="51" Z="22" S="176" T="-16" R="163" G="79" B="35" A="255"/>
|
||||
<Vtx X="-26" Y="48" Z="16" S="-16" T="-16" R="175" G="85" B="47" A="255"/>
|
||||
<Vtx X="-29" Y="46" Z="22" S="-16" T="176" R="179" G="96" B="32" A="255"/>
|
||||
<Vtx X="-24" Y="63" Z="4" S="304" T="432" R="178" G="93" B="36" A="255"/>
|
||||
<Vtx X="-23" Y="62" Z="-1" S="496" T="496" R="211" G="114" B="225" A="255"/>
|
||||
<Vtx X="-28" Y="61" Z="2" S="432" T="304" R="178" G="93" B="36" A="255"/>
|
||||
<Vtx X="-22" Y="59" Z="10" S="112" T="304" R="184" G="89" B="55" A="255"/>
|
||||
<Vtx X="-30" Y="55" Z="5" S="304" T="112" R="166" G="78" B="43" A="255"/>
|
||||
<Vtx X="-28" Y="55" Z="13" S="112" T="112" R="172" G="70" B="65" A="255"/>
|
||||
<Vtx X="-30" Y="51" Z="12" S="176" T="-16" R="180" G="80" B="62" A="255"/>
|
||||
<Vtx X="-24" Y="54" Z="15" S="-16" T="176" R="166" G="72" B="53" A="255"/>
|
||||
<Vtx X="-42" Y="37" Z="22" S="304" T="432" R="167" G="75" B="51" A="255"/>
|
||||
<Vtx X="-40" Y="32" Z="25" S="496" T="496" R="146" G="1" B="63" A="255"/>
|
||||
<Vtx X="-39" Y="37" Z="27" S="432" T="304" R="167" G="75" B="51" A="255"/>
|
||||
<Vtx X="-38" Y="40" Z="17" S="112" T="304" R="171" G="87" B="35" A="255"/>
|
||||
<Vtx X="-33" Y="40" Z="26" S="304" T="112" R="183" G="87" B="57" A="255"/>
|
||||
<Vtx X="-33" Y="46" Z="21" S="112" T="112" R="189" G="100" B="40" A="255"/>
|
||||
<Vtx X="-29" Y="46" Z="22" S="176" T="-16" R="179" G="96" B="32" A="255"/>
|
||||
<Vtx X="-33" Y="46" Z="16" S="-16" T="176" R="190" G="95" B="52" A="255"/>
|
||||
<Vtx X="-14" Y="61" Z="25" S="304" T="432" R="186" G="93" B="50" A="255"/>
|
||||
<Vtx X="-9" Y="62" Z="22" S="496" T="496" R="4" G="114" B="55" A="255"/>
|
||||
<Vtx X="-15" Y="63" Z="20" S="432" T="304" R="186" G="93" B="50" A="255"/>
|
||||
<Vtx X="-18" Y="55" Z="25" S="112" T="304" R="174" G="78" B="57" A="255"/>
|
||||
<Vtx X="-19" Y="59" Z="16" S="304" T="112" R="172" G="89" B="35" A="255"/>
|
||||
<Vtx X="-24" Y="55" Z="20" S="112" T="112" R="158" G="70" B="42" A="255"/>
|
||||
<Vtx X="-24" Y="54" Z="15" S="176" T="-16" R="166" G="72" B="53" A="255"/>
|
||||
<Vtx X="-26" Y="48" Z="16" S="-16" T="-16" R="175" G="85" B="47" A="255"/>
|
||||
<Vtx X="-24" Y="51" Z="22" S="-16" T="176" R="163" G="79" B="35" A="255"/>
|
||||
<Vtx X="-41" Y="48" Z="3" S="304" T="432" R="166" G="82" B="37" A="255"/>
|
||||
<Vtx X="-42" Y="43" Z="0" S="496" T="496" R="140" G="45" B="230" A="255"/>
|
||||
<Vtx X="-43" Y="44" Z="6" S="432" T="304" R="166" G="82" B="37" A="255"/>
|
||||
<Vtx X="-34" Y="50" Z="6" S="112" T="304" R="182" G="94" B="42" A="255"/>
|
||||
<Vtx X="-38" Y="43" Z="11" S="304" T="112" R="172" G="77" B="56" A="255"/>
|
||||
<Vtx X="-34" Y="49" Z="14" S="112" T="112" R="191" G="89" B="64" A="255"/>
|
||||
<Vtx X="-33" Y="46" Z="16" S="176" T="-16" R="190" G="95" B="52" A="255"/>
|
||||
<Vtx X="-30" Y="51" Z="12" S="-16" T="176" R="180" G="80" B="62" A="255"/>
|
||||
<Vtx X="-18" Y="44" Z="-40" S="304" T="432" R="243" G="82" B="160" A="255"/>
|
||||
<Vtx X="-23" Y="43" Z="-37" S="496" T="496" R="175" G="45" B="169" A="255"/>
|
||||
<Vtx X="-20" Y="48" Z="-37" S="432" T="304" R="243" G="82" B="160" A="255"/>
|
||||
<Vtx X="-11" Y="43" Z="-39" S="112" T="304" R="6" G="77" B="155" A="255"/>
|
||||
<Vtx X="-14" Y="50" Z="-33" S="304" T="112" R="255" G="95" B="171" A="255"/>
|
||||
<Vtx X="-8" Y="49" Z="-36" S="112" T="112" R="21" G="89" B="168" A="255"/>
|
||||
<Vtx X="-7" Y="51" Z="-32" S="176" T="-16" R="17" G="79" B="158" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-31" S="-16" T="-16" R="0" G="85" B="162" A="255"/>
|
||||
<Vtx X="-5" Y="46" Z="-37" S="-16" T="176" R="11" G="96" B="174" A="255"/>
|
||||
<Vtx X="8" Y="63" Z="-23" S="304" T="432" R="8" G="93" B="170" A="255"/>
|
||||
<Vtx X="12" Y="62" Z="-19" S="496" T="496" R="50" G="114" B="232" A="255"/>
|
||||
<Vtx X="12" Y="61" Z="-25" S="432" T="304" R="8" G="93" B="170" A="255"/>
|
||||
<Vtx X="2" Y="59" Z="-24" S="112" T="304" R="245" G="89" B="166" A="255"/>
|
||||
<Vtx X="10" Y="55" Z="-28" S="304" T="112" R="8" G="78" B="156" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-31" S="112" T="112" R="242" G="69" B="151" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-31" S="112" T="112" R="242" G="69" B="151" A="255"/>
|
||||
<Vtx X="10" Y="55" Z="-28" S="304" T="112" R="8" G="78" B="156" A="255"/>
|
||||
<Vtx X="5" Y="51" Z="-32" S="176" T="-16" R="240" G="80" B="159" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-31" S="-16" T="-16" R="0" G="85" B="162" A="255"/>
|
||||
<Vtx X="-1" Y="54" Z="-29" S="-16" T="176" R="255" G="72" B="152" A="255"/>
|
||||
<Vtx X="2" Y="59" Z="-24" S="112" T="304" R="245" G="89" B="166" A="255"/>
|
||||
<Vtx X="2" Y="37" Z="-47" S="304" T="432" R="0" G="75" B="154" A="255"/>
|
||||
<Vtx X="-1" Y="32" Z="-47" S="496" T="496" R="0" G="1" B="129" A="255"/>
|
||||
<Vtx X="-4" Y="37" Z="-47" S="432" T="304" R="0" G="75" B="154" A="255"/>
|
||||
<Vtx X="4" Y="40" Z="-42" S="112" T="304" R="12" G="87" B="165" A="255"/>
|
||||
<Vtx X="-6" Y="40" Z="-42" S="304" T="112" R="244" G="87" B="164" A="255"/>
|
||||
<Vtx X="-1" Y="46" Z="-39" S="112" T="112" R="255" G="100" B="178" A="255"/>
|
||||
<Vtx X="-5" Y="46" Z="-37" S="176" T="-16" R="11" G="96" B="174" A="255"/>
|
||||
<Vtx X="3" Y="46" Z="-37" S="-16" T="176" R="244" G="95" B="172" A="255"/>
|
||||
<Vtx X="-15" Y="61" Z="-25" S="304" T="432" R="248" G="93" B="170" A="255"/>
|
||||
<Vtx X="-15" Y="62" Z="-19" S="496" T="496" R="206" G="114" B="232" A="255"/>
|
||||
<Vtx X="-10" Y="63" Z="-23" S="432" T="304" R="248" G="93" B="170" A="255"/>
|
||||
<Vtx X="-12" Y="55" Z="-28" S="112" T="304" R="248" G="78" B="156" A="255"/>
|
||||
<Vtx X="-4" Y="59" Z="-24" S="304" T="112" R="11" G="89" B="166" A="255"/>
|
||||
<Vtx X="-5" Y="55" Z="-31" S="112" T="112" R="13" G="70" B="151" A="255"/>
|
||||
<Vtx X="-1" Y="54" Z="-29" S="176" T="-16" R="255" G="72" B="152" A="255"/>
|
||||
<Vtx X="-7" Y="51" Z="-32" S="-16" T="176" R="17" G="79" B="158" A="255"/>
|
||||
<Vtx X="18" Y="48" Z="-37" S="304" T="432" R="13" G="82" B="160" A="255"/>
|
||||
<Vtx X="21" Y="43" Z="-37" S="496" T="496" R="81" G="45" B="169" A="255"/>
|
||||
<Vtx X="16" Y="44" Z="-40" S="432" T="304" R="13" G="82" B="160" A="255"/>
|
||||
<Vtx X="12" Y="50" Z="-33" S="112" T="304" R="1" G="94" B="171" A="255"/>
|
||||
<Vtx X="9" Y="43" Z="-39" S="304" T="112" R="250" G="77" B="155" A="255"/>
|
||||
<Vtx X="5" Y="49" Z="-36" S="112" T="112" R="233" G="89" B="168" A="255"/>
|
||||
<Vtx X="3" Y="46" Z="-37" S="176" T="-16" R="244" G="95" B="172" A="255"/>
|
||||
<Vtx X="5" Y="51" Z="-32" S="-16" T="176" R="240" G="80" B="159" A="255"/>
|
||||
<Vtx X="44" Y="44" Z="4" S="304" T="432" R="90" G="82" B="37" A="255"/>
|
||||
<Vtx X="43" Y="43" Z="-2" S="496" T="496" R="116" G="45" B="230" A="255"/>
|
||||
<Vtx X="42" Y="48" Z="1" S="432" T="304" R="90" G="82" B="37" A="255"/>
|
||||
<Vtx X="39" Y="43" Z="10" S="112" T="304" R="84" G="77" B="56" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="4" S="304" T="112" R="74" G="95" B="41" A="255"/>
|
||||
<Vtx X="35" Y="49" Z="11" S="112" T="112" R="66" G="89" B="62" A="255"/>
|
||||
<Vtx X="31" Y="51" Z="10" S="176" T="-16" R="76" G="79" B="63" A="255"/>
|
||||
<Vtx X="27" Y="48" Z="14" S="-16" T="-16" R="82" G="85" B="47" A="255"/>
|
||||
<Vtx X="34" Y="46" Z="14" S="-16" T="176" R="66" G="96" B="51" A="255"/>
|
||||
<Vtx X="16" Y="63" Z="18" S="304" T="432" R="70" G="93" B="50" A="255"/>
|
||||
<Vtx X="11" Y="62" Z="20" S="496" T="496" R="252" G="114" B="55" A="255"/>
|
||||
<Vtx X="15" Y="61" Z="23" S="432" T="304" R="70" G="93" B="50" A="255"/>
|
||||
<Vtx X="20" Y="59" Z="14" S="112" T="304" R="84" G="89" B="35" A="255"/>
|
||||
<Vtx X="19" Y="55" Z="23" S="304" T="112" R="82" G="78" B="57" A="255"/>
|
||||
<Vtx X="25" Y="55" Z="18" S="112" T="112" R="98" G="69" B="40" A="255"/>
|
||||
<Vtx X="25" Y="51" Z="20" S="176" T="-16" R="92" G="80" B="35" A="255"/>
|
||||
<Vtx X="26" Y="54" Z="14" S="-16" T="176" R="91" G="72" B="51" A="255"/>
|
||||
<Vtx X="40" Y="37" Z="25" S="304" T="432" R="89" G="75" B="51" A="255"/>
|
||||
<Vtx X="41" Y="32" Z="23" S="496" T="496" R="110" G="1" B="63" A="255"/>
|
||||
<Vtx X="43" Y="37" Z="20" S="432" T="304" R="89" G="75" B="51" A="255"/>
|
||||
<Vtx X="34" Y="40" Z="24" S="112" T="304" R="73" G="87" B="56" A="255"/>
|
||||
<Vtx X="39" Y="40" Z="15" S="304" T="112" R="86" G="87" B="35" A="255"/>
|
||||
<Vtx X="34" Y="46" Z="19" S="112" T="112" R="68" G="100" B="38" A="255"/>
|
||||
<Vtx X="34" Y="46" Z="14" S="176" T="-16" R="66" G="96" B="51" A="255"/>
|
||||
<Vtx X="30" Y="46" Z="20" S="-16" T="176" R="79" G="95" B="31" A="255"/>
|
||||
<Vtx X="29" Y="61" Z="0" S="304" T="432" R="78" G="93" B="36" A="255"/>
|
||||
<Vtx X="24" Y="62" Z="-3" S="496" T="496" R="45" G="114" B="225" A="255"/>
|
||||
<Vtx X="25" Y="63" Z="3" S="432" T="304" R="78" G="93" B="36" A="255"/>
|
||||
<Vtx X="31" Y="55" Z="3" S="112" T="304" R="90" G="78" B="42" A="255"/>
|
||||
<Vtx X="23" Y="59" Z="8" S="304" T="112" R="72" G="89" B="55" A="255"/>
|
||||
<Vtx X="29" Y="55" Z="11" S="112" T="112" R="85" G="70" B="64" A="255"/>
|
||||
<Vtx X="26" Y="54" Z="14" S="176" T="-16" R="91" G="72" B="51" A="255"/>
|
||||
<Vtx X="27" Y="48" Z="14" S="-16" T="-16" R="82" G="85" B="47" A="255"/>
|
||||
<Vtx X="31" Y="51" Z="10" S="-16" T="176" R="76" G="79" B="63" A="255"/>
|
||||
<Vtx X="29" Y="55" Z="11" S="112" T="112" R="85" G="70" B="64" A="255"/>
|
||||
<Vtx X="31" Y="55" Z="3" S="112" T="304" R="90" G="78" B="42" A="255"/>
|
||||
<Vtx X="23" Y="48" Z="34" S="304" T="432" R="77" G="82" B="59" A="255"/>
|
||||
<Vtx X="21" Y="43" Z="36" S="496" T="496" R="35" G="45" B="113" A="255"/>
|
||||
<Vtx X="27" Y="44" Z="34" S="432" T="304" R="77" G="82" B="59" A="255"/>
|
||||
<Vtx X="22" Y="50" Z="27" S="112" T="304" R="73" G="94" B="43" A="255"/>
|
||||
<Vtx X="29" Y="43" Z="27" S="304" T="112" R="90" G="77" B="45" A="255"/>
|
||||
<Vtx X="29" Y="49" Z="22" S="112" T="112" R="88" G="89" B="24" A="255"/>
|
||||
<Vtx X="30" Y="46" Z="20" S="176" T="-16" R="79" G="95" B="31" A="255"/>
|
||||
<Vtx X="25" Y="51" Z="20" S="-16" T="176" R="92" G="80" B="35" A="255"/>
|
||||
</Vertex>
|
||||
@@ -0,0 +1,268 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-38" Y="39" Z="35" S="304" T="432" R="80" G="167" B="214" A="255"/>
|
||||
<Vtx X="-33" Y="42" Z="38" S="432" T="304" R="80" G="167" B="214" A="255"/>
|
||||
<Vtx X="-36" Y="33" Z="43" S="496" T="496" R="84" G="191" B="187" A="255"/>
|
||||
<Vtx X="-37" Y="42" Z="25" S="112" T="304" R="67" G="153" B="223" A="255"/>
|
||||
<Vtx X="-28" Y="47" Z="32" S="304" T="112" R="83" G="163" B="234" A="255"/>
|
||||
<Vtx X="-30" Y="46" Z="23" S="112" T="112" R="74" G="157" B="229" A="255"/>
|
||||
<Vtx X="-34" Y="47" Z="21" S="-16" T="176" R="48" G="142" B="228" A="255"/>
|
||||
<Vtx X="-27" Y="48" Z="17" S="-16" T="-16" R="82" G="171" B="209" A="255"/>
|
||||
<Vtx X="-28" Y="50" Z="24" S="176" T="-16" R="88" G="165" B="0" A="255"/>
|
||||
<Vtx X="-17" Y="69" Z="15" S="304" T="432" R="85" G="175" B="207" A="255"/>
|
||||
<Vtx X="-20" Y="69" Z="9" S="432" T="304" R="85" G="175" B="207" A="255"/>
|
||||
<Vtx X="-12" Y="75" Z="8" S="496" T="496" R="61" G="150" B="221" A="255"/>
|
||||
<Vtx X="-20" Y="61" Z="20" S="112" T="304" R="99" G="190" B="211" A="255"/>
|
||||
<Vtx X="-26" Y="61" Z="9" S="304" T="112" R="88" G="190" B="193" A="255"/>
|
||||
<Vtx X="-25" Y="55" Z="16" S="112" T="112" R="95" G="191" B="201" A="255"/>
|
||||
<Vtx X="-25" Y="55" Z="20" S="-16" T="176" R="111" G="203" B="224" A="255"/>
|
||||
<Vtx X="-29" Y="55" Z="14" S="176" T="-16" R="83" G="203" B="176" A="255"/>
|
||||
<Vtx X="-48" Y="42" Z="12" S="304" T="432" R="76" G="167" B="208" A="255"/>
|
||||
<Vtx X="-48" Y="39" Z="17" S="432" T="304" R="76" G="167" B="208" A="255"/>
|
||||
<Vtx X="-54" Y="33" Z="11" S="496" T="496" R="102" G="191" B="218" A="255"/>
|
||||
<Vtx X="-40" Y="47" Z="10" S="112" T="304" R="60" G="163" B="195" A="255"/>
|
||||
<Vtx X="-39" Y="42" Z="21" S="304" T="112" R="62" G="153" B="215" A="255"/>
|
||||
<Vtx X="-34" Y="46" Z="16" S="112" T="112" R="61" G="157" B="205" A="255"/>
|
||||
<Vtx X="-34" Y="50" Z="14" S="-16" T="176" R="44" G="165" B="180" A="255"/>
|
||||
<Vtx X="-34" Y="47" Z="21" S="176" T="-16" R="48" G="142" B="228" A="255"/>
|
||||
<Vtx X="-19" Y="56" Z="37" S="304" T="432" R="85" G="172" B="214" A="255"/>
|
||||
<Vtx X="-16" Y="60" Z="33" S="432" T="304" R="85" G="172" B="214" A="255"/>
|
||||
<Vtx X="-10" Y="59" Z="41" S="496" T="496" R="59" G="166" B="189" A="255"/>
|
||||
<Vtx X="-24" Y="50" Z="31" S="112" T="304" R="91" G="170" B="234" A="255"/>
|
||||
<Vtx X="-19" Y="59" Z="24" S="304" T="112" R="99" G="185" B="221" A="255"/>
|
||||
<Vtx X="-25" Y="52" Z="23" S="112" T="112" R="95" G="176" B="230" A="255"/>
|
||||
<Vtx X="-28" Y="50" Z="24" S="-16" T="176" R="88" G="165" B="0" A="255"/>
|
||||
<Vtx X="-27" Y="48" Z="17" S="-16" T="-16" R="82" G="171" B="209" A="255"/>
|
||||
<Vtx X="-25" Y="55" Z="20" S="176" T="-16" R="111" G="203" B="224" A="255"/>
|
||||
<Vtx X="-25" Y="52" Z="23" S="112" T="112" R="95" G="176" B="230" A="255"/>
|
||||
<Vtx X="-19" Y="59" Z="24" S="304" T="112" R="99" G="185" B="221" A="255"/>
|
||||
<Vtx X="-36" Y="60" Z="-1" S="304" T="432" R="79" G="172" B="203" A="255"/>
|
||||
<Vtx X="-40" Y="56" Z="-1" S="432" T="304" R="79" G="172" B="203" A="255"/>
|
||||
<Vtx X="-39" Y="59" Z="-10" S="496" T="496" R="88" G="166" B="239" A="255"/>
|
||||
<Vtx X="-29" Y="59" Z="7" S="112" T="304" R="80" G="185" B="188" A="255"/>
|
||||
<Vtx X="-38" Y="50" Z="7" S="304" T="112" R="64" G="170" B="189" A="255"/>
|
||||
<Vtx X="-31" Y="52" Z="12" S="112" T="112" R="70" G="176" B="186" A="255"/>
|
||||
<Vtx X="-29" Y="55" Z="14" S="-16" T="176" R="83" G="203" B="176" A="255"/>
|
||||
<Vtx X="-34" Y="50" Z="14" S="176" T="-16" R="44" G="165" B="180" A="255"/>
|
||||
<Vtx X="-11" Y="39" Z="-50" S="304" T="432" R="252" G="167" B="90" A="255"/>
|
||||
<Vtx X="-16" Y="42" Z="-48" S="432" T="304" R="252" G="167" B="90" A="255"/>
|
||||
<Vtx X="-19" Y="33" Z="-52" S="496" T="496" R="18" G="191" B="108" A="255"/>
|
||||
<Vtx X="-3" Y="42" Z="-45" S="112" T="304" R="251" G="153" B="74" A="255"/>
|
||||
<Vtx X="-13" Y="47" Z="-40" S="304" T="112" R="233" G="163" B="83" A="255"/>
|
||||
<Vtx X="-5" Y="46" Z="-38" S="112" T="112" R="242" G="157" B="78" A="255"/>
|
||||
<Vtx X="-1" Y="47" Z="-40" S="-16" T="176" R="0" G="142" B="55" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-32" S="-16" T="-16" R="0" G="171" B="94" A="255"/>
|
||||
<Vtx X="-7" Y="50" Z="-37" S="176" T="-16" R="212" G="165" B="76" A="255"/>
|
||||
<Vtx X="-4" Y="69" Z="-22" S="304" T="432" R="0" G="175" B="98" A="255"/>
|
||||
<Vtx X="2" Y="69" Z="-22" S="432" T="304" R="0" G="175" B="98" A="255"/>
|
||||
<Vtx X="-1" Y="75" Z="-14" S="496" T="496" R="0" G="150" B="70" A="255"/>
|
||||
<Vtx X="-7" Y="61" Z="-27" S="112" T="304" R="245" G="190" B="108" A="255"/>
|
||||
<Vtx X="5" Y="61" Z="-27" S="304" T="112" R="11" G="190" B="108" A="255"/>
|
||||
<Vtx X="-1" Y="55" Z="-30" S="112" T="112" R="0" G="191" B="109" A="255"/>
|
||||
<Vtx X="-5" Y="55" Z="-32" S="-16" T="176" R="228" G="203" B="112" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-32" S="176" T="-16" R="28" G="203" B="112" A="255"/>
|
||||
<Vtx X="14" Y="42" Z="-48" S="304" T="432" R="4" G="167" B="90" A="255"/>
|
||||
<Vtx X="9" Y="39" Z="-50" S="432" T="304" R="4" G="167" B="90" A="255"/>
|
||||
<Vtx X="17" Y="33" Z="-52" S="496" T="496" R="238" G="191" B="108" A="255"/>
|
||||
<Vtx X="11" Y="47" Z="-40" S="112" T="304" R="23" G="163" B="83" A="255"/>
|
||||
<Vtx X="9" Y="39" Z="-50" S="432" T="304" R="4" G="167" B="90" A="255"/>
|
||||
<Vtx X="14" Y="42" Z="-48" S="304" T="432" R="4" G="167" B="90" A="255"/>
|
||||
<Vtx X="1" Y="42" Z="-45" S="304" T="112" R="5" G="153" B="74" A="255"/>
|
||||
<Vtx X="3" Y="46" Z="-38" S="112" T="112" R="14" G="157" B="78" A="255"/>
|
||||
<Vtx X="5" Y="50" Z="-37" S="-16" T="176" R="44" G="165" B="76" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-32" S="-16" T="-16" R="0" G="171" B="94" A="255"/>
|
||||
<Vtx X="-1" Y="47" Z="-40" S="176" T="-16" R="0" G="142" B="55" A="255"/>
|
||||
<Vtx X="-23" Y="56" Z="-35" S="304" T="432" R="250" G="172" B="95" A="255"/>
|
||||
<Vtx X="-21" Y="60" Z="-31" S="432" T="304" R="250" G="172" B="95" A="255"/>
|
||||
<Vtx X="-31" Y="59" Z="-29" S="496" T="496" R="29" G="166" B="85" A="255"/>
|
||||
<Vtx X="-15" Y="50" Z="-37" S="112" T="304" R="230" G="170" B="90" A="255"/>
|
||||
<Vtx X="-11" Y="59" Z="-29" S="304" T="112" R="237" G="185" B="104" A="255"/>
|
||||
<Vtx X="-7" Y="52" Z="-33" S="112" T="112" R="231" G="176" B="96" A="255"/>
|
||||
<Vtx X="-7" Y="50" Z="-37" S="-16" T="176" R="212" G="165" B="76" A="255"/>
|
||||
<Vtx X="-5" Y="55" Z="-32" S="176" T="-16" R="228" G="203" B="112" A="255"/>
|
||||
<Vtx X="19" Y="60" Z="-31" S="304" T="432" R="6" G="172" B="95" A="255"/>
|
||||
<Vtx X="21" Y="56" Z="-35" S="432" T="304" R="6" G="172" B="95" A="255"/>
|
||||
<Vtx X="28" Y="59" Z="-29" S="496" T="496" R="227" G="166" B="85" A="255"/>
|
||||
<Vtx X="9" Y="59" Z="-29" S="112" T="304" R="19" G="185" B="104" A="255"/>
|
||||
<Vtx X="13" Y="50" Z="-37" S="304" T="112" R="26" G="170" B="90" A="255"/>
|
||||
<Vtx X="5" Y="52" Z="-33" S="112" T="112" R="25" G="176" B="96" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-32" S="-16" T="176" R="28" G="203" B="112" A="255"/>
|
||||
<Vtx X="5" Y="50" Z="-37" S="176" T="-16" R="44" G="165" B="76" A="255"/>
|
||||
<Vtx X="49" Y="39" Z="15" S="304" T="432" R="180" G="167" B="208" A="255"/>
|
||||
<Vtx X="50" Y="42" Z="10" S="432" T="304" R="180" G="167" B="208" A="255"/>
|
||||
<Vtx X="55" Y="33" Z="9" S="496" T="496" R="154" G="191" B="218" A="255"/>
|
||||
<Vtx X="40" Y="42" Z="19" S="112" T="304" R="194" G="153" B="215" A="255"/>
|
||||
<Vtx X="41" Y="47" Z="8" S="304" T="112" R="196" G="163" B="195" A="255"/>
|
||||
<Vtx X="35" Y="46" Z="15" S="112" T="112" R="195" G="157" B="205" A="255"/>
|
||||
<Vtx X="35" Y="47" Z="19" S="-16" T="176" R="208" G="142" B="228" A="255"/>
|
||||
<Vtx X="28" Y="48" Z="15" S="-16" T="-16" R="174" G="171" B="209" A="255"/>
|
||||
<Vtx X="28" Y="48" Z="15" S="-16" T="-16" R="174" G="171" B="209" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="12" S="176" T="-16" R="212" G="165" B="180" A="255"/>
|
||||
<Vtx X="35" Y="46" Z="15" S="112" T="112" R="195" G="157" B="205" A="255"/>
|
||||
<Vtx X="41" Y="47" Z="8" S="304" T="112" R="196" G="163" B="195" A="255"/>
|
||||
<Vtx X="21" Y="69" Z="8" S="304" T="432" R="171" G="175" B="207" A="255"/>
|
||||
<Vtx X="18" Y="69" Z="13" S="432" T="304" R="171" G="175" B="207" A="255"/>
|
||||
<Vtx X="13" Y="75" Z="6" S="496" T="496" R="195" G="150" B="221" A="255"/>
|
||||
<Vtx X="27" Y="61" Z="7" S="112" T="304" R="168" G="190" B="193" A="255"/>
|
||||
<Vtx X="21" Y="61" Z="18" S="304" T="112" R="157" G="190" B="211" A="255"/>
|
||||
<Vtx X="26" Y="55" Z="14" S="112" T="112" R="161" G="191" B="201" A="255"/>
|
||||
<Vtx X="30" Y="55" Z="12" S="-16" T="176" R="173" G="203" B="176" A="255"/>
|
||||
<Vtx X="26" Y="55" Z="18" S="176" T="-16" R="145" G="203" B="224" A="255"/>
|
||||
<Vtx X="34" Y="42" Z="36" S="304" T="432" R="176" G="167" B="214" A="255"/>
|
||||
<Vtx X="39" Y="39" Z="33" S="432" T="304" R="176" G="167" B="214" A="255"/>
|
||||
<Vtx X="37" Y="33" Z="41" S="496" T="496" R="172" G="191" B="187" A="255"/>
|
||||
<Vtx X="29" Y="47" Z="30" S="112" T="304" R="173" G="163" B="234" A="255"/>
|
||||
<Vtx X="38" Y="42" Z="23" S="304" T="112" R="189" G="153" B="223" A="255"/>
|
||||
<Vtx X="31" Y="46" Z="21" S="112" T="112" R="182" G="157" B="229" A="255"/>
|
||||
<Vtx X="29" Y="50" Z="23" S="-16" T="176" R="168" G="165" B="0" A="255"/>
|
||||
<Vtx X="35" Y="47" Z="19" S="176" T="-16" R="208" G="142" B="228" A="255"/>
|
||||
<Vtx X="41" Y="56" Z="-2" S="304" T="432" R="177" G="172" B="203" A="255"/>
|
||||
<Vtx X="37" Y="60" Z="-3" S="432" T="304" R="177" G="172" B="203" A="255"/>
|
||||
<Vtx X="40" Y="59" Z="-12" S="496" T="496" R="168" G="166" B="239" A="255"/>
|
||||
<Vtx X="39" Y="50" Z="6" S="112" T="304" R="192" G="170" B="189" A="255"/>
|
||||
<Vtx X="30" Y="59" Z="5" S="304" T="112" R="176" G="185" B="188" A="255"/>
|
||||
<Vtx X="32" Y="52" Z="10" S="112" T="112" R="186" G="176" B="186" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="12" S="-16" T="176" R="212" G="165" B="180" A="255"/>
|
||||
<Vtx X="30" Y="55" Z="12" S="176" T="-16" R="173" G="203" B="176" A="255"/>
|
||||
<Vtx X="17" Y="60" Z="31" S="304" T="432" R="171" G="172" B="214" A="255"/>
|
||||
<Vtx X="20" Y="56" Z="35" S="432" T="304" R="171" G="172" B="214" A="255"/>
|
||||
<Vtx X="11" Y="59" Z="39" S="496" T="496" R="197" G="166" B="189" A="255"/>
|
||||
<Vtx X="21" Y="59" Z="22" S="112" T="304" R="157" G="185" B="221" A="255"/>
|
||||
<Vtx X="21" Y="59" Z="22" S="112" T="304" R="157" G="185" B="221" A="255"/>
|
||||
<Vtx X="26" Y="50" Z="29" S="304" T="112" R="165" G="170" B="234" A="255"/>
|
||||
<Vtx X="20" Y="56" Z="35" S="432" T="304" R="171" G="172" B="214" A="255"/>
|
||||
<Vtx X="26" Y="52" Z="21" S="112" T="112" R="161" G="176" B="230" A="255"/>
|
||||
<Vtx X="26" Y="55" Z="18" S="-16" T="176" R="145" G="203" B="224" A="255"/>
|
||||
<Vtx X="28" Y="48" Z="15" S="-16" T="-16" R="174" G="171" B="209" A="255"/>
|
||||
<Vtx X="29" Y="50" Z="23" S="176" T="-16" R="168" G="165" B="0" A="255"/>
|
||||
<Vtx X="-38" Y="39" Z="35" S="304" T="432" R="176" G="89" B="42" A="255"/>
|
||||
<Vtx X="-36" Y="33" Z="43" S="496" T="496" R="172" G="65" B="69" A="255"/>
|
||||
<Vtx X="-33" Y="42" Z="38" S="432" T="304" R="176" G="89" B="42" A="255"/>
|
||||
<Vtx X="-37" Y="42" Z="25" S="112" T="304" R="189" G="103" B="33" A="255"/>
|
||||
<Vtx X="-28" Y="47" Z="32" S="304" T="112" R="173" G="93" B="22" A="255"/>
|
||||
<Vtx X="-30" Y="46" Z="23" S="112" T="112" R="182" G="99" B="27" A="255"/>
|
||||
<Vtx X="-28" Y="50" Z="24" S="176" T="-16" R="168" G="91" B="0" A="255"/>
|
||||
<Vtx X="-27" Y="48" Z="17" S="-16" T="-16" R="174" G="85" B="47" A="255"/>
|
||||
<Vtx X="-34" Y="47" Z="21" S="-16" T="176" R="208" G="114" B="28" A="255"/>
|
||||
<Vtx X="-17" Y="69" Z="15" S="304" T="432" R="171" G="81" B="49" A="255"/>
|
||||
<Vtx X="-12" Y="75" Z="8" S="496" T="496" R="195" G="106" B="35" A="255"/>
|
||||
<Vtx X="-20" Y="69" Z="9" S="432" T="304" R="171" G="81" B="49" A="255"/>
|
||||
<Vtx X="-20" Y="61" Z="20" S="112" T="304" R="157" G="66" B="45" A="255"/>
|
||||
<Vtx X="-26" Y="61" Z="9" S="304" T="112" R="168" G="66" B="63" A="255"/>
|
||||
<Vtx X="-25" Y="55" Z="16" S="112" T="112" R="161" G="65" B="55" A="255"/>
|
||||
<Vtx X="-29" Y="55" Z="14" S="176" T="-16" R="173" G="53" B="80" A="255"/>
|
||||
<Vtx X="-25" Y="55" Z="20" S="-16" T="176" R="145" G="53" B="32" A="255"/>
|
||||
<Vtx X="-48" Y="42" Z="12" S="304" T="432" R="180" G="89" B="48" A="255"/>
|
||||
<Vtx X="-54" Y="33" Z="11" S="496" T="496" R="154" G="65" B="38" A="255"/>
|
||||
<Vtx X="-48" Y="39" Z="17" S="432" T="304" R="180" G="89" B="48" A="255"/>
|
||||
<Vtx X="-40" Y="47" Z="10" S="112" T="304" R="196" G="93" B="61" A="255"/>
|
||||
<Vtx X="-39" Y="42" Z="21" S="304" T="112" R="194" G="103" B="41" A="255"/>
|
||||
<Vtx X="-34" Y="46" Z="16" S="112" T="112" R="195" G="99" B="51" A="255"/>
|
||||
<Vtx X="-34" Y="47" Z="21" S="176" T="-16" R="208" G="114" B="28" A="255"/>
|
||||
<Vtx X="-34" Y="50" Z="14" S="-16" T="176" R="212" G="91" B="76" A="255"/>
|
||||
<Vtx X="-19" Y="56" Z="37" S="304" T="432" R="171" G="84" B="42" A="255"/>
|
||||
<Vtx X="-10" Y="59" Z="41" S="496" T="496" R="197" G="90" B="67" A="255"/>
|
||||
<Vtx X="-16" Y="60" Z="33" S="432" T="304" R="171" G="84" B="42" A="255"/>
|
||||
<Vtx X="-24" Y="50" Z="31" S="112" T="304" R="165" G="86" B="22" A="255"/>
|
||||
<Vtx X="-19" Y="59" Z="24" S="304" T="112" R="157" G="71" B="35" A="255"/>
|
||||
<Vtx X="-25" Y="52" Z="23" S="112" T="112" R="161" G="80" B="26" A="255"/>
|
||||
<Vtx X="-25" Y="55" Z="20" S="176" T="-16" R="145" G="53" B="32" A="255"/>
|
||||
<Vtx X="-27" Y="48" Z="17" S="-16" T="-16" R="174" G="85" B="47" A="255"/>
|
||||
<Vtx X="-28" Y="50" Z="24" S="-16" T="176" R="168" G="91" B="0" A="255"/>
|
||||
<Vtx X="-36" Y="60" Z="-1" S="304" T="432" R="177" G="84" B="53" A="255"/>
|
||||
<Vtx X="-39" Y="59" Z="-10" S="496" T="496" R="168" G="90" B="17" A="255"/>
|
||||
<Vtx X="-40" Y="56" Z="-1" S="432" T="304" R="177" G="84" B="53" A="255"/>
|
||||
<Vtx X="-29" Y="59" Z="7" S="112" T="304" R="176" G="71" B="68" A="255"/>
|
||||
<Vtx X="-38" Y="50" Z="7" S="304" T="112" R="192" G="86" B="67" A="255"/>
|
||||
<Vtx X="-31" Y="52" Z="12" S="112" T="112" R="186" G="80" B="70" A="255"/>
|
||||
<Vtx X="-34" Y="50" Z="14" S="176" T="-16" R="212" G="91" B="76" A="255"/>
|
||||
<Vtx X="-29" Y="55" Z="14" S="-16" T="176" R="173" G="53" B="80" A="255"/>
|
||||
<Vtx X="-11" Y="39" Z="-50" S="304" T="432" R="4" G="89" B="166" A="255"/>
|
||||
<Vtx X="-19" Y="33" Z="-52" S="496" T="496" R="238" G="65" B="148" A="255"/>
|
||||
<Vtx X="-16" Y="42" Z="-48" S="432" T="304" R="4" G="89" B="166" A="255"/>
|
||||
<Vtx X="-3" Y="42" Z="-45" S="112" T="304" R="5" G="103" B="182" A="255"/>
|
||||
<Vtx X="-13" Y="47" Z="-40" S="304" T="112" R="23" G="93" B="173" A="255"/>
|
||||
<Vtx X="-5" Y="46" Z="-38" S="112" T="112" R="14" G="99" B="178" A="255"/>
|
||||
<Vtx X="-7" Y="50" Z="-37" S="176" T="-16" R="44" G="91" B="180" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-32" S="-16" T="-16" R="0" G="85" B="162" A="255"/>
|
||||
<Vtx X="-1" Y="47" Z="-40" S="-16" T="176" R="0" G="114" B="201" A="255"/>
|
||||
<Vtx X="-4" Y="69" Z="-22" S="304" T="432" R="0" G="81" B="158" A="255"/>
|
||||
<Vtx X="-1" Y="75" Z="-14" S="496" T="496" R="0" G="106" B="186" A="255"/>
|
||||
<Vtx X="2" Y="69" Z="-22" S="432" T="304" R="0" G="81" B="158" A="255"/>
|
||||
<Vtx X="-7" Y="61" Z="-27" S="112" T="304" R="11" G="66" B="148" A="255"/>
|
||||
<Vtx X="5" Y="61" Z="-27" S="304" T="112" R="245" G="66" B="148" A="255"/>
|
||||
<Vtx X="-1" Y="55" Z="-30" S="112" T="112" R="0" G="65" B="147" A="255"/>
|
||||
<Vtx X="-1" Y="55" Z="-30" S="112" T="112" R="0" G="65" B="147" A="255"/>
|
||||
<Vtx X="5" Y="61" Z="-27" S="304" T="112" R="245" G="66" B="148" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-32" S="176" T="-16" R="228" G="53" B="144" A="255"/>
|
||||
<Vtx X="-1" Y="48" Z="-32" S="-16" T="-16" R="0" G="85" B="162" A="255"/>
|
||||
<Vtx X="-5" Y="55" Z="-32" S="-16" T="176" R="28" G="53" B="144" A="255"/>
|
||||
<Vtx X="-7" Y="61" Z="-27" S="112" T="304" R="11" G="66" B="148" A="255"/>
|
||||
<Vtx X="14" Y="42" Z="-48" S="304" T="432" R="252" G="89" B="166" A="255"/>
|
||||
<Vtx X="17" Y="33" Z="-52" S="496" T="496" R="18" G="65" B="148" A="255"/>
|
||||
<Vtx X="9" Y="39" Z="-50" S="432" T="304" R="252" G="89" B="166" A="255"/>
|
||||
<Vtx X="11" Y="47" Z="-40" S="112" T="304" R="233" G="93" B="173" A="255"/>
|
||||
<Vtx X="1" Y="42" Z="-45" S="304" T="112" R="251" G="103" B="182" A="255"/>
|
||||
<Vtx X="3" Y="46" Z="-38" S="112" T="112" R="242" G="99" B="178" A="255"/>
|
||||
<Vtx X="-1" Y="47" Z="-40" S="176" T="-16" R="0" G="114" B="201" A="255"/>
|
||||
<Vtx X="5" Y="50" Z="-37" S="-16" T="176" R="212" G="91" B="180" A="255"/>
|
||||
<Vtx X="-23" Y="56" Z="-35" S="304" T="432" R="6" G="84" B="161" A="255"/>
|
||||
<Vtx X="-31" Y="59" Z="-29" S="496" T="496" R="227" G="90" B="171" A="255"/>
|
||||
<Vtx X="-21" Y="60" Z="-31" S="432" T="304" R="6" G="84" B="161" A="255"/>
|
||||
<Vtx X="-15" Y="50" Z="-37" S="112" T="304" R="26" G="86" B="166" A="255"/>
|
||||
<Vtx X="-11" Y="59" Z="-29" S="304" T="112" R="19" G="71" B="152" A="255"/>
|
||||
<Vtx X="-7" Y="52" Z="-33" S="112" T="112" R="25" G="80" B="160" A="255"/>
|
||||
<Vtx X="-5" Y="55" Z="-32" S="176" T="-16" R="28" G="53" B="144" A="255"/>
|
||||
<Vtx X="-7" Y="50" Z="-37" S="-16" T="176" R="44" G="91" B="180" A="255"/>
|
||||
<Vtx X="19" Y="60" Z="-31" S="304" T="432" R="250" G="84" B="161" A="255"/>
|
||||
<Vtx X="28" Y="59" Z="-29" S="496" T="496" R="29" G="90" B="171" A="255"/>
|
||||
<Vtx X="21" Y="56" Z="-35" S="432" T="304" R="250" G="84" B="161" A="255"/>
|
||||
<Vtx X="9" Y="59" Z="-29" S="112" T="304" R="237" G="71" B="152" A="255"/>
|
||||
<Vtx X="13" Y="50" Z="-37" S="304" T="112" R="230" G="86" B="166" A="255"/>
|
||||
<Vtx X="5" Y="52" Z="-33" S="112" T="112" R="231" G="80" B="160" A="255"/>
|
||||
<Vtx X="5" Y="50" Z="-37" S="176" T="-16" R="212" G="91" B="180" A="255"/>
|
||||
<Vtx X="3" Y="55" Z="-32" S="-16" T="176" R="228" G="53" B="144" A="255"/>
|
||||
<Vtx X="49" Y="39" Z="15" S="304" T="432" R="76" G="89" B="48" A="255"/>
|
||||
<Vtx X="55" Y="33" Z="9" S="496" T="496" R="102" G="65" B="38" A="255"/>
|
||||
<Vtx X="50" Y="42" Z="10" S="432" T="304" R="76" G="89" B="48" A="255"/>
|
||||
<Vtx X="40" Y="42" Z="19" S="112" T="304" R="62" G="103" B="41" A="255"/>
|
||||
<Vtx X="41" Y="47" Z="8" S="304" T="112" R="60" G="93" B="61" A="255"/>
|
||||
<Vtx X="35" Y="46" Z="15" S="112" T="112" R="61" G="99" B="51" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="12" S="176" T="-16" R="44" G="91" B="76" A="255"/>
|
||||
<Vtx X="28" Y="48" Z="15" S="-16" T="-16" R="82" G="85" B="47" A="255"/>
|
||||
<Vtx X="35" Y="47" Z="19" S="-16" T="176" R="48" G="114" B="28" A="255"/>
|
||||
<Vtx X="21" Y="69" Z="8" S="304" T="432" R="85" G="81" B="49" A="255"/>
|
||||
<Vtx X="13" Y="75" Z="6" S="496" T="496" R="61" G="106" B="35" A="255"/>
|
||||
<Vtx X="18" Y="69" Z="13" S="432" T="304" R="85" G="81" B="49" A="255"/>
|
||||
<Vtx X="27" Y="61" Z="7" S="112" T="304" R="88" G="66" B="63" A="255"/>
|
||||
<Vtx X="21" Y="61" Z="18" S="304" T="112" R="99" G="66" B="45" A="255"/>
|
||||
<Vtx X="26" Y="55" Z="14" S="112" T="112" R="95" G="65" B="55" A="255"/>
|
||||
<Vtx X="26" Y="55" Z="18" S="176" T="-16" R="111" G="53" B="32" A="255"/>
|
||||
<Vtx X="30" Y="55" Z="12" S="-16" T="176" R="83" G="53" B="80" A="255"/>
|
||||
<Vtx X="34" Y="42" Z="36" S="304" T="432" R="80" G="89" B="42" A="255"/>
|
||||
<Vtx X="37" Y="33" Z="41" S="496" T="496" R="84" G="65" B="69" A="255"/>
|
||||
<Vtx X="39" Y="39" Z="33" S="432" T="304" R="80" G="89" B="42" A="255"/>
|
||||
<Vtx X="29" Y="47" Z="30" S="112" T="304" R="83" G="93" B="22" A="255"/>
|
||||
<Vtx X="38" Y="42" Z="23" S="304" T="112" R="67" G="103" B="33" A="255"/>
|
||||
<Vtx X="31" Y="46" Z="21" S="112" T="112" R="74" G="99" B="27" A="255"/>
|
||||
<Vtx X="35" Y="47" Z="19" S="176" T="-16" R="48" G="114" B="28" A="255"/>
|
||||
<Vtx X="29" Y="50" Z="23" S="-16" T="176" R="88" G="91" B="0" A="255"/>
|
||||
<Vtx X="41" Y="56" Z="-2" S="304" T="432" R="79" G="84" B="53" A="255"/>
|
||||
<Vtx X="40" Y="59" Z="-12" S="496" T="496" R="88" G="90" B="17" A="255"/>
|
||||
<Vtx X="37" Y="60" Z="-3" S="432" T="304" R="79" G="84" B="53" A="255"/>
|
||||
<Vtx X="39" Y="50" Z="6" S="112" T="304" R="64" G="86" B="67" A="255"/>
|
||||
<Vtx X="30" Y="59" Z="5" S="304" T="112" R="80" G="71" B="68" A="255"/>
|
||||
<Vtx X="32" Y="52" Z="10" S="112" T="112" R="70" G="80" B="70" A="255"/>
|
||||
<Vtx X="30" Y="55" Z="12" S="176" T="-16" R="83" G="53" B="80" A="255"/>
|
||||
<Vtx X="28" Y="48" Z="15" S="-16" T="-16" R="82" G="85" B="47" A="255"/>
|
||||
<Vtx X="35" Y="50" Z="12" S="-16" T="176" R="44" G="91" B="76" A="255"/>
|
||||
<Vtx X="32" Y="52" Z="10" S="112" T="112" R="70" G="80" B="70" A="255"/>
|
||||
<Vtx X="39" Y="50" Z="6" S="112" T="304" R="64" G="86" B="67" A="255"/>
|
||||
<Vtx X="17" Y="60" Z="31" S="304" T="432" R="85" G="84" B="42" A="255"/>
|
||||
<Vtx X="11" Y="59" Z="39" S="496" T="496" R="59" G="90" B="67" A="255"/>
|
||||
<Vtx X="20" Y="56" Z="35" S="432" T="304" R="85" G="84" B="42" A="255"/>
|
||||
<Vtx X="21" Y="59" Z="22" S="112" T="304" R="99" G="71" B="35" A="255"/>
|
||||
<Vtx X="26" Y="50" Z="29" S="304" T="112" R="91" G="86" B="22" A="255"/>
|
||||
<Vtx X="26" Y="52" Z="21" S="112" T="112" R="95" G="80" B="26" A="255"/>
|
||||
<Vtx X="29" Y="50" Z="23" S="176" T="-16" R="88" G="91" B="0" A="255"/>
|
||||
<Vtx X="26" Y="55" Z="18" S="-16" T="176" R="111" G="53" B="32" A="255"/>
|
||||
</Vertex>
|
||||
@@ -0,0 +1,10 @@
|
||||
<Vertex Version="0">
|
||||
<Vtx X="-107" Y="0" Z="-93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="-107" Y="0" Z="93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="-107" Y="98" Z="93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="-107" Y="98" Z="-93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="107" Y="0" Z="-93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="107" Y="0" Z="93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="107" Y="98" Z="93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
<Vtx X="107" Y="98" Z="-93" S="0" T="0" R="0" G="0" B="0" A="0"/>
|
||||
</Vertex>
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user