mirror of
https://github.com/lindbergh-loader/lindbergh-loader.git
synced 2026-10-14 01:49:12 +03:00
Compare commits
28
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
ec428d26be | ||
|
|
ba51502fdb | ||
|
|
aedad4dcdf | ||
|
|
374ecd6e84 | ||
|
|
f5c8c8c0f0 | ||
|
|
feaa6a912e | ||
|
|
b129220822 | ||
|
|
4d07faa251 | ||
|
|
5558718f29 | ||
|
|
e9e62a3bd1 | ||
|
|
293b4e8c25 | ||
|
|
e7d8c5a80a | ||
|
|
92eb48691d | ||
|
|
55fd8955c1 | ||
|
|
ea35dcdad2 | ||
|
|
fb557044d7 | ||
|
|
0e8b3b4a59 | ||
|
|
f17dd93778 | ||
|
|
e359cbb0bd | ||
|
|
72f70ccda1 | ||
|
|
0a29307870 | ||
|
|
d202f31717 | ||
|
|
a68dcbbdcf | ||
|
|
75642e285e | ||
|
|
d9d076f120 | ||
|
|
a5633bbf1d | ||
|
|
d72ac379ea | ||
|
|
c5c44ce395 |
@@ -0,0 +1,33 @@
|
|||||||
|
name: 🐧 Linux AppImage
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux-appimage:
|
||||||
|
name: "Build"
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
timeout-minutes: 30
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: scripts/appimage/install-packages.sh
|
||||||
|
|
||||||
|
- name: Build Deps
|
||||||
|
run: scripts/appimage/build-deps.sh
|
||||||
|
|
||||||
|
- name: Compile Build
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
make
|
||||||
|
scripts/appimage/make-appimage.sh
|
||||||
|
|
||||||
|
- name: Upload AppImage
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: "linux-appimage"
|
||||||
|
path: "lindbergh-loader.AppImage"
|
||||||
@@ -16,6 +16,7 @@ on:
|
|||||||
- '**.md'
|
- '**.md'
|
||||||
- '.github/ISSUE_TEMPLATE/*'
|
- '.github/ISSUE_TEMPLATE/*'
|
||||||
- '.docs/changelog'
|
- '.docs/changelog'
|
||||||
|
- '.github/workflows/*'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linux-build:
|
linux-build:
|
||||||
@@ -24,34 +25,78 @@ jobs:
|
|||||||
linux-flatpak:
|
linux-flatpak:
|
||||||
name: 📦 Linux Flatpak
|
name: 📦 Linux Flatpak
|
||||||
uses: "./.github/workflows/flatpak-build.yml"
|
uses: "./.github/workflows/flatpak-build.yml"
|
||||||
|
linux-appimage:
|
||||||
|
name: 📦 Linux AppImage
|
||||||
|
uses: "./.github/workflows/appimage-build.yml"
|
||||||
|
|
||||||
create-release:
|
create-release:
|
||||||
name: 📤 Create Release
|
name: 📤 Create Release
|
||||||
needs: [linux-build, linux-flatpak]
|
needs: [linux-build, linux-flatpak, linux-appimage]
|
||||||
runs-on: ubuntu-22.04
|
runs-on: ubuntu-22.04
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
|
||||||
steps:
|
steps:
|
||||||
|
# Step 1: Checkout the code to access Git history and tags
|
||||||
|
- name: Checkout code
|
||||||
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
# Fetch all history and tags, necessary for git tag command
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
# Step 2: Download artifacts from previous build jobs
|
||||||
- name: Download Artifacts
|
- name: Download Artifacts
|
||||||
uses: actions/download-artifact@v4
|
uses: actions/download-artifact@v4
|
||||||
with:
|
with:
|
||||||
path: ./artifacts/
|
path: ./artifacts/
|
||||||
|
|
||||||
|
# Optional: Display downloaded artifacts for debugging
|
||||||
- name: Display Downloaded Artifacts
|
- name: Display Downloaded Artifacts
|
||||||
run: find ./artifacts/
|
run: find ./artifacts/
|
||||||
|
|
||||||
- name: Add 161 to github.run_number
|
# Step 3: Extract the latest version from changelog.md
|
||||||
|
- name: Extract Version from Changelog
|
||||||
|
id: get_version
|
||||||
run: |
|
run: |
|
||||||
NEW_RUN_NUMBER=$(( ${{ github.run_number }} + 161 ))
|
# Define the path to the changelog file (adjust if it's not at the root)
|
||||||
echo "NEW_RUN_NUMBER=$NEW_RUN_NUMBER" >> $GITHUB_ENV
|
CHANGELOG_FILE="./docs/changelog"
|
||||||
|
|
||||||
- name: Create Preview Release
|
echo "Attempting to extract version from $CHANGELOG_FILE..."
|
||||||
if: github.ref == 'refs/heads/master'
|
|
||||||
|
# Check if the changelog file exists
|
||||||
|
if [[ ! -f "$CHANGELOG_FILE" ]]; then
|
||||||
|
echo "Error: Changelog file '$CHANGELOG_FILE' not found."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
VERSION=$(awk '/^## \[/ { match($0, /\[([^]]+)\]/, arr); print arr[1]; exit }' "$CHANGELOG_FILE")
|
||||||
|
|
||||||
|
# Check if a version was actually extracted
|
||||||
|
if [[ -z "$VERSION" ]]; then
|
||||||
|
echo "Error: Could not find version in '$CHANGELOG_FILE'. Expected format like '## [X.Y.Z]' near the top."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Found version: $VERSION"
|
||||||
|
|
||||||
|
# Set environment variables for the release step
|
||||||
|
# RELEASE_TAG often includes a 'v' prefix, RELEASE_VERSION is the plain version
|
||||||
|
echo "RELEASE_VERSION=$VERSION" >> $GITHUB_ENV
|
||||||
|
echo "RELEASE_TAG=v$VERSION" >> $GITHUB_ENV # Add 'v' prefix for the tag
|
||||||
|
echo "Using tag: v$VERSION"
|
||||||
|
|
||||||
|
# Step 4: Create the release using the calculated tag
|
||||||
|
- name: Create Release
|
||||||
uses: "marvinpinto/action-automatic-releases@latest"
|
uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
with:
|
with:
|
||||||
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
automatic_release_tag: v${{ env.NEW_RUN_NUMBER }}
|
# Use the environment variable set in the previous step
|
||||||
|
# automatic_release_tag: ${{ env.NEXT_TAG }}
|
||||||
|
automatic_release_tag: ${{ env.RELEASE_TAG }}
|
||||||
|
# Keep prerelease as false unless you want preview releases
|
||||||
prerelease: false
|
prerelease: false
|
||||||
title: "Build v${{ env.NEW_RUN_NUMBER }}"
|
# Update the title to use the new tag
|
||||||
|
# title: "Build ${{ env.NEXT_TAG }}"
|
||||||
|
title: "Build ${{ env.RELEASE_TAG }}"
|
||||||
files: |
|
files: |
|
||||||
./artifacts/linux-flatpak/lindbergh-loader.flatpak
|
./artifacts/linux-flatpak/lindbergh-loader.flatpak
|
||||||
./artifacts/linux-build/build.tar.gz
|
./artifacts/linux-build/build.tar.gz
|
||||||
|
./artifacts/linux-appimage/lindbergh-loader.AppImage
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
.cache
|
||||||
bld
|
bld
|
||||||
build/
|
build/
|
||||||
test/
|
test/
|
||||||
|
|||||||
+5
-6
@@ -12,9 +12,8 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
|
|||||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
|
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/build)
|
||||||
|
|
||||||
# Source files for various targets
|
# Source files for various targets
|
||||||
file(GLOB LIND_OBJS "src/lindbergh/*.c" "src/lindbergh/*.cpp")
|
file(GLOB LIND_OBJS "src/lindbergh/*.c")
|
||||||
list(FILTER LIND_OBJS EXCLUDE REGEX "src/lindbergh/lindbergh.o")
|
list(FILTER LIND_OBJS EXCLUDE REGEX "src/lindbergh/lindbergh.c")
|
||||||
list(FILTER LIND_OBJS EXCLUDE REGEX "src/lindbergh/evdevinput.o")
|
|
||||||
|
|
||||||
file(GLOB XDIFF_SRCS "src/libxdiff/xdiff/*.c")
|
file(GLOB XDIFF_SRCS "src/libxdiff/xdiff/*.c")
|
||||||
|
|
||||||
@@ -27,12 +26,12 @@ set(LINDBERGH_CXX_FLAGS ${LINDBERGH_C_FLAGS} -std=c++11)
|
|||||||
set(LIBXDIFF_C_FLAGS -DHAVE_CONFIG_H -fPIC -m32)
|
set(LIBXDIFF_C_FLAGS -DHAVE_CONFIG_H -fPIC -m32)
|
||||||
set(LIBSEGAAPI_CXX_FLAGS -m32 -fPIC -shared)
|
set(LIBSEGAAPI_CXX_FLAGS -m32 -fPIC -shared)
|
||||||
set(LIBSEGAAPI_LINKER_FLAGS -m32 -lFAudio)
|
set(LIBSEGAAPI_LINKER_FLAGS -m32 -lFAudio)
|
||||||
set(SHARED_LINKER_FLAGS -m32 -Wl,-z,defs -rdynamic -static-libstdc++ -static-libgcc -lc -ldl -lGL -lglut -lX11 -lSDL2 -lm -lpthread -shared -lstdc++ -nostdlib -lasound)
|
set(SHARED_LINKER_FLAGS -m32 -Wl,-z,defs -rdynamic -static-libstdc++ -static-libgcc -lc -ldl -lGL -lglut -lX11 -lXcursor -lSDL2 -lm -lpthread -shared -lstdc++ -nostdlib -lasound)
|
||||||
|
|
||||||
# Build executable for lindbergh
|
# Build executable for lindbergh
|
||||||
add_executable(lindyloader src/lindbergh/lindbergh.c src/lindbergh/evdevinput.c src/lindbergh/evdevinput.h)
|
add_executable(lindyloader src/lindbergh/lindbergh.c src/lindbergh/evdevinput.c src/lindbergh/evdevinput.h src/lindbergh/log.c src/lindbergh/log.h src/lindbergh/jvs.c src/lindbergh/jvs.h src/lindbergh/config.h src/lindbergh/config.c)
|
||||||
set_target_properties(lindyloader PROPERTIES OUTPUT_NAME "lindbergh")
|
set_target_properties(lindyloader PROPERTIES OUTPUT_NAME "lindbergh")
|
||||||
set_target_properties(lindyloader PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} LINK_FLAGS "-m32")
|
set_target_properties(lindyloader PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY} LINK_FLAGS "-m32 -lm")
|
||||||
target_compile_options(lindyloader PRIVATE ${LINDBERGH_EXE})
|
target_compile_options(lindyloader PRIVATE ${LINDBERGH_EXE})
|
||||||
|
|
||||||
# Build static library libxdiff.a with its own flags
|
# Build static library libxdiff.a with its own flags
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
[](https://github.com/lindbergh-loader/lindbergh-loader/actions)
|
[](https://github.com/lindbergh-loader/lindbergh-loader/actions)
|
||||||
|
|
||||||
# SEGA Lindbergh Emulator
|
# SEGA Lindbergh Emulator
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,38 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
|
|
||||||
|
## [2.0.14]
|
||||||
|
### Added
|
||||||
|
- Bobby's birthday checking!
|
||||||
|
- FPS target to float.
|
||||||
|
### Fixed
|
||||||
|
- a bub in config.c where MJ4_ENABLED_ALL_THE_TIME was using the wrong variable.
|
||||||
|
|
||||||
|
## [2.0.13]
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- Clear window when the game is loading to prevent ghosting in SDL
|
||||||
|
- Prevent the created windows to resize/maximize.
|
||||||
|
- Version in github now matches the version in the changelog.
|
||||||
|
### Fixed
|
||||||
|
- Fixed a bug in Let's Go Jungle Special Resolution Patch.
|
||||||
|
- Cleaned unnecessary global variables in resolution.c
|
||||||
|
- Fixed a bug in that prevented the loader to start when the current folder contained spaces and lindbergh.so was there.
|
||||||
|
|
||||||
|
## [2.0.12]
|
||||||
|
### Added
|
||||||
|
- AppImage support.
|
||||||
|
### Fixed
|
||||||
|
- 2Spicy error in the scaling code, again.
|
||||||
|
|
||||||
|
## [2.0.11]
|
||||||
|
### Added
|
||||||
|
- Resolution patches for 2Spicy and HOD-Ex
|
||||||
|
- Code clean up.
|
||||||
|
### Fixed
|
||||||
|
- 2Spicy error in the scaling code.
|
||||||
|
|
||||||
## [2.0.10]
|
## [2.0.10]
|
||||||
### Added
|
### Added
|
||||||
- Config option to specify a path for the library libCg.so required for some shader compilation.
|
- Config option to specify a path for the library libCg.so required for some shader compilation.
|
||||||
|
|||||||
Executable
+30
@@ -0,0 +1,30 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
APPIMAGEDIRNAME=lindbergh-loader.AppDir
|
||||||
|
OUTPUT_FOLDER=$(realpath "./$APPIMAGEDIRNAME")
|
||||||
|
|
||||||
|
mkdir build-deps
|
||||||
|
cd build-deps
|
||||||
|
|
||||||
|
# Build openal
|
||||||
|
wget https://github.com/kcat/openal-soft/archive/refs/tags/openal-soft-1.17.2.tar.gz
|
||||||
|
tar -xzf openal-soft-1.17.2.tar.gz
|
||||||
|
cd openal-soft-openal-soft-1.17.2/build
|
||||||
|
|
||||||
|
CFLAGS="-m32 -mstackrealign" CXXFLAGS="-m32 -std=c++14 -mstackrealign" cmake ../ -DALSOFT_BACKEND_PULSEAUDIO=ON -DALSOFT_BACKEND_ALSA=ON -DALSOFT_BACKEND_JACK=OFF -DALSOFT_BACKEND_SNDIO=ON
|
||||||
|
|
||||||
|
make -j4
|
||||||
|
sudo cp libopenal.so.1.17.2 /usr/lib/i386-linux-gnu/libopenal.so.0
|
||||||
|
cd ../../
|
||||||
|
|
||||||
|
# Build libSSL and libCrypto
|
||||||
|
wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz
|
||||||
|
tar -xzf OpenSSL_0_9_7.tar.gz
|
||||||
|
cd openssl-OpenSSL_0_9_7
|
||||||
|
cp ../../scripts/appimage/patches/openssl-0.9.7.patch .
|
||||||
|
./Configure shared 386 no-asm no-krb5 linux-pentium -m32
|
||||||
|
patch -p1 < openssl-0.9.7.patch
|
||||||
|
CFLAGS=-m32 make
|
||||||
|
sudo cp libcrypto.so.0.9.7 /usr/lib/i386-linux-gnu
|
||||||
|
sudo cp libssl.so.0.9.7 /usr/lib/i386-linux-gnu
|
||||||
|
|
||||||
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
echo "Install Packages Running..."
|
||||||
|
sudo dpkg --add-architecture i386
|
||||||
|
sudo apt update
|
||||||
|
sudo apt -y install --no-install-recommends \
|
||||||
|
build-essential gcc-multilib g++-multilib cmake fuse freeglut3-dev:i386 libsdl2-dev:i386 libfaudio-dev:i386 libvdpau1:i386 \
|
||||||
|
libstdc++5:i386 libxmu6:i386 libpcsclite1:i386 libncurses5:i386 unzip libsndio-dev:i386
|
||||||
|
|
||||||
|
sudo add-apt-repository ppa:kisak/kisak-mesa -y
|
||||||
|
sudo apt update -y && sudo apt upgrade -y
|
||||||
Executable
+104
@@ -0,0 +1,104 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
APPIMAGENAME=lindbergh-loader
|
||||||
|
APPIMAGEDIRNAME=lindbergh-loader.AppDir
|
||||||
|
|
||||||
|
declare -a ADDED_LIBS=(
|
||||||
|
"libOpenGL.so.0"
|
||||||
|
"libGLdispatch.so.0"
|
||||||
|
"libGLX.so"
|
||||||
|
"libGLX_indirect.so.0"
|
||||||
|
"libGLX_mesa.so.0"
|
||||||
|
"libGL.so.1"
|
||||||
|
"libGLU.so.1"
|
||||||
|
"libglut.so.3"
|
||||||
|
"libglapi.so.0"
|
||||||
|
"libICE.so.6"
|
||||||
|
"libSM.so.6"
|
||||||
|
"libX11.so.6"
|
||||||
|
"libX11-xcb.so.1"
|
||||||
|
"libxcb.so.1"
|
||||||
|
"libxcb-dri2.so.0"
|
||||||
|
"libxcb-dri3.so.0"
|
||||||
|
"libxcb-glx.so.0"
|
||||||
|
"libXmu.so.6"
|
||||||
|
"libncurses.so.5"
|
||||||
|
"libpcsclite.so.1"
|
||||||
|
"libstdc++.so.5"
|
||||||
|
"libdrm.so.2"
|
||||||
|
"libexpat.so.1"
|
||||||
|
"libm.so.6"
|
||||||
|
"libopenal.so.0"
|
||||||
|
"libcrypto.so.0.9.7"
|
||||||
|
"libssl.so.0.9.7"
|
||||||
|
"libuuid.so.1"
|
||||||
|
)
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ ! -f "linuxdeploy-x86_64" ]; then
|
||||||
|
wget -O "linuxdeploy-x86_64" https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage
|
||||||
|
chmod +x "linuxdeploy-x86_64"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "appimagetool-x86_64" ]; then
|
||||||
|
wget -O "appimagetool-x86_64" https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage
|
||||||
|
chmod +x "appimagetool-x86_64"
|
||||||
|
fi
|
||||||
|
|
||||||
|
cd build
|
||||||
|
OUTPUT_FOLDER=$(realpath "./$APPIMAGEDIRNAME")
|
||||||
|
rm -fr "$OUTPUT_FOLDER"
|
||||||
|
|
||||||
|
ADDED_LIBS_ARGS=()
|
||||||
|
for lib in "${ADDED_LIBS[@]}"; do
|
||||||
|
ADDED_LIBS_ARGS+=("--library=/usr/lib/i386-linux-gnu/$lib")
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
|
echo "Copying files into AppDir..."
|
||||||
|
mkdir -p "$OUTPUT_FOLDER/usr/bin"
|
||||||
|
mkdir -p "$OUTPUT_FOLDER/usr/lib"
|
||||||
|
mkdir -p "$OUTPUT_FOLDER/usr/lib32"
|
||||||
|
|
||||||
|
# We create the AppRun file
|
||||||
|
cat > "$OUTPUT_FOLDER/AppRun" << 'EOF'
|
||||||
|
#!/bin/bash
|
||||||
|
APP_IMG_ROOT="$(dirname "$(readlink -f "$0")")"
|
||||||
|
export APP_IMG_ROOT=$APP_IMG_ROOT
|
||||||
|
export LD_LIBRARY_PATH="$APP_IMG_ROOT/usr/lib32:$LD_LIBRARY_PATH"
|
||||||
|
exec "$APP_IMG_ROOT/usr/bin/lindbergh" "$@"
|
||||||
|
EOF
|
||||||
|
|
||||||
|
chmod +x "$OUTPUT_FOLDER/AppRun"
|
||||||
|
|
||||||
|
cp libkswapapi.so $OUTPUT_FOLDER/usr/lib
|
||||||
|
cp libsegaapi.so $OUTPUT_FOLDER/usr/lib
|
||||||
|
cp lindbergh.so $OUTPUT_FOLDER/usr/lib
|
||||||
|
cp libposixtime.so $OUTPUT_FOLDER/usr/lib
|
||||||
|
mv lindbergh $OUTPUT_FOLDER/usr/bin
|
||||||
|
mkdir -p $OUTPUT_FOLDER/usr/lib/dri
|
||||||
|
cp /usr/lib/i386-linux-gnu/dri/* $OUTPUT_FOLDER/usr/lib/dri
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
echo "Running linuxdeploy to create AppDir..."
|
||||||
|
./linuxdeploy-x86_64 --appimage-extract-and-run --appdir="$OUTPUT_FOLDER" ${ADDED_LIBS_ARGS[@]} \
|
||||||
|
--desktop-file="./scripts/lindbergh-loader.desktop" \
|
||||||
|
--icon-file="./scripts/lindbergh-loader.png"
|
||||||
|
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/libkswapapi.so $OUTPUT_FOLDER/usr/lib32
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/libsegaapi.so $OUTPUT_FOLDER/usr/lib32
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/lindbergh.so $OUTPUT_FOLDER/usr/lib32
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/libposixtime.so $OUTPUT_FOLDER/usr/lib32
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/dri $OUTPUT_FOLDER/usr/lib32
|
||||||
|
|
||||||
|
unzip libs/Cg-3.1.zip -d $OUTPUT_FOLDER/usr/lib32
|
||||||
|
cp libs/libCg.so $OUTPUT_FOLDER/usr/lib32/libCg2.so
|
||||||
|
ln -s -f libposixtime.so $OUTPUT_FOLDER/usr/lib32/libposixtime.so.1
|
||||||
|
ln -s -f libposixtime.so $OUTPUT_FOLDER/usr/lib32/libposixtime.so.2.4
|
||||||
|
ln -s -f libkswapapi.so $OUTPUT_FOLDER/usr/lib32/libGLcore.so.1
|
||||||
|
ln -s -f libkswapapi.so $OUTPUT_FOLDER/usr/lib32/libnvidia-tls.so.1
|
||||||
|
|
||||||
|
echo "Generating AppImage..."
|
||||||
|
rm -f "$APPIMAGENAME.AppImage"
|
||||||
|
./appimagetool-x86_64 -v "$OUTPUT_FOLDER" "$APPIMAGENAME.AppImage" --appimage-extract-and-run
|
||||||
@@ -0,0 +1,13 @@
|
|||||||
|
diff -ruN openssl-OpenSSL_0_9_7.orig/Makefile.ssl openssl-OpenSSL_0_9_7/Makefile.ssl
|
||||||
|
--- openssl-OpenSSL_0_9_7.orig/Makefile.ssl 2025-04-14 05:05:11.162340308 +0000
|
||||||
|
+++ openssl-OpenSSL_0_9_7/Makefile.ssl 2025-04-14 05:06:22.261420144 +0000
|
||||||
|
@@ -198,7 +198,7 @@
|
||||||
|
SHARED_SSL=libssl$(SHLIB_EXT)
|
||||||
|
SHARED_LIBS=$(SHARED_CRYPTO) $(SHARED_SSL)
|
||||||
|
SHARED_LIBS_LINK_EXTS=.so.$(SHLIB_MAJOR) .so
|
||||||
|
-SHARED_LDFLAGS=
|
||||||
|
+SHARED_LDFLAGS=-m32
|
||||||
|
|
||||||
|
GENERAL= Makefile
|
||||||
|
BASENAME= openssl
|
||||||
|
|
||||||
@@ -1,18 +1,17 @@
|
|||||||
app-id: com.github.lindberghloader
|
app-id: com.github.lindberghloader
|
||||||
runtime: org.freedesktop.Platform
|
runtime: org.freedesktop.Platform
|
||||||
runtime-version: &runtime-version '24.08' # Define runtime version alias
|
runtime-version: &runtime-version '24.08'
|
||||||
sdk: org.freedesktop.Sdk
|
sdk: org.freedesktop.Sdk
|
||||||
|
|
||||||
# Define reusable aliases
|
x-gl-versions: &gl-versions '24.08;1.4'
|
||||||
x-gl-versions: &gl-versions '24.08;1.4' # Define GL versions list alias
|
|
||||||
x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;egl/egl_external_platform.d;OpenCL/vendors;lib/dri;lib/d3d;lib/gbm;vulkan/explicit_layer.d;vulkan/implicit_layer.d # Define GL merge dirs alias
|
x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;egl/egl_external_platform.d;OpenCL/vendors;lib/dri;lib/d3d;lib/gbm;vulkan/explicit_layer.d;vulkan/implicit_layer.d # Define GL merge dirs alias
|
||||||
x-i386-build-options: &i386-build-options # Define 32-bit build options alias
|
x-i386-build-options: &i386-build-options
|
||||||
libdir: /app/lib32 # Default library install dir for autotools/meson etc.
|
libdir: /app/lib32
|
||||||
env:
|
env:
|
||||||
CC: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc
|
CC: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc
|
||||||
CXX: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-g++
|
CXX: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-g++
|
||||||
LD: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ld
|
LD: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ld
|
||||||
LDFLAGS: "-L/app/lib32" # Add custom lib dir to linker search path during build
|
LDFLAGS: "-L/app/lib32"
|
||||||
|
|
||||||
command: lindbergh
|
command: lindbergh
|
||||||
|
|
||||||
@@ -21,41 +20,32 @@ sdk-extensions:
|
|||||||
- org.freedesktop.Sdk.Extension.toolchain-i386
|
- org.freedesktop.Sdk.Extension.toolchain-i386
|
||||||
- org.freedesktop.Sdk.Compat.i386
|
- org.freedesktop.Sdk.Compat.i386
|
||||||
|
|
||||||
# Runtime arguments and permissions
|
|
||||||
finish-args:
|
finish-args:
|
||||||
# Environment variables needed at runtime
|
- --env=LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
||||||
- --env=LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH # Make custom 32-bit libs findable
|
|
||||||
- --env=PATH=/app/bin:/usr/bin
|
- --env=PATH=/app/bin:/usr/bin
|
||||||
# Permissions
|
- --allow=multiarch
|
||||||
- --allow=multiarch # Needed for running 32-bit code
|
|
||||||
- --share=ipc
|
- --share=ipc
|
||||||
- --share=network
|
- --share=network
|
||||||
- --socket=x11
|
- --socket=x11
|
||||||
- --socket=wayland
|
- --socket=wayland
|
||||||
- --socket=pulseaudio
|
|
||||||
# WARNING: --device=all grants broad hardware access. Consider using --device=dri and specific devices if possible.
|
|
||||||
- --device=all
|
- --device=all
|
||||||
# Filesystem access - adjust path as needed
|
- --socket=pulseaudio
|
||||||
- --filesystem=~/Games
|
- --filesystem=~/Games
|
||||||
|
|
||||||
# Runtime extensions automatically downloaded and installed with the app
|
# Runtime extensions automatically downloaded and installed with the app (For some reason does not work)
|
||||||
add-extensions:
|
add-extensions:
|
||||||
# 32-bit compatibility libraries from the runtime
|
|
||||||
org.freedesktop.Platform.Compat.i386:
|
org.freedesktop.Platform.Compat.i386:
|
||||||
directory: lib/i386-linux-gnu
|
directory: lib/i386-linux-gnu
|
||||||
version: *runtime-version # Match the main runtime version
|
version: *runtime-version
|
||||||
# no-autodownload removed (or set to false) to ensure installation
|
|
||||||
|
|
||||||
# 32-bit graphics driver extension
|
# 32-bit graphics driver extension
|
||||||
org.freedesktop.Platform.GL32:
|
org.freedesktop.Platform.GL32:
|
||||||
directory: lib/i386-linux-gnu/GL
|
directory: lib/i386-linux-gnu/GL
|
||||||
versions: *gl-versions # Use defined GL versions list
|
versions: *gl-versions
|
||||||
subdirectories: true
|
subdirectories: true
|
||||||
# no-autodownload removed (or set to false) to ensure installation
|
|
||||||
autodelete: false
|
autodelete: false
|
||||||
add-ld-path: lib
|
add-ld-path: lib
|
||||||
merge-dirs: *gl-merge-dirs # Use defined merge dirs list
|
merge-dirs: *gl-merge-dirs
|
||||||
# Conditions for downloading and enabling the GL driver extension
|
|
||||||
download-if: active-gl-driver
|
download-if: active-gl-driver
|
||||||
enable-if: active-gl-driver
|
enable-if: active-gl-driver
|
||||||
autoprune-unless: active-gl-driver
|
autoprune-unless: active-gl-driver
|
||||||
@@ -75,15 +65,14 @@ modules:
|
|||||||
- name: libGLU
|
- name: libGLU
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
- --host=i686-unknown-linux-gnu # Specify 32-bit target host
|
- --host=i686-unknown-linux-gnu
|
||||||
- --prefix=/app # Base install prefix
|
- --prefix=/app
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options on 64-bit host
|
x86_64: *i386-build-options
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz
|
url: https://archive.mesa3d.org/glu/glu-9.0.2.tar.xz
|
||||||
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
|
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
|
||||||
|
|
||||||
# Build 32-bit freeglut
|
# Build 32-bit freeglut
|
||||||
@@ -91,15 +80,15 @@ modules:
|
|||||||
buildsystem: cmake
|
buildsystem: cmake
|
||||||
config-opts:
|
config-opts:
|
||||||
- -DCMAKE_BUILD_TYPE=Release
|
- -DCMAKE_BUILD_TYPE=Release
|
||||||
- -DCMAKE_INSTALL_PREFIX=/app # Base install prefix
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
- -DCMAKE_INSTALL_LIBDIR=/app/lib32 # Explicitly set library install dir for CMake
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://downloads.sourceforge.net/freeglut/freeglut-3.2.2.tar.gz
|
url: https://downloads.sourceforge.net/freeglut/freeglut-3.2.2.tar.gz
|
||||||
sha256: c5944a082df0bba96b5756dddb1f75d0cd72ce27b5395c6c1dde85c2ff297a50
|
sha256: c5944a082df0bba96b5756dddb1f75d0cd72ce27b5395c6c1dde85c2ff297a50
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
# Build 32-bit libFAudio (dynamic)
|
# Build 32-bit libFAudio (dynamic)
|
||||||
- name: libFAudio-Dynamic
|
- name: libFAudio-Dynamic
|
||||||
@@ -107,40 +96,37 @@ modules:
|
|||||||
config-opts:
|
config-opts:
|
||||||
- -DCMAKE_BUILD_TYPE=Release
|
- -DCMAKE_BUILD_TYPE=Release
|
||||||
- -DCMAKE_INSTALL_PREFIX=/app
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
- -DBUILD_SDL3=off # Assuming SDL3 integration is not needed
|
- -DBUILD_SDL3=off
|
||||||
- -DCMAKE_INSTALL_LIBDIR=/app/lib32 # Explicitly set library install dir
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
env:
|
env:
|
||||||
# Specific flags needed for FAudio 32-bit build?
|
|
||||||
CFLAGS: "-m32 -mstackrealign"
|
CFLAGS: "-m32 -mstackrealign"
|
||||||
CXXFLAGS: "-m32 -mstackrealign"
|
CXXFLAGS: "-m32 -mstackrealign"
|
||||||
sources:
|
sources:
|
||||||
- type: git
|
- type: git
|
||||||
url: https://github.com/FNA-XNA/FAudio.git
|
url: https://github.com/FNA-XNA/FAudio.git
|
||||||
tag: "24.12" # Using a specific tag
|
tag: "24.12"
|
||||||
|
|
||||||
# Build 32-bit libXmu
|
# Build 32-bit libXmu
|
||||||
- name: libxmu
|
- name: libxmu
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
|
||||||
- --prefix=/app
|
- --prefix=/app
|
||||||
- --with-shared # Ensure shared library is built
|
- --with-shared
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://xorg.freedesktop.org/releases/individual/lib/libXmu-1.2.1.tar.gz
|
url: https://xorg.freedesktop.org/releases/individual/lib/libXmu-1.2.1.tar.gz
|
||||||
sha256: bf0902583dd1123856c11e0a5085bd3c6e9886fbbd44954464975fd7d52eb599
|
sha256: bf0902583dd1123856c11e0a5085bd3c6e9886fbbd44954464975fd7d52eb599
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options (Standardized)
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
# Build 32-bit libmd
|
# Build 32-bit libmd
|
||||||
- name: libmd
|
- name: libmd
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
|
||||||
- --prefix=/app
|
- --prefix=/app
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
@@ -148,13 +134,12 @@ modules:
|
|||||||
sha256: 1bd6aa42275313af3141c7cf2e5b964e8b1fd488025caf2f971f43b00776b332
|
sha256: 1bd6aa42275313af3141c7cf2e5b964e8b1fd488025caf2f971f43b00776b332
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
# Build 32-bit libbsd
|
# Build 32-bit libbsd
|
||||||
- name: libbsd
|
- name: libbsd
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
|
||||||
- --prefix=/app
|
- --prefix=/app
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
@@ -162,14 +147,12 @@ modules:
|
|||||||
sha256: b88cc9163d0c652aaf39a99991d974ddba1c3a9711db8f1b5838af2a14731014
|
sha256: b88cc9163d0c652aaf39a99991d974ddba1c3a9711db8f1b5838af2a14731014
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
# Build 32-bit ncurses (very old version)
|
# Build 32-bit ncurses (very old version)
|
||||||
- name: ncurses
|
- name: ncurses
|
||||||
# WARNING: ncurses 5.9 is very old. Consider updating if possible.
|
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
|
||||||
- --prefix=/app
|
- --prefix=/app
|
||||||
- --with-shared
|
- --with-shared
|
||||||
- --without-debug
|
- --without-debug
|
||||||
@@ -178,24 +161,22 @@ modules:
|
|||||||
url: https://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz
|
url: https://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz
|
||||||
sha256: 9046298fb440324c9d4135ecea7879ffed8546dd1b58e59430ea07a4633f563b
|
sha256: 9046298fb440324c9d4135ecea7879ffed8546dd1b58e59430ea07a4633f563b
|
||||||
- type: patch
|
- type: patch
|
||||||
path: ./assets/ncurses-5.9.patch # Assuming this patch is necessary
|
path: ./assets/ncurses-5.9.patch
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
env:
|
env:
|
||||||
CPPFLAGS: "-P" # Often needed for ncurses builds
|
CPPFLAGS: "-P"
|
||||||
CXXFLAGS: "-std=c++14" # Is C++14 really needed for ncurses build? Check this.
|
CXXFLAGS: "-std=c++14"
|
||||||
|
|
||||||
# Install pre-built 32-bit Nvidia Cg Toolkit (old)
|
# Install pre-built 32-bit Nvidia Cg Toolkit (old)
|
||||||
- name: nvidia-cg-toolkit
|
- name: nvidia-cg-toolkit
|
||||||
# WARNING: Cg Toolkit is deprecated and old.
|
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
- install -Dm755 usr/lib/libCg.so /app/lib32/libCg.so
|
- install -Dm755 usr/lib/libCg.so /app/lib32/libCg.so
|
||||||
- install -Dm755 usr/lib/libCgGL.so /app/lib32/libCgGL.so
|
- install -Dm755 usr/lib/libCgGL.so /app/lib32/libCgGL.so
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
# Consider hosting this locally or finding a more reliable source if possible
|
|
||||||
url: http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_x86.tgz
|
url: http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_x86.tgz
|
||||||
sha256: cef3591e436f528852db0e8c145d3842f920e0c89bcfb219c466797cb7b18879
|
sha256: cef3591e436f528852db0e8c145d3842f920e0c89bcfb219c466797cb7b18879
|
||||||
|
|
||||||
@@ -203,32 +184,27 @@ modules:
|
|||||||
- name: libsndio-dynamic
|
- name: libsndio-dynamic
|
||||||
buildsystem: autotools
|
buildsystem: autotools
|
||||||
config-opts:
|
config-opts:
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
|
||||||
- --prefix=/app
|
- --prefix=/app
|
||||||
- --enable-dynamic # Build shared library
|
- --enable-dynamic
|
||||||
# - --disable-static # Don't build static library
|
- --enable-alsa
|
||||||
- --enable-alsa # Enable ALSA backend
|
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://www.sndio.org/sndio-1.10.0.tar.gz
|
url: https://www.sndio.org/sndio-1.10.0.tar.gz
|
||||||
sha256: bebd3bfd01c50c9376cf3e7814b9379bed9e17d0393b5113b7eb7a3d0d038c54
|
sha256: bebd3bfd01c50c9376cf3e7814b9379bed9e17d0393b5113b7eb7a3d0d038c54
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
# Build 32-bit libopenal (old version)
|
# Build 32-bit libopenal (old version)
|
||||||
- name: libopenal
|
- name: libopenal
|
||||||
# WARNING: OpenAL Soft 1.17.2 is quite old. Consider updating.
|
|
||||||
buildsystem: cmake
|
buildsystem: cmake
|
||||||
config-opts:
|
config-opts:
|
||||||
- -DCMAKE_INSTALL_PREFIX=/app
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
- -DCMAKE_INSTALL_LIBDIR=/app/lib32 # Explicitly set library install dir
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
# Backend selection
|
|
||||||
- -DALSOFT_BACKEND_PULSEAUDIO=ON
|
- -DALSOFT_BACKEND_PULSEAUDIO=ON
|
||||||
- -DALSOFT_BACKEND_ALSA=ON
|
- -DALSOFT_BACKEND_ALSA=ON
|
||||||
- -DALSOFT_BACKEND_JACK=OFF
|
- -DALSOFT_BACKEND_JACK=OFF
|
||||||
- -DALSOFT_BACKEND_SNDIO=ON # Depends on libsndio-dynamic
|
- -DALSOFT_BACKEND_SNDIO=ON
|
||||||
# Point to the previously built sndio library/headers
|
|
||||||
- -DSOUNDIO_INCLUDE_DIR=/app/include
|
- -DSOUNDIO_INCLUDE_DIR=/app/include
|
||||||
- -DSOUNDIO_LIBRARY=/app/lib32/libsndio.so
|
- -DSOUNDIO_LIBRARY=/app/lib32/libsndio.so
|
||||||
sources:
|
sources:
|
||||||
@@ -237,29 +213,20 @@ modules:
|
|||||||
sha256: 11ea176f6cbf9763dbce0953dd77ab72d032b4ad95f07afffb91844abb174033
|
sha256: 11ea176f6cbf9763dbce0953dd77ab72d032b4ad95f07afffb91844abb174033
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
env:
|
env:
|
||||||
# Specific flags needed for OpenAL 32-bit build?
|
|
||||||
CFLAGS: "-m32 -mstackrealign"
|
CFLAGS: "-m32 -mstackrealign"
|
||||||
CXXFLAGS: "-m32 -std=c++14 -mstackrealign" # Needs C++14?
|
CXXFLAGS: "-m32 -std=c++14 -mstackrealign"
|
||||||
|
|
||||||
# Build 32-bit OpenSSL (extremely old and insecure version)
|
# Build 32-bit OpenSSL (extremely old and insecure version)
|
||||||
- name: openssl
|
- name: openssl
|
||||||
# CRITICAL WARNING: OpenSSL 0.9.7 is extremely old, unsupported, and has known vulnerabilities.
|
|
||||||
# This should be updated or removed if at all possible. Using it poses a security risk.
|
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
# Configure for 32-bit Linux (pentium target), shared libs, install to /app
|
|
||||||
- ./Configure --prefix=/app --openssldir=/app/etc/ssl shared 386 no-asm no-krb5 linux-pentium
|
- ./Configure --prefix=/app --openssldir=/app/etc/ssl shared 386 no-asm no-krb5 linux-pentium
|
||||||
# Build using the 32-bit toolchain
|
|
||||||
# - make -j$(nproc) CC=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc RANLIB=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ranlib
|
|
||||||
- make CC=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc RANLIB=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ranlib
|
- make CC=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc RANLIB=/usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ranlib
|
||||||
# Manually move built libraries to the target lib32 directory
|
|
||||||
- install -d /app/lib32
|
- install -d /app/lib32
|
||||||
- mv libcrypto.so* /app/lib32/
|
- mv libcrypto.so* /app/lib32/
|
||||||
- mv libssl.so* /app/lib32/
|
- mv libssl.so* /app/lib32/
|
||||||
# Install headers (needed by other modules?) - will be cleaned later if not
|
|
||||||
# - make install_hdrs
|
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz
|
url: https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz
|
||||||
@@ -269,23 +236,16 @@ modules:
|
|||||||
- name: libpcsclite
|
- name: libpcsclite
|
||||||
buildsystem: meson
|
buildsystem: meson
|
||||||
config-opts:
|
config-opts:
|
||||||
# --libdir=/app/lib32 should be handled by build-options->libdir
|
- -Dpolkit=false
|
||||||
# - -Dprefix=/app
|
- -Dlibsystemd=false
|
||||||
- -Dpolkit=false # Disable polkit integration
|
|
||||||
- -Dlibsystemd=false # Disable systemd integration
|
|
||||||
# -Dudevrulesdir=no # Might be needed if it tries to install udev rules
|
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options
|
x86_64: *i386-build-options
|
||||||
env:
|
env:
|
||||||
# Meson cross-compilation setup often requires explicit flags and paths
|
|
||||||
CFLAGS: "-m32"
|
CFLAGS: "-m32"
|
||||||
CXXFLAGS: "-m32"
|
CXXFLAGS: "-m32"
|
||||||
LDFLAGS: "-m32 -L/app/lib32" # Ensure LDFLAGS includes -L/app/lib32
|
LDFLAGS: "-m32 -L/app/lib32"
|
||||||
# Point pkg-config to custom and SDK 32-bit locations
|
|
||||||
PKG_CONFIG_PATH: "/app/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/sdk/toolchain-i386/lib/pkgconfig"
|
PKG_CONFIG_PATH: "/app/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/sdk/toolchain-i386/lib/pkgconfig"
|
||||||
# LD_LIBRARY_PATH might not be needed here if LDFLAGS is sufficient for linking stage
|
|
||||||
# LD_LIBRARY_PATH: "/app/lib32:/usr/lib/i386-linux-gnu/pkgconfig:$LD_LIBRARY_PATH"
|
|
||||||
sources:
|
sources:
|
||||||
- type: archive
|
- type: archive
|
||||||
url: https://pcsclite.apdu.fr/files/pcsc-lite-2.3.1.tar.xz
|
url: https://pcsclite.apdu.fr/files/pcsc-lite-2.3.1.tar.xz
|
||||||
@@ -295,59 +255,50 @@ modules:
|
|||||||
- name: lindbergh-loader
|
- name: lindbergh-loader
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
# Ensure make finds the libraries built in previous steps
|
|
||||||
- export LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
- export LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
||||||
- make -j$(nproc) # Build the application
|
- make -j$(nproc)
|
||||||
# Install application binary and required libraries/symlinks
|
- mkdir -p /app/lib/i386-linux-gnu
|
||||||
|
- mkdir -p /app/lib/i386-linux-gnu/GL
|
||||||
- install -Dm755 ./build/lindbergh /app/bin/
|
- install -Dm755 ./build/lindbergh /app/bin/
|
||||||
- install -Dm755 ./build/lindbergh.so /app/lib32/
|
- install -Dm755 ./build/lindbergh.so /app/lib32/
|
||||||
- install -Dm755 ./build/libsegaapi.so /app/lib32/
|
- install -Dm755 ./build/libsegaapi.so /app/lib32/
|
||||||
- install -Dm755 ./build/libkswapapi.so /app/lib32/
|
- install -Dm755 ./build/libkswapapi.so /app/lib32/
|
||||||
- install -Dm755 ./build/libposixtime.so /app/lib32/
|
- install -Dm755 ./build/libposixtime.so /app/lib32/
|
||||||
# Install bundled library? Make sure this doesn't conflict with nvidia-cg-toolkit
|
|
||||||
- install -Dm755 ./libs/libCg.so /app/lib32/libCg2.so
|
- install -Dm755 ./libs/libCg.so /app/lib32/libCg2.so
|
||||||
# Create necessary symlinks in the lib32 directory
|
|
||||||
- ln -sf libposixtime.so /app/lib32/libposixtime.so.1
|
- ln -sf libposixtime.so /app/lib32/libposixtime.so.1
|
||||||
- ln -sf libposixtime.so /app/lib32/libposixtime.so.2.4
|
- ln -sf libposixtime.so /app/lib32/libposixtime.so.2.4
|
||||||
- ln -sf libopenal.so.1 /app/lib32/libopenal.so.0 # Link to correct openal versioned so
|
- ln -sf libopenal.so.1 /app/lib32/libopenal.so.0
|
||||||
- ln -sf libkswapapi.so /app/lib32/libGLcore.so.1
|
- ln -sf libkswapapi.so /app/lib32/libGLcore.so.1
|
||||||
- ln -sf libkswapapi.so /app/lib32/libnvidia-tls.so.1
|
- ln -sf libkswapapi.so /app/lib32/libnvidia-tls.so.1
|
||||||
- mv /app/lib/libopenal* /app/lib32/
|
- mv /app/lib/libopenal* /app/lib32/
|
||||||
build-options:
|
build-options:
|
||||||
arch:
|
arch:
|
||||||
x86_64: *i386-build-options # Apply 32-bit build options (for env vars mainly)
|
x86_64: *i386-build-options
|
||||||
sources:
|
sources:
|
||||||
- type: dir
|
- type: dir
|
||||||
path: ../.. # Assumes source code is one level up from manifest directory
|
path: ../..
|
||||||
|
|
||||||
# Setup dynamic linker configuration
|
# Setup dynamic linker configuration
|
||||||
- name: bundle-setup
|
- name: bundle-setup
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
# Install ld.so.conf to ensure /app/lib32 is searched by the dynamic linker
|
|
||||||
- install -Dm644 -t /app/etc ld.so.conf
|
- install -Dm644 -t /app/etc ld.so.conf
|
||||||
sources:
|
sources:
|
||||||
- type: file
|
- type: file
|
||||||
path: ./assets/ld.so.conf # Assumes this file contains "/app/lib32"
|
path: ./assets/ld.so.conf
|
||||||
|
|
||||||
# Cleanup unnecessary files to reduce final flatpak size
|
# Cleanup unnecessary files to reduce final flatpak size
|
||||||
- name: cleanup
|
- name: cleanup
|
||||||
buildsystem: simple
|
buildsystem: simple
|
||||||
build-commands:
|
build-commands:
|
||||||
# Remove static libraries and libtool archives
|
|
||||||
- find /app/lib32 -name '*.a' -type f -delete
|
- find /app/lib32 -name '*.a' -type f -delete
|
||||||
- find /app/lib32 -name '*.la' -type f -delete
|
- find /app/lib32 -name '*.la' -type f -delete
|
||||||
# Remove any executables other than the main command
|
- find /app/bin -mindepth 1 ! -name "lindbergh" -exec rm -f {} \;
|
||||||
#- find /app/bin -mindepth 1 ! -name "lindbergh" -exec rm -f {} \;
|
- rm -rf /app/lib/pkgconfig /app/lib32/pkgconfig /app/share/pkgconfig
|
||||||
# Remove development/debugging/documentation files
|
- rm -rf /app/lib32/cmake /app/lib/debug /app/include /app/man /app/share /app/etc/bash_completion.d
|
||||||
#- rm -rf /app/lib/pkgconfig /app/lib32/pkgconfig /app/share/pkgconfig
|
|
||||||
#- rm -rf /app/lib32/cmake /app/lib/debug /app/include /app/man /app/share /app/etc/bash_completion.d
|
|
||||||
# Remove specific libraries if they are not needed at runtime
|
|
||||||
# (These were in the original, assuming they are safe to remove)
|
|
||||||
- rm -f /app/lib32/libmenu.so*
|
- rm -f /app/lib32/libmenu.so*
|
||||||
- rm -f /app/lib32/libform.so*
|
- rm -f /app/lib32/libform.so*
|
||||||
- rm -f /app/lib32/libpanel.so*
|
- rm -f /app/lib32/libpanel.so*
|
||||||
- rm -f /app/lib32/libXmuu.so*
|
- rm -f /app/lib32/libXmuu.so*
|
||||||
#- rm -f /app/lib32/libbsd.so*
|
- rm -f /app/lib32/libbsd.so*
|
||||||
# Remove ncurses terminfo db if not needed
|
|
||||||
- rm -rf /app/lib/terminfo
|
- rm -rf /app/lib/terminfo
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[Desktop Entry]
|
||||||
|
Name=Lindbergh Loader
|
||||||
|
Exec=lindbergh
|
||||||
|
Icon=lindbergh-loader
|
||||||
|
Type=Application
|
||||||
|
Categories=Utility;ConsoleOnly;
|
||||||
|
Terminal=true
|
||||||
Binary file not shown.
|
After Width: | Height: | Size: 60 KiB |
@@ -61,6 +61,8 @@ int selectReply = -1;
|
|||||||
int jvsFileDescriptor = -1;
|
int jvsFileDescriptor = -1;
|
||||||
int jvsPacketSize = -1;
|
int jvsPacketSize = -1;
|
||||||
|
|
||||||
|
char serialString[1024] = {0};
|
||||||
|
|
||||||
int initBaseboard()
|
int initBaseboard()
|
||||||
{
|
{
|
||||||
char *sramPath = getConfig()->sramPath;
|
char *sramPath = getConfig()->sramPath;
|
||||||
@@ -90,6 +92,26 @@ int initBaseboard()
|
|||||||
startJVSFrameThread(&jvsFileDescriptor);
|
startJVSFrameThread(&jvsFileDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
strcpy(serialString, SERIAL_STRING);
|
||||||
|
|
||||||
|
time_t t = time(NULL); // Get current time
|
||||||
|
struct tm *tm_info = localtime(&t); // Convert to local time structure
|
||||||
|
|
||||||
|
int month = tm_info->tm_mon + 1; // tm_mon is 0-based (0 = Jan, 4 = May)
|
||||||
|
int day = tm_info->tm_mday; // tm_mday is the day of the month
|
||||||
|
|
||||||
|
if (month == 1 && day == 18) {
|
||||||
|
strcpy(serialString, "HAPPY BIRTHDAY!!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (month == 5 && day == 20) {
|
||||||
|
strcpy(serialString, "HAPPY BIRTHDAY!!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (month == 5 && day == 21) {
|
||||||
|
strcpy(serialString, "HAPPY BIRTHDAY!!");
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -105,7 +127,8 @@ ssize_t baseboardWrite(int fd, const void *buf, size_t count)
|
|||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
int baseboardSelect(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds, struct timeval *restrict timeout)
|
int baseboardSelect(int nfds, fd_set *restrict readfds, fd_set *restrict writefds, fd_set *restrict exceptfds,
|
||||||
|
struct timeval *restrict timeout)
|
||||||
{
|
{
|
||||||
return selectReply;
|
return selectReply;
|
||||||
}
|
}
|
||||||
@@ -235,7 +258,7 @@ int baseboardIoctl(int fd, unsigned int request, void *data)
|
|||||||
|
|
||||||
case BASEBOARD_GET_SERIAL:
|
case BASEBOARD_GET_SERIAL:
|
||||||
{
|
{
|
||||||
memcpy(&sharedMemory[serialCommand.destAddress + 96], SERIAL_STRING, strlen(SERIAL_STRING));
|
memcpy(&sharedMemory[serialCommand.destAddress + 96], serialString, strlen(serialString));
|
||||||
_data[1] = 1; // Set the status to success
|
_data[1] = 1; // Set the status to success
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -76,10 +76,7 @@ int initCardReader()
|
|||||||
|
|
||||||
int carReaderGetFdIdx(int fd)
|
int carReaderGetFdIdx(int fd)
|
||||||
{
|
{
|
||||||
if (fd == serialFD[0].fd)
|
return (fd == serialFD[0].fd) ? 0 : 1;
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t cardReaderGenChecksum(int fdIdx)
|
uint8_t cardReaderGenChecksum(int fdIdx)
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
|||||||
+13
-3
@@ -174,6 +174,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
config.jvsIOType = SEGA_TYPE_1;
|
config.jvsIOType = SEGA_TYPE_1;
|
||||||
config.gameType = ABC;
|
config.gameType = ABC;
|
||||||
|
config.width = 640;
|
||||||
|
config.height = 480;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -188,6 +190,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
config.jvsIOType = SEGA_TYPE_1;
|
config.jvsIOType = SEGA_TYPE_1;
|
||||||
config.gameType = ABC;
|
config.gameType = ABC;
|
||||||
|
config.width = 640;
|
||||||
|
config.height = 480;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -249,6 +253,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameNativeResolutions = "";
|
config.gameNativeResolutions = "";
|
||||||
config.gameType = DRIVING;
|
config.gameType = DRIVING;
|
||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
|
config.width = 1280;
|
||||||
|
config.height = 768;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -262,6 +268,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameNativeResolutions = "1280x768";
|
config.gameNativeResolutions = "1280x768";
|
||||||
config.gameType = DRIVING;
|
config.gameType = DRIVING;
|
||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
|
config.width = 1280;
|
||||||
|
config.height = 768;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -275,6 +283,8 @@ static int detectGame(uint32_t elf_crc)
|
|||||||
config.gameNativeResolutions = "";
|
config.gameNativeResolutions = "";
|
||||||
config.gameType = DRIVING;
|
config.gameType = DRIVING;
|
||||||
config.gameStatus = WORKING;
|
config.gameStatus = WORKING;
|
||||||
|
config.width = 1280;
|
||||||
|
config.height = 768;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1228,7 +1238,7 @@ int readConfig(FILE *configFile, EmulatorConfig *config)
|
|||||||
config->fpsLimiter = atoi(getNextToken(NULL, " ", &saveptr));
|
config->fpsLimiter = atoi(getNextToken(NULL, " ", &saveptr));
|
||||||
|
|
||||||
else if (strcmp(command, "FPS_TARGET") == 0)
|
else if (strcmp(command, "FPS_TARGET") == 0)
|
||||||
config->fpsTarget = atoi(getNextToken(NULL, " ", &saveptr));
|
config->fpsTarget = atof(getNextToken(NULL, " ", &saveptr));
|
||||||
|
|
||||||
else if (strcmp(command, "LGJ_RENDER_WITH_MESA") == 0)
|
else if (strcmp(command, "LGJ_RENDER_WITH_MESA") == 0)
|
||||||
config->lgjRenderWithMesa = atoi(getNextToken(NULL, " ", &saveptr));
|
config->lgjRenderWithMesa = atoi(getNextToken(NULL, " ", &saveptr));
|
||||||
@@ -1264,7 +1274,7 @@ int readConfig(FILE *configFile, EmulatorConfig *config)
|
|||||||
config->phTouchCursorHeight = atoi(getNextToken(NULL, " ", &saveptr));
|
config->phTouchCursorHeight = atoi(getNextToken(NULL, " ", &saveptr));
|
||||||
|
|
||||||
else if (strcmp(command, "MJ4_ENABLED_ALL_THE_TIME") == 0)
|
else if (strcmp(command, "MJ4_ENABLED_ALL_THE_TIME") == 0)
|
||||||
config->phMode = atoi(getNextToken(NULL, " ", &saveptr));
|
config->mj4EnabledAtT = atoi(getNextToken(NULL, " ", &saveptr));
|
||||||
|
|
||||||
else if (strcmp(command, "OR2_IP") == 0)
|
else if (strcmp(command, "OR2_IP") == 0)
|
||||||
strcpy(config->or2IP, getNextToken(NULL, " ", &saveptr));
|
strcpy(config->or2IP, getNextToken(NULL, " ", &saveptr));
|
||||||
@@ -1557,7 +1567,7 @@ int initConfig(const char* configFilePath)
|
|||||||
config.jvsIOType = SEGA_TYPE_3;
|
config.jvsIOType = SEGA_TYPE_3;
|
||||||
config.GPUVendor = AUTO_DETECT_GPU;
|
config.GPUVendor = AUTO_DETECT_GPU;
|
||||||
config.fpsLimiter = 0;
|
config.fpsLimiter = 0;
|
||||||
config.fpsTarget = 60;
|
config.fpsTarget = 60.0f;
|
||||||
config.noSDL = 0;
|
config.noSDL = 0;
|
||||||
config.phMode = 2;
|
config.phMode = 2;
|
||||||
config.disableBuiltinFont = 0;
|
config.disableBuiltinFont = 0;
|
||||||
|
|||||||
@@ -261,7 +261,7 @@ typedef struct
|
|||||||
int hummerFlickerFix;
|
int hummerFlickerFix;
|
||||||
int keepAspectRatio;
|
int keepAspectRatio;
|
||||||
int fpsLimiter;
|
int fpsLimiter;
|
||||||
int fpsTarget;
|
float fpsTarget;
|
||||||
int lgjRenderWithMesa;
|
int lgjRenderWithMesa;
|
||||||
int noSDL;
|
int noSDL;
|
||||||
int phMode;
|
int phMode;
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// #pragma once
|
|
||||||
|
|
||||||
int loadNewCursor(const char *cursorFileName, void **cursor, int customWidth, int customHeight);
|
int loadNewCursor(const char *cursorFileName, void **cursor, int customWidth, int customHeight);
|
||||||
void loadCursors();
|
void loadCursors();
|
||||||
|
|||||||
+5
-19
@@ -302,6 +302,7 @@ void __attribute__((constructor)) hook_init()
|
|||||||
}
|
}
|
||||||
|
|
||||||
getGPUVendor();
|
getGPUVendor();
|
||||||
|
|
||||||
if (initPatch() != 0)
|
if (initPatch() != 0)
|
||||||
exit(1);
|
exit(1);
|
||||||
|
|
||||||
@@ -763,6 +764,7 @@ FILE *fopen(const char *restrict pathname, const char *restrict mode)
|
|||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cachedShaderFilesLoaded)
|
if (cachedShaderFilesLoaded)
|
||||||
{
|
{
|
||||||
void *addr = __builtin_return_address(0);
|
void *addr = __builtin_return_address(0);
|
||||||
@@ -1079,17 +1081,11 @@ ssize_t read(int fd, void *buf, size_t count)
|
|||||||
return driveboardRead(fd, buf, count);
|
return driveboardRead(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd == hooks[SERIAL0] && getConfig()->emulateCardreader)
|
if ((fd == hooks[SERIAL0] || fd == hooks[SERIAL1]) && getConfig()->emulateCardreader)
|
||||||
{
|
{
|
||||||
return cardReaderRead(fd, buf, count);
|
return cardReaderRead(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd == hooks[SERIAL1] && getConfig()->emulateCardreader)
|
|
||||||
{
|
|
||||||
return cardReaderRead(fd, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we don't hook the serial just reply with nothing
|
|
||||||
if (fd == hooks[SERIAL0] || fd == hooks[SERIAL1])
|
if (fd == hooks[SERIAL0] || fd == hooks[SERIAL1])
|
||||||
{
|
{
|
||||||
if (gId == PRIMEVAL_HUNT && getConfig()->emulateTouchscreen == 1)
|
if (gId == PRIMEVAL_HUNT && getConfig()->emulateTouchscreen == 1)
|
||||||
@@ -1136,11 +1132,6 @@ size_t fread(void *buf, size_t size, size_t count, FILE *stream)
|
|||||||
return freadReplace(buf, size, count, fileRead[FILE_RW2]);
|
return freadReplace(buf, size, count, fileRead[FILE_RW2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// if (stream == fileHooks[FILE_HARLEY])
|
|
||||||
// {
|
|
||||||
// return harleyFreadReplace(buf, size, count, fileHooks[FILE_HARLEY]);
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (stream == fileHooks[FILE_FONT_ABC])
|
if (stream == fileHooks[FILE_FONT_ABC])
|
||||||
{
|
{
|
||||||
memcpy(buf, fontABC + fontABCidx, size * count);
|
memcpy(buf, fontABC + fontABCidx, size * count);
|
||||||
@@ -1278,12 +1269,7 @@ ssize_t write(int fd, const void *buf, size_t count)
|
|||||||
return driveboardWrite(fd, buf, count);
|
return driveboardWrite(fd, buf, count);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fd == hooks[SERIAL0] && getConfig()->emulateCardreader)
|
if ((fd == hooks[SERIAL0] || fd == hooks[SERIAL1]) && getConfig()->emulateCardreader)
|
||||||
{
|
|
||||||
return cardReaderWrite(fd, buf, count);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (fd == hooks[SERIAL1] && getConfig()->emulateCardreader)
|
|
||||||
{
|
{
|
||||||
return cardReaderWrite(fd, buf, count);
|
return cardReaderWrite(fd, buf, count);
|
||||||
}
|
}
|
||||||
@@ -1685,7 +1671,7 @@ int setenv(const char *name, const char *value, int overwrite)
|
|||||||
/**
|
/**
|
||||||
* @brief Hook for the getenv function.
|
* @brief Hook for the getenv function.
|
||||||
*
|
*
|
||||||
* This function iFake the TEA_DIR environment variable to games that require it to run
|
* This function "Fakes" the TEA_DIR environment variable to games that require it to run
|
||||||
* @param name The name of the environment variable.
|
* @param name The name of the environment variable.
|
||||||
*/
|
*/
|
||||||
char *getenv(const char *name)
|
char *getenv(const char *name)
|
||||||
|
|||||||
+288
-514
File diff suppressed because it is too large
Load Diff
@@ -212,8 +212,8 @@ void *readJVSFrameThread(void * arg)
|
|||||||
* @param fd
|
* @param fd
|
||||||
* @return 0|1
|
* @return 0|1
|
||||||
*/
|
*/
|
||||||
int startJVSFrameThread(int * fd) {
|
int startJVSFrameThread(int *fd)
|
||||||
int fdlocal = *((int *) fd);
|
{
|
||||||
printf("SERIAL: starting thread.\n");
|
printf("SERIAL: starting thread.\n");
|
||||||
|
|
||||||
// Clean shared JVS frame buffer
|
// Clean shared JVS frame buffer
|
||||||
@@ -236,17 +236,21 @@ int startJVSFrameThread(int * fd) {
|
|||||||
* Return a JVSFrame structure with empty or full data, no in between
|
* Return a JVSFrame structure with empty or full data, no in between
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
JVSFrame readJVSFrameFromThread() {
|
JVSFrame readJVSFrameFromThread()
|
||||||
|
{
|
||||||
JVSFrame frame;
|
JVSFrame frame;
|
||||||
// Lock while reading/writing to shared frame
|
// Lock while reading/writing to shared frame
|
||||||
pthread_mutex_lock(&jvsBuffer_lock);
|
pthread_mutex_lock(&jvsBuffer_lock);
|
||||||
|
|
||||||
// Check if we have a valid frame
|
// Check if we have a valid frame
|
||||||
if (jvsFrameBuffer.ready == 1) {
|
if (jvsFrameBuffer.ready == 1)
|
||||||
|
{
|
||||||
frame = jvsFrameBuffer;
|
frame = jvsFrameBuffer;
|
||||||
// It has been red, we disable this frame
|
// It has been read, we disable this frame
|
||||||
jvsFrameBuffer.ready = 0;
|
jvsFrameBuffer.ready = 0;
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
frame.ready = 0;
|
frame.ready = 0;
|
||||||
frame.size = 0;
|
frame.size = 0;
|
||||||
memset(frame.buffer, 0, JVSBUFFER_SIZE);
|
memset(frame.buffer, 0, JVSBUFFER_SIZE);
|
||||||
|
|||||||
@@ -2136,6 +2136,7 @@ int initPatch()
|
|||||||
detourFunction(0x084d44fc, amDipswSetLed);
|
detourFunction(0x084d44fc, amDipswSetLed);
|
||||||
detourFunction(0x084d4485, amDipswGetData);
|
detourFunction(0x084d4485, amDipswGetData);
|
||||||
patchMemory(0x0804edb2, "9090909090"); //__intel_new_proc_init_P
|
patchMemory(0x0804edb2, "9090909090"); //__intel_new_proc_init_P
|
||||||
|
detourFunction(0x08178e6c, stubRetOne); // _ZN7am_ctrl18SetNetworkAddrEth0Ejj.
|
||||||
|
|
||||||
detourFunction(0x0804e594, gl_XGetProcAddressARB);
|
detourFunction(0x0804e594, gl_XGetProcAddressARB);
|
||||||
srtvElfShaderPatcher();
|
srtvElfShaderPatcher();
|
||||||
|
|||||||
+250
-29
@@ -48,11 +48,6 @@ float newReducedWidthABC, newReducedHeightABC;
|
|||||||
float newHalfWidthABC, newHalfHeightABC;
|
float newHalfWidthABC, newHalfHeightABC;
|
||||||
float newWidthRangeABC, newHeightRangeABC;
|
float newWidthRangeABC, newHeightRangeABC;
|
||||||
double new410ABC, new330ABC, new280ABC, new200ABC;
|
double new410ABC, new330ABC, new280ABC, new200ABC;
|
||||||
uint32_t *newWidthRangePtr_CEI_ABC, *newHeightRangePtr_CEI_ABC;
|
|
||||||
uint32_t *newWidthPtrABC, *newHeightPtrABC;
|
|
||||||
uint32_t *newReducedWidthPtrABC, *newReducedHeightPtrABC;
|
|
||||||
uint32_t *newHalfWidthPtrABC, *newHalfHeightPtrABC;
|
|
||||||
uint32_t *new410PtrABC, *new330PtrABC, *new280PtrABC, *new200PtrABC;
|
|
||||||
float angleABC;
|
float angleABC;
|
||||||
|
|
||||||
float newVT3, newVT3HW, newVT3HH;
|
float newVT3, newVT3HW, newVT3HH;
|
||||||
@@ -68,6 +63,9 @@ int idTextShift = 0;
|
|||||||
float id4NewCaptionY;
|
float id4NewCaptionY;
|
||||||
float idShiftX = 0.0;
|
float idShiftX = 0.0;
|
||||||
float isShiftY = 0.0;
|
float isShiftY = 0.0;
|
||||||
|
|
||||||
|
float newHeightLGJ, newWidth2LGJ, newWidthHLGJ, newWidthSLGJ;
|
||||||
|
|
||||||
bool myEnableScaling = false;
|
bool myEnableScaling = false;
|
||||||
|
|
||||||
int hummerRespatch()
|
int hummerRespatch()
|
||||||
@@ -1062,15 +1060,15 @@ void patchABCMarkers(uint32_t addrCtrlEnemyInfo, uint32_t addrCtrlPlayerRivalFon
|
|||||||
new280ABC = (gWidth / 2.0) - 40.0; // 280
|
new280ABC = (gWidth / 2.0) - 40.0; // 280
|
||||||
new200ABC = (gHeight / 2.0) - 40.0; // 200
|
new200ABC = (gHeight / 2.0) - 40.0; // 200
|
||||||
|
|
||||||
newWidthPtrABC = (uint32_t *)&newWidthABC;
|
uint32_t *newWidthPtrABC = (uint32_t *)&newWidthABC;
|
||||||
newHeightPtrABC = (uint32_t *)&newHeightABC;
|
uint32_t *newHeightPtrABC = (uint32_t *)&newHeightABC;
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x15b, (size_t)newWidthPtrABC); // 640
|
setVariable(addrCtrlPlayerRivalFont + 0x15b, (size_t)newWidthPtrABC); // 640
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x163, (size_t)newHeightPtrABC); // 480
|
setVariable(addrCtrlPlayerRivalFont + 0x163, (size_t)newHeightPtrABC); // 480
|
||||||
setVariable(addrCtrlEnemyPursuit2d + 0x80, (size_t)newWidthPtrABC); // 640
|
setVariable(addrCtrlEnemyPursuit2d + 0x80, (size_t)newWidthPtrABC); // 640
|
||||||
setVariable(addrCtrlEnemyPursuit2d + 0x88, (size_t)newHeightPtrABC); // 480
|
setVariable(addrCtrlEnemyPursuit2d + 0x88, (size_t)newHeightPtrABC); // 480
|
||||||
|
|
||||||
newReducedWidthPtrABC = (uint32_t *)&newReducedWidthABC;
|
uint32_t *newReducedWidthPtrABC = (uint32_t *)&newReducedWidthABC;
|
||||||
newReducedHeightPtrABC = (uint32_t *)&newReducedHeightABC;
|
uint32_t *newReducedHeightPtrABC = (uint32_t *)&newReducedHeightABC;
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x272, (size_t)newReducedWidthPtrABC); // 600
|
setVariable(addrCtrlPlayerRivalFont + 0x272, (size_t)newReducedWidthPtrABC); // 600
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x29f, (size_t)newReducedHeightPtrABC); // 440
|
setVariable(addrCtrlPlayerRivalFont + 0x29f, (size_t)newReducedHeightPtrABC); // 440
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x8ff, *(uint32_t *)&newReducedHeightABC); // 440
|
setVariable(addrCtrlPlayerRivalFont + 0x8ff, *(uint32_t *)&newReducedHeightABC); // 440
|
||||||
@@ -1081,8 +1079,8 @@ void patchABCMarkers(uint32_t addrCtrlEnemyInfo, uint32_t addrCtrlPlayerRivalFon
|
|||||||
setVariable(addrCtrlEnemyPursuit2d + 0x7b3, *(uint32_t *)&newReducedHeightABC); // 440
|
setVariable(addrCtrlEnemyPursuit2d + 0x7b3, *(uint32_t *)&newReducedHeightABC); // 440
|
||||||
setVariable(addrCtrlEnemyPursuit2d + 0x812, *(uint32_t *)&newReducedHeightABC); // 440
|
setVariable(addrCtrlEnemyPursuit2d + 0x812, *(uint32_t *)&newReducedHeightABC); // 440
|
||||||
|
|
||||||
newHalfWidthPtrABC = (uint32_t *)&newHalfWidthABC;
|
uint32_t *newHalfWidthPtrABC = (uint32_t *)&newHalfWidthABC;
|
||||||
newHalfHeightPtrABC = (uint32_t *)&newHalfHeightABC;
|
uint32_t *newHalfHeightPtrABC = (uint32_t *)&newHalfHeightABC;
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x346, (size_t)newHalfWidthPtrABC); // 320
|
setVariable(addrCtrlPlayerRivalFont + 0x346, (size_t)newHalfWidthPtrABC); // 320
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x34e, (size_t)newHalfHeightPtrABC); // 240
|
setVariable(addrCtrlPlayerRivalFont + 0x34e, (size_t)newHalfHeightPtrABC); // 240
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x4cb, (size_t)newHalfWidthPtrABC); // 320
|
setVariable(addrCtrlPlayerRivalFont + 0x4cb, (size_t)newHalfWidthPtrABC); // 320
|
||||||
@@ -1108,10 +1106,10 @@ void patchABCMarkers(uint32_t addrCtrlEnemyInfo, uint32_t addrCtrlPlayerRivalFon
|
|||||||
setVariable(addrCtrlEnemyPursuit2d + 0x4ea, *(uint32_t *)&newWidthRangeABC); // 730
|
setVariable(addrCtrlEnemyPursuit2d + 0x4ea, *(uint32_t *)&newWidthRangeABC); // 730
|
||||||
setVariable(addrCtrlEnemyPursuit2d + 0x77b, *(uint32_t *)&newHeightRangeABC); // 570
|
setVariable(addrCtrlEnemyPursuit2d + 0x77b, *(uint32_t *)&newHeightRangeABC); // 570
|
||||||
|
|
||||||
new410PtrABC = (uint32_t *)&new410ABC;
|
uint32_t *new410PtrABC = (uint32_t *)&new410ABC;
|
||||||
new330PtrABC = (uint32_t *)&new330ABC;
|
uint32_t *new330PtrABC = (uint32_t *)&new330ABC;
|
||||||
new280PtrABC = (uint32_t *)&new280ABC;
|
uint32_t *new280PtrABC = (uint32_t *)&new280ABC;
|
||||||
new200PtrABC = (uint32_t *)&new200ABC;
|
uint32_t *new200PtrABC = (uint32_t *)&new200ABC;
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x40e, (size_t)new410PtrABC); // 410
|
setVariable(addrCtrlPlayerRivalFont + 0x40e, (size_t)new410PtrABC); // 410
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x44a, (size_t)new330PtrABC); // 330
|
setVariable(addrCtrlPlayerRivalFont + 0x44a, (size_t)new330PtrABC); // 330
|
||||||
setVariable(addrCtrlPlayerRivalFont + 0x5de, (size_t)new280PtrABC); // 280
|
setVariable(addrCtrlPlayerRivalFont + 0x5de, (size_t)new280PtrABC); // 280
|
||||||
@@ -1267,6 +1265,182 @@ void glVertex3fHOD4(GLfloat x, GLfloat y, GLfloat z)
|
|||||||
_glVertex3f(x, y, z);
|
_glVertex3f(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void tooSpicySC(uint32_t param_1, uint32_t param_2)
|
||||||
|
{
|
||||||
|
myEnableScaling = true;
|
||||||
|
SDL_WarpMouseInWindow(SDLwindow, 1280 / 2, 768 / 2);
|
||||||
|
((void (*)(uint32_t, uint32_t))0x082fa77c)(param_1, param_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void tooSpicyPR(uint32_t param_1, uint32_t param_2)
|
||||||
|
{
|
||||||
|
myEnableScaling = false;
|
||||||
|
((void (*)(uint32_t, uint32_t))0x081eb4d4)(param_1, param_2);
|
||||||
|
}
|
||||||
|
|
||||||
|
int tooSpicyVsprintf(char *str, const char *format, va_list arg)
|
||||||
|
{
|
||||||
|
int (*_vsprintf)(char *str, const char *format, va_list arg) = dlsym(RTLD_NEXT, "vsprintf");
|
||||||
|
|
||||||
|
int res = _vsprintf(str, format, arg);
|
||||||
|
|
||||||
|
if (strcmp(str, "Additional 475") == 0)
|
||||||
|
{
|
||||||
|
myEnableScaling = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
void glVertex3f2SP(GLfloat x, GLfloat y, GLfloat z)
|
||||||
|
{
|
||||||
|
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
||||||
|
|
||||||
|
void *returnAddress = __builtin_return_address(0);
|
||||||
|
|
||||||
|
float scaleX = gWidth / 1280.0f;
|
||||||
|
float scaleY = gHeight / 768.0f;
|
||||||
|
|
||||||
|
float TestX = ((((gWidth - 1280.0) / 2.0) * 1.1116317809) / 1280.0) * (1.5 / scaleX);
|
||||||
|
float TestY = ((((gHeight - 768.0) / 2.0) * 0.666979044) / 768.0) * (1.5 / scaleX);
|
||||||
|
|
||||||
|
float OffsetX = TestX; // test
|
||||||
|
float OffsetY = TestY;
|
||||||
|
|
||||||
|
float scaleZ = fabs(z) / 1.510000;
|
||||||
|
|
||||||
|
float AdjOffsetX = OffsetX * scaleZ;
|
||||||
|
float AdjOffsetY = OffsetY * scaleZ;
|
||||||
|
|
||||||
|
if (z == -1.000000f || z == -3.000000f)
|
||||||
|
{
|
||||||
|
// We skip 3d and videos
|
||||||
|
;
|
||||||
|
}
|
||||||
|
else if (z == -1.010000f)
|
||||||
|
{
|
||||||
|
// bd main
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.510000f)
|
||||||
|
{
|
||||||
|
// logo - coin/start - 2D
|
||||||
|
if (curTextureID == 497) // right
|
||||||
|
{
|
||||||
|
x -= OffsetX;
|
||||||
|
y -= OffsetY;
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (curTextureID == 498)
|
||||||
|
{ // deadend
|
||||||
|
;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
x += OffsetX;
|
||||||
|
y -= OffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (z == -1.460000f)
|
||||||
|
{
|
||||||
|
// 2D title
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.490000f)
|
||||||
|
{
|
||||||
|
// 2D title
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.500000f)
|
||||||
|
{
|
||||||
|
// 2D title
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.310000f)
|
||||||
|
{
|
||||||
|
// 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.210000f)
|
||||||
|
{
|
||||||
|
// 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.5109999180f)
|
||||||
|
{
|
||||||
|
// 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z == -1.200000f)
|
||||||
|
{
|
||||||
|
// target - select
|
||||||
|
if (curTextureID == 454 || curTextureID == 461 || curTextureID == 456)
|
||||||
|
{
|
||||||
|
// 457 X - 454 461 456 O
|
||||||
|
if (myEnableScaling)
|
||||||
|
{
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (z == -1.710000f)
|
||||||
|
{
|
||||||
|
// 2D
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
else if (z > -1.85f)
|
||||||
|
{
|
||||||
|
// 2d
|
||||||
|
x += AdjOffsetX;
|
||||||
|
y -= AdjOffsetY;
|
||||||
|
|
||||||
|
x *= scaleX;
|
||||||
|
y *= scaleY;
|
||||||
|
}
|
||||||
|
|
||||||
|
_glVertex3f(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
||||||
{
|
{
|
||||||
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
||||||
@@ -1286,11 +1460,6 @@ void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
|||||||
y *= scaleY;
|
y *= scaleY;
|
||||||
}
|
}
|
||||||
void *addr = __builtin_return_address(0);
|
void *addr = __builtin_return_address(0);
|
||||||
// printf("glVertex3f is hooked: x=%f, y=%f, z=%f\n", x, y, z);
|
|
||||||
// printf("z values: %.10f\n", z);
|
|
||||||
|
|
||||||
// if ( z == -3517.2272949219f){ //1360x768
|
|
||||||
// if ( z == -4271.795898f){ //900p
|
|
||||||
if (z == -5300.7529296875)
|
if (z == -5300.7529296875)
|
||||||
{ // 1080p
|
{ // 1080p
|
||||||
printf("glVertex3f hooked: x=%f, y=%f, z=%f, addr: %p\n", x, y, z, addr);
|
printf("glVertex3f hooked: x=%f, y=%f, z=%f, addr: %p\n", x, y, z, addr);
|
||||||
@@ -1301,6 +1470,38 @@ void glVertex3fHarley(GLfloat x, GLfloat y, GLfloat z)
|
|||||||
_glVertex3f(x, y, z);
|
_glVertex3f(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void glVertex3fHodEx(GLfloat x, GLfloat y, GLfloat z)
|
||||||
|
{
|
||||||
|
int (*_glVertex3f)(GLfloat x, GLfloat y, GLfloat z) = dlsym(RTLD_NEXT, "glVertex3f");
|
||||||
|
|
||||||
|
float scaleX = 600.0 / gWidth;
|
||||||
|
float scaleY = 240.0 / gHeight;
|
||||||
|
|
||||||
|
if (z == -1.210000f && (y == 0.0035231018f || y == -0.0152667547f || y == -0.0209428426f || // coin/start
|
||||||
|
y == -0.0397327021f || y == -0.0454087853f || y == -0.0641986430f || y == -0.0790739134f ||
|
||||||
|
y == -0.0931663215f || y == -0.0692875385f || y == -0.0833799466f ||
|
||||||
|
|
||||||
|
y == 0.0456045270f || y == 0.0268146675f || y == 0.0211385805f || y == 0.0023487248f || y == -0.0033273622f ||
|
||||||
|
y == -0.0221172161f || y == -0.0787803382f || y == -0.0934598967f ||
|
||||||
|
|
||||||
|
y == 0.0524549857f || y == 0.0336651318f || y == 0.0279890448f || y == 0.0091991890f
|
||||||
|
|
||||||
|
))
|
||||||
|
{
|
||||||
|
|
||||||
|
x += scaleX;
|
||||||
|
y -= scaleY;
|
||||||
|
}
|
||||||
|
else if (y == 0.0042380672f || y == -0.0169522688f || y == 0.0360235684f || y == 0.0148332343f)
|
||||||
|
{ // Main bd
|
||||||
|
|
||||||
|
x += scaleX;
|
||||||
|
y -= scaleY;
|
||||||
|
}
|
||||||
|
|
||||||
|
_glVertex3f(x, y, z);
|
||||||
|
}
|
||||||
|
|
||||||
int initResolutionPatches()
|
int initResolutionPatches()
|
||||||
{
|
{
|
||||||
gWidth = getConfig()->width;
|
gWidth = getConfig()->width;
|
||||||
@@ -2233,23 +2434,18 @@ int initResolutionPatches()
|
|||||||
|
|
||||||
setVariable(0x080d6ea0, gWidth); // 800
|
setVariable(0x080d6ea0, gWidth); // 800
|
||||||
setVariable(0x080d6eaa, gHeight); // 600
|
setVariable(0x080d6eaa, gHeight); // 600
|
||||||
|
|
||||||
setVariable(0x080cf6ac, gWidth); // 800
|
|
||||||
setVariable(0x080cf6b9, gHeight); // 600
|
|
||||||
patchMemory(0x08303c27, "01"); // FSAA
|
patchMemory(0x08303c27, "01"); // FSAA
|
||||||
|
|
||||||
float newWidthLGJ = (float)gWidth;
|
newHeightLGJ = (float)gHeight;
|
||||||
float newHeightLGJ = (float)gHeight;
|
|
||||||
uint32_t *newWidthPtrLGJ = (uint32_t *)&newWidthLGJ;
|
|
||||||
uint32_t *newHeightPtrLGJ = (uint32_t *)&newHeightLGJ;
|
uint32_t *newHeightPtrLGJ = (uint32_t *)&newHeightLGJ;
|
||||||
|
|
||||||
float newWidth2LGJ = (float)gWidth * 2.0;
|
newWidth2LGJ = (float)gWidth * 2.0;
|
||||||
uint32_t *newWidth2PtrLGJ = (uint32_t *)&newWidth2LGJ;
|
uint32_t *newWidth2PtrLGJ = (uint32_t *)&newWidth2LGJ;
|
||||||
unsigned int address = 0x080cb730;
|
unsigned int address = 0x080cb730;
|
||||||
|
|
||||||
float newWidthHLGJ = (float)gWidth / 2.0;
|
newWidthHLGJ = (float)gWidth / 2.0;
|
||||||
uint32_t *newWidthHPtrLGJ = (uint32_t *)&newWidthHLGJ;
|
uint32_t *newWidthHPtrLGJ = (uint32_t *)&newWidthHLGJ;
|
||||||
float newWidthSLGJ = 1360.0 / (float)gWidth;
|
newWidthSLGJ = 1360.0 / (float)gWidth;
|
||||||
uint32_t *newWidthSPtrLGJ = (uint32_t *)&newWidthSLGJ;
|
uint32_t *newWidthSPtrLGJ = (uint32_t *)&newWidthSLGJ;
|
||||||
unsigned int addressC = 0x080cb3be;
|
unsigned int addressC = 0x080cb3be;
|
||||||
|
|
||||||
@@ -2655,6 +2851,21 @@ int initResolutionPatches()
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
setVariable(0x08785b80, gWidth); // main
|
||||||
|
setVariable(0x08785b84, gHeight);
|
||||||
|
|
||||||
|
patchMemory(0x082a3222, "02");
|
||||||
|
setVariable(0x08785ad8, 1360); // sprite res 1280x768
|
||||||
|
setVariable(0x08785adc, 768);
|
||||||
|
setVariable(0x087859b8, 1360); // sprite res 640x480
|
||||||
|
setVariable(0x087859bc, 768);
|
||||||
|
|
||||||
|
patchMemory(0x081775d2, "b801000000"); // target
|
||||||
|
patchMemory(0x0804e5d2, "909090909090");
|
||||||
|
|
||||||
|
setVariable(0x087aa080, gWidth); // render res
|
||||||
|
patchMemory(0x0804e60c, "909090909090");
|
||||||
|
patchMemory(0x0828cc2f, "909090909090");
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TOO_SPICY:
|
case TOO_SPICY:
|
||||||
@@ -2669,6 +2880,16 @@ int initResolutionPatches()
|
|||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
setVariable(0x08202b22, gWidth); // render res
|
||||||
|
patchMemory(0x08202b19, "74");
|
||||||
|
setVariable(0x08664410, gWidth); // 1280x768
|
||||||
|
setVariable(0x08664414, gHeight);
|
||||||
|
detourFunction(0x0804d0d0, glVertex3f2SP);
|
||||||
|
detourFunction(0x0804dda0, myGlBindTexture);
|
||||||
|
replaceCallAtAddress(0x080d96ff, tooSpicySC);
|
||||||
|
replaceCallAtAddress(0x080da026, tooSpicyPR);
|
||||||
|
detourFunction(0x0804ce10, tooSpicyVsprintf);
|
||||||
|
patchMemory(0x081f96b9, "02"); // 5
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case TOO_SPICY_TEST:
|
case TOO_SPICY_TEST:
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ void initSDL(int *argcp, char **argv)
|
|||||||
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
|
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE;
|
uint32_t windowFlags = SDL_WINDOW_OPENGL;
|
||||||
|
|
||||||
strcat(SDLgameTitle, getGameName());
|
strcat(SDLgameTitle, getGameName());
|
||||||
|
|
||||||
@@ -156,6 +156,16 @@ void initSDL(int *argcp, char **argv)
|
|||||||
fprintf(stderr, "OpenGL context could not be created! SDL_Error: %s\n", SDL_GetError());
|
fprintf(stderr, "OpenGL context could not be created! SDL_Error: %s\n", SDL_GetError());
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
glClearColor(0.1f, 0.1f, 0.1f, 1.0f); // Your bg color
|
||||||
|
|
||||||
|
// Force initial clear
|
||||||
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
SDL_GL_SwapWindow(SDLwindow);
|
||||||
|
|
||||||
|
// Now show the window
|
||||||
|
SDL_ShowWindow(SDLwindow);
|
||||||
|
|
||||||
printf(" SDL RESOLUTION: %dx%d\n\n", getConfig()->width, getConfig()->height);
|
printf(" SDL RESOLUTION: %dx%d\n\n", getConfig()->width, getConfig()->height);
|
||||||
|
|
||||||
if (getConfig()->fullscreen)
|
if (getConfig()->fullscreen)
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#ifndef __i386__
|
#ifndef __i386__
|
||||||
#define __i386__
|
#define __i386__
|
||||||
|
|
||||||
#include "log.h"
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#endif
|
#endif
|
||||||
#undef __x86_64__
|
#undef __x86_64__
|
||||||
@@ -1548,7 +1547,9 @@ char *findLibCg()
|
|||||||
const char *foundPath = NULL;
|
const char *foundPath = NULL;
|
||||||
FILE *libCgF = NULL;
|
FILE *libCgF = NULL;
|
||||||
|
|
||||||
char *pathsToCheck[] = {NULL, "/app/lib32/libCg2.so", "./libCg.so", NULL};
|
char appImageLib[MAX_PATH_LENGTH];
|
||||||
|
snprintf(appImageLib, MAX_PATH_LENGTH, "%s/usr/lib32/libCg2.so", getenv("APP_IMG_ROOT"));
|
||||||
|
char *pathsToCheck[] = {NULL, "/app/lib32/libCg2.so", appImageLib, "./libCg.so", NULL};
|
||||||
|
|
||||||
if (strcmp(getConfig()->libCgPath, "") != 0)
|
if (strcmp(getConfig()->libCgPath, "") != 0)
|
||||||
{
|
{
|
||||||
@@ -1560,13 +1561,13 @@ char *findLibCg()
|
|||||||
{
|
{
|
||||||
size_t pathLen = strlen(currentDir) + strlen("/libCg.so") + 1;
|
size_t pathLen = strlen(currentDir) + strlen("/libCg.so") + 1;
|
||||||
pathsToCheck[3] = malloc(pathLen);
|
pathsToCheck[3] = malloc(pathLen);
|
||||||
if (pathsToCheck[3] != NULL)
|
if (pathsToCheck[4] != NULL)
|
||||||
{
|
{
|
||||||
snprintf(pathsToCheck[3], pathLen, "%s/%s", currentDir, "libCg.so");
|
snprintf(pathsToCheck[4], pathLen, "%s/%s", currentDir, "libCg.so");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 4; ++i)
|
for (int i = 0; i < 5; ++i)
|
||||||
{
|
{
|
||||||
if (pathsToCheck[i] == NULL)
|
if (pathsToCheck[i] == NULL)
|
||||||
continue;
|
continue;
|
||||||
@@ -1578,9 +1579,9 @@ char *findLibCg()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foundPath != pathsToCheck[3] && pathsToCheck[3] != NULL)
|
if (foundPath != pathsToCheck[4] && pathsToCheck[4] != NULL)
|
||||||
{
|
{
|
||||||
free(pathsToCheck[3]);
|
free(pathsToCheck[4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (foundPath == NULL)
|
if (foundPath == NULL)
|
||||||
|
|||||||
@@ -60,6 +60,20 @@ Display *XOpenDisplay(const char *display_name)
|
|||||||
return x11Display;
|
return x11Display;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setWindowProperties(Display *display, Window window)
|
||||||
|
{
|
||||||
|
XSizeHints *hints = XAllocSizeHints();
|
||||||
|
|
||||||
|
hints->flags = PMinSize | PMaxSize;
|
||||||
|
hints->min_width = hints->max_width = getConfig()->width;
|
||||||
|
hints->min_height = hints->max_height = getConfig()->height;
|
||||||
|
XSetWMNormalHints(display, window, hints);
|
||||||
|
XFree(hints);
|
||||||
|
Atom hintsAtom = XInternAtom(display, "_MOTIF_WM_HINTS", False);
|
||||||
|
XMapWindow(display, window);
|
||||||
|
XFlush(display);
|
||||||
|
}
|
||||||
|
|
||||||
Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int border_width,
|
Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int border_width,
|
||||||
int depth, unsigned int class, Visual *visual, unsigned long valueMask, XSetWindowAttributes *attributes)
|
int depth, unsigned int class, Visual *visual, unsigned long valueMask, XSetWindowAttributes *attributes)
|
||||||
{
|
{
|
||||||
@@ -98,9 +112,21 @@ Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int
|
|||||||
{
|
{
|
||||||
window = x11Window;
|
window = x11Window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Eliminate the maximize window button and no more resizing
|
||||||
|
if (!gettingGPUVendor && !creatingWindow)
|
||||||
|
setWindowProperties(display, window);
|
||||||
|
|
||||||
return window;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Here we prevent the games to change the window properties
|
||||||
|
void XSetWMProperties(Display *display, Window w, XTextProperty *window_name, XTextProperty *icon_name, char **argv, int argc,
|
||||||
|
XSizeHints *normal_hints, XWMHints *wm_hints, XClassHint *class_hints)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
int XGrabPointer(Display *display, Window grab_window, Bool owner_events, unsigned int event_mask, int pointer_mode,
|
int XGrabPointer(Display *display, Window grab_window, Bool owner_events, unsigned int event_mask, int pointer_mode,
|
||||||
int keyboard_mode, Window confine_to, Cursor cursor, Time time)
|
int keyboard_mode, Window confine_to, Cursor cursor, Time time)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user