mirror of
https://github.com/lindbergh-loader/lindbergh-loader.git
synced 2026-10-14 01:49:12 +03:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0e8b3b4a59 | ||
|
|
f17dd93778 | ||
|
|
e359cbb0bd | ||
|
|
72f70ccda1 | ||
|
|
0a29307870 | ||
|
|
d202f31717 | ||
|
|
a68dcbbdcf | ||
|
|
75642e285e | ||
|
|
d9d076f120 | ||
|
|
a5633bbf1d | ||
|
|
d72ac379ea | ||
|
|
c5c44ce395 | ||
|
|
988a9ee6e3 | ||
|
|
ea19a688cc | ||
|
|
c5fa5871d1 | ||
|
|
5be9aef4e0 | ||
|
|
f89f8e41ab | ||
|
|
ad085a1610 | ||
|
|
edba8bac7a | ||
|
|
98c6b740fd | ||
|
|
32d7347282 | ||
|
|
d500a5b80d | ||
|
|
e9390c85fa | ||
|
|
412d19e5f9 | ||
|
|
a374dec081 | ||
|
|
d1c98e6a7f | ||
|
|
1ade940d2f | ||
|
|
2e2a2b4052 | ||
|
|
23152f5788 | ||
|
|
efe34307e3 | ||
|
|
11b657e961 | ||
|
|
5ea59a05fd | ||
|
|
8d1f2764f3 | ||
|
|
f677f1cd3f | ||
|
|
3cd8e7019f | ||
|
|
38643436f2 | ||
|
|
527bdc418f | ||
|
|
a3e3f51003 | ||
|
|
a96b1fcf30 | ||
|
|
6e751f16f0 | ||
|
|
03ccfd3449 | ||
|
|
4e82f6fdef | ||
|
|
ccf54ab6ad | ||
|
|
1fb45a1e5c | ||
|
|
9bbc0f983e | ||
|
|
cc500aa7ef | ||
|
|
cafd6276c3 | ||
|
|
a2dbf1cbda | ||
|
|
74d61985ec | ||
|
|
4d0996b905 | ||
|
|
52cb3eaf6b | ||
|
|
8b6604efc5 | ||
|
|
7b426f0d11 | ||
|
|
442d03b144 | ||
|
|
50a1a35f7f | ||
|
|
728c308835 | ||
|
|
543ebe4817 | ||
|
|
3c3f0f5eb5 | ||
|
|
fe2c749bb0 | ||
|
|
1f20a51aba | ||
|
|
d3e6027139 | ||
|
|
565a9208b7 | ||
|
|
be78a23a31 | ||
|
|
8942c510ec | ||
|
|
8347b61468 | ||
|
|
3642e2392b |
@@ -0,0 +1,29 @@
|
|||||||
|
name: 🐧 Linux AppImage
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux-appimage:
|
||||||
|
name: "Build"
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
timeout-minutes: 120
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
|
||||||
|
- name: Install Packages
|
||||||
|
run: scripts/appimage/install-packages.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"
|
||||||
@@ -1,73 +0,0 @@
|
|||||||
name: Build and Release Lindbergh
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
# Checkout the repository
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v3
|
|
||||||
|
|
||||||
# Set up Docker Buildx
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@v2
|
|
||||||
|
|
||||||
# Build the Docker image
|
|
||||||
- name: Build Docker image
|
|
||||||
run: |
|
|
||||||
docker build --target lindbergh-build -t lindbergh-loader .
|
|
||||||
|
|
||||||
# Extract build artifacts
|
|
||||||
- name: Extract build artifacts
|
|
||||||
run: |
|
|
||||||
docker create --name lindbergh-builder lindbergh-loader
|
|
||||||
docker cp lindbergh-builder:/output ./build
|
|
||||||
docker rm lindbergh-builder
|
|
||||||
|
|
||||||
# Compress the build directory
|
|
||||||
- name: Compress build directory
|
|
||||||
run: tar -czvf build.tar.gz -C ./build .
|
|
||||||
|
|
||||||
# Archive the build directory as an artifact for debugging
|
|
||||||
- name: Archive build directory
|
|
||||||
uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: build-output
|
|
||||||
path: ./build
|
|
||||||
|
|
||||||
# Create a GitHub release and capture the upload URL (only on push events)
|
|
||||||
- name: Create Release
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
id: create_release
|
|
||||||
uses: actions/create-release@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
tag_name: v${{ github.run_number }}
|
|
||||||
release_name: "Build v${{ github.run_number }}"
|
|
||||||
draft: false
|
|
||||||
prerelease: false
|
|
||||||
|
|
||||||
# Upload the compressed build artifact to the release (only on push events)
|
|
||||||
- name: Upload Release Asset
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
uses: actions/upload-release-asset@v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
||||||
asset_path: ./build.tar.gz
|
|
||||||
asset_name: build.tar.gz
|
|
||||||
asset_content_type: application/gzip
|
|
||||||
@@ -0,0 +1,44 @@
|
|||||||
|
name: 📦 Linux Flatpak
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux-flatpak-build:
|
||||||
|
name: "Build"
|
||||||
|
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
container:
|
||||||
|
image: ghcr.io/flathub-infra/flatpak-github-actions:kde-6.8
|
||||||
|
options: --privileged
|
||||||
|
timeout-minutes: 60
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
fetch-depth: 0
|
||||||
|
set-safe-directory: ${{ env.GITHUB_WORKSPACE }}
|
||||||
|
|
||||||
|
# Work around container ownership issue
|
||||||
|
- name: Set Safe Directory
|
||||||
|
shell: bash
|
||||||
|
run: git config --global --add safe.directory "*"
|
||||||
|
|
||||||
|
- name: Build Flatpak
|
||||||
|
uses: flathub-infra/flatpak-github-actions/flatpak-builder@master
|
||||||
|
with:
|
||||||
|
bundle: lindbergh-loader.flatpak
|
||||||
|
upload-artifact: false
|
||||||
|
manifest-path: scripts/flatpak/com.github.lindberghloader.yml
|
||||||
|
build-bundle: true
|
||||||
|
verbose: true
|
||||||
|
branch: stable
|
||||||
|
cache: true
|
||||||
|
restore-cache: true
|
||||||
|
cache-key: flatpak-${{ hashFiles('scripts/flatpak/*.yaml') }}
|
||||||
|
|
||||||
|
- name: Upload Flatpak
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: "linux-flatpak"
|
||||||
|
path: "lindbergh-loader.flatpak"
|
||||||
@@ -0,0 +1,45 @@
|
|||||||
|
name: Build and Release Lindbergh
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_call:
|
||||||
|
workflow_dispatch:
|
||||||
|
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build-and-release:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
# Checkout the repository
|
||||||
|
- name: Checkout repository
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
# Set up Docker Buildx
|
||||||
|
- name: Set up Docker Buildx
|
||||||
|
uses: docker/setup-buildx-action@v2
|
||||||
|
|
||||||
|
# Build the Docker image
|
||||||
|
- name: Build Docker image
|
||||||
|
run: |
|
||||||
|
docker build --target lindbergh-build -t lindbergh-loader .
|
||||||
|
|
||||||
|
# Extract build artifacts
|
||||||
|
- name: Extract build artifacts
|
||||||
|
run: |
|
||||||
|
docker create --name lindbergh-builder lindbergh-loader
|
||||||
|
docker cp lindbergh-builder:/output ./build
|
||||||
|
docker rm lindbergh-builder
|
||||||
|
|
||||||
|
# Compress the build directory
|
||||||
|
- name: Compress build directory
|
||||||
|
run: tar -czvf build.tar.gz -C ./build .
|
||||||
|
|
||||||
|
# Archive the build directory as an artifact for debugging
|
||||||
|
- name: Archive build directory
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: linux-build
|
||||||
|
path: build.tar.gz
|
||||||
|
|
||||||
@@ -0,0 +1,61 @@
|
|||||||
|
name: Automated Builds
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
pull_request:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- '.github/ISSUE_TEMPLATE/*'
|
||||||
|
- '.docs/changelog'
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
paths-ignore:
|
||||||
|
- '**.md'
|
||||||
|
- '.github/ISSUE_TEMPLATE/*'
|
||||||
|
- '.docs/changelog'
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
linux-build:
|
||||||
|
name: 💻 Linux
|
||||||
|
uses: "./.github/workflows/linux-build.yml"
|
||||||
|
linux-flatpak:
|
||||||
|
name: 📦 Linux Flatpak
|
||||||
|
uses: "./.github/workflows/flatpak-build.yml"
|
||||||
|
linux-appimage:
|
||||||
|
name: 📦 Linux AppImage
|
||||||
|
uses: "./.github/workflows/appimage-build.yml"
|
||||||
|
|
||||||
|
create-release:
|
||||||
|
name: 📤 Create Release
|
||||||
|
needs: [linux-build, linux-flatpak, linux-appimage]
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
steps:
|
||||||
|
- name: Download Artifacts
|
||||||
|
uses: actions/download-artifact@v4
|
||||||
|
with:
|
||||||
|
path: ./artifacts/
|
||||||
|
|
||||||
|
- name: Display Downloaded Artifacts
|
||||||
|
run: find ./artifacts/
|
||||||
|
|
||||||
|
- name: Add 161 to github.run_number
|
||||||
|
run: |
|
||||||
|
NEW_RUN_NUMBER=$(( ${{ github.run_number }} + 161 ))
|
||||||
|
echo "NEW_RUN_NUMBER=$NEW_RUN_NUMBER" >> $GITHUB_ENV
|
||||||
|
|
||||||
|
- name: Create Preview Release
|
||||||
|
if: github.ref == 'refs/heads/master'
|
||||||
|
uses: "marvinpinto/action-automatic-releases@latest"
|
||||||
|
with:
|
||||||
|
repo_token: "${{ secrets.GITHUB_TOKEN }}"
|
||||||
|
automatic_release_tag: v${{ env.NEW_RUN_NUMBER }}
|
||||||
|
prerelease: false
|
||||||
|
title: "Build v${{ env.NEW_RUN_NUMBER }}"
|
||||||
|
files: |
|
||||||
|
./artifacts/linux-flatpak/lindbergh-loader.flatpak
|
||||||
|
./artifacts/linux-build/build.tar.gz
|
||||||
|
./artifacts/linux-appimage/lindbergh-loader.AppImage
|
||||||
@@ -1,7 +1,8 @@
|
|||||||
CC = gcc -m32 -pthread
|
CC ?= gcc
|
||||||
CFLAGS = -g -fPIC -m32 -Wall -Werror -Wno-misleading-indentation -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-function -D_GNU_SOURCE -Wno-char-subscripts
|
CFLAGS = -g -fPIC -m32 -pthread -Wall -Werror -Wno-misleading-indentation -Wno-unused-but-set-variable -Wno-unused-variable -Wno-unused-function -D_GNU_SOURCE -Wno-char-subscripts
|
||||||
LD = g++ -m32
|
CXX ?= g++
|
||||||
LDFLAGS = -Wl,-z,defs -rdynamic -static-libgcc -lc -ldl -lGL -lglut -lX11 -lSDL2 -lm -lpthread -shared -nostdlib -lasound -L./src/libxdiff -lxdiff
|
LD = $(CXX)
|
||||||
|
LDFLAGS = -m32 -Wl,-z,defs -rdynamic -static-libgcc -lc -ldl -lGL -lglut -lX11 -lXcursor -lSDL2 -lm -lpthread -shared -nostdlib -lasound -L./src/libxdiff -lxdiff -L/app/lib32
|
||||||
|
|
||||||
BUILD = build
|
BUILD = build
|
||||||
|
|
||||||
@@ -17,14 +18,14 @@ all: lindbergh libxdiff.a lindbergh.so libsegaapi.so libkswapapi.so libposixtime
|
|||||||
|
|
||||||
lindbergh: src/lindbergh/lindbergh.c src/lindbergh/log.c src/lindbergh/log.h src/lindbergh/jvs.c src/lindbergh/jvs.h src/lindbergh/config.h src/lindbergh/config.c src/lindbergh/evdevinput.h src/lindbergh/evdevinput.c
|
lindbergh: src/lindbergh/lindbergh.c src/lindbergh/log.c src/lindbergh/log.h src/lindbergh/jvs.c src/lindbergh/jvs.h src/lindbergh/config.h src/lindbergh/config.c src/lindbergh/evdevinput.h src/lindbergh/evdevinput.c
|
||||||
mkdir -p $(BUILD)
|
mkdir -p $(BUILD)
|
||||||
$(CC) src/lindbergh/lindbergh.c src/lindbergh/log.h src/lindbergh/log.c src/lindbergh/jvs.h src/lindbergh/jvs.c src/lindbergh/config.h src/lindbergh/config.c src/lindbergh/evdevinput.c src/lindbergh/evdevinput.h -o $(BUILD)/lindbergh -lm
|
$(CC) -m32 src/lindbergh/lindbergh.c src/lindbergh/log.h src/lindbergh/log.c src/lindbergh/jvs.h src/lindbergh/jvs.c src/lindbergh/config.h src/lindbergh/config.c src/lindbergh/evdevinput.c src/lindbergh/evdevinput.h -o $(BUILD)/lindbergh -lm
|
||||||
|
|
||||||
libxdiff.a: $(XDIFF_OBJS)
|
libxdiff.a: $(XDIFF_OBJS)
|
||||||
mkdir -p $(BUILD)
|
mkdir -p $(BUILD)
|
||||||
ar rcs src/libxdiff/libxdiff.a $(XDIFF_OBJS)
|
ar rcs src/libxdiff/libxdiff.a $(XDIFF_OBJS)
|
||||||
|
|
||||||
src/libxdiff/xdiff/%.o: src/libxdiff/xdiff/%.c
|
src/libxdiff/xdiff/%.o: src/libxdiff/xdiff/%.c
|
||||||
$(CC) -DHAVE_CONFIG_H -fPIC -c $< -o $@
|
$(CC) -m32 -DHAVE_CONFIG_H -fPIC -c $< -o $@
|
||||||
|
|
||||||
lindbergh.so: $(OBJS)
|
lindbergh.so: $(OBJS)
|
||||||
mkdir -p $(BUILD)
|
mkdir -p $(BUILD)
|
||||||
@@ -34,13 +35,13 @@ lindbergh.so: $(OBJS)
|
|||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
libsegaapi.so: src/libsegaapi/libsegaapi.o
|
libsegaapi.so: src/libsegaapi/libsegaapi.o
|
||||||
gcc -m32 -O0 -g src/libsegaapi/libsegaapi.c -lFAudio -fPIC -shared -o $(BUILD)/libsegaapi.so
|
$(CC) -m32 -O0 -g src/libsegaapi/libsegaapi.c -lFAudio -L/app/lib32 -fPIC -shared -o $(BUILD)/libsegaapi.so
|
||||||
|
|
||||||
libkswapapi.so: src/libkswapapi/libkswapapi.o
|
libkswapapi.so: src/libkswapapi/libkswapapi.o
|
||||||
$(CC) src/libkswapapi/libkswapapi.o -fPIC -shared -o $(BUILD)/libkswapapi.so
|
$(CC) -m32 src/libkswapapi/libkswapapi.o -fPIC -shared -o $(BUILD)/libkswapapi.so
|
||||||
|
|
||||||
libposixtime.so:
|
libposixtime.so:
|
||||||
$(CC) src/libposixtime/libposixtime.c src/libposixtime/libposixtime.h -m32 -shared -o $(BUILD)/libposixtime.so
|
$(CC) -m32 src/libposixtime/libposixtime.c src/libposixtime/libposixtime.h -m32 -shared -o $(BUILD)/libposixtime.so
|
||||||
ln -s -f libposixtime.so $(BUILD)/libposixtime.so.1
|
ln -s -f libposixtime.so $(BUILD)/libposixtime.so.1
|
||||||
ln -s -f libposixtime.so $(BUILD)/libposixtime.so.2.4
|
ln -s -f libposixtime.so $(BUILD)/libposixtime.so.2.4
|
||||||
|
|
||||||
|
|||||||
+70
-1
@@ -2,7 +2,76 @@
|
|||||||
|
|
||||||
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.2]
|
## [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]
|
||||||
|
### Added
|
||||||
|
- Config option to specify a path for the library libCg.so required for some shader compilation.
|
||||||
|
- Improved folder patching for recompiled shaders (2Spicy, Rambo, Harly and HOD-EX).
|
||||||
|
- Cleaned a bit of lindbergh elf.
|
||||||
|
|
||||||
|
## [2.0.9]
|
||||||
|
- lindbergh elf mostly redone to make the loader work as a stand alone mode (read guide.md).
|
||||||
|
|
||||||
|
## [2.0.8]
|
||||||
|
### Added
|
||||||
|
- Changed preprocessor for avoiding multiple inclusions to #pragma once and clean some includes.
|
||||||
|
### Fixed
|
||||||
|
- Test mode in HOD4 SP now stretches.
|
||||||
|
|
||||||
|
## [2.0.7]
|
||||||
|
### Added
|
||||||
|
- Option -g | --gamepath to lindbergh to point to games in a different folder.
|
||||||
|
- lindbergh elf searches for lindbergh.so in common library folders ("/usr/lib/i386-linux-gnu", "/usr/lib32", etc).
|
||||||
|
- Improved Distro detection function to inform that the Distro is not based on Debian.
|
||||||
|
|
||||||
|
## [2.0.6]
|
||||||
|
### Fixed
|
||||||
|
- Reverted (Fixed LGJ, VT3 and ID4/ID5 JVS passthrough).
|
||||||
|
- Outrun 2 High Scores.
|
||||||
|
|
||||||
|
## [2.0.5]
|
||||||
|
### Fixed
|
||||||
|
- Fixed LGJ, VT3 and ID4/ID5 JVS passthrough.
|
||||||
|
|
||||||
|
## [2.0.4]
|
||||||
|
### Added
|
||||||
|
- Boost render res option for Rambo, LGJ, HOD4, HOD-EX, ID4/ID5, 2Spicy and Harley.
|
||||||
|
- Flatpak build as a bundle. (For installation, read the guide in docs folder.)
|
||||||
|
- Add COINS with evdev for player 2.
|
||||||
|
- Merged code that adds support for COINS with evdev.
|
||||||
|
- Makefile, lindbergh.c and shader_patches.c changes to support Flatpak.
|
||||||
|
- "--zink" option in lindbergh elf to run the games using Zink.
|
||||||
|
- "--nvidia" option in lindbergh elf to force the secondary nVidia GPU in laptops.
|
||||||
|
- Click and drag in PH touchscreen.
|
||||||
|
- Hide custom crosshair cursor in PH when not needed.
|
||||||
|
- Custom mouse cursors working with X11, GLX and Glut.
|
||||||
|
- Custom mouse cursor in Primeval Hunt TouchScreen.
|
||||||
|
- TouchScreen emulation fro Primeval Hunt
|
||||||
|
- Display a warning if the distro you are running is not based on Debian.
|
||||||
|
- Cleaned up most of the code changing Ifs to Switch and sorting Alphabetically.
|
||||||
|
- Let's go Jungle and Let's go Jungle Special resolution patches.
|
||||||
|
|
||||||
|
## [2.0.3] 2025-02-02
|
||||||
|
### Added
|
||||||
|
- Display a warning when loading an Elf that is not clean.
|
||||||
|
- Added to the lib folder, common libraries that are usually missing.
|
||||||
|
### Fixed
|
||||||
|
- Missing patch in HOD-EX.
|
||||||
|
- Alows to run a game that does not support Card reader if option enabled in conf file.
|
||||||
|
|
||||||
|
## [2.0.2] 2025-01-27
|
||||||
### Added
|
### Added
|
||||||
- InitialD 5 SBRY added.
|
- InitialD 5 SBRY added.
|
||||||
- HOD4 SP CPU Frequency fix.
|
- HOD4 SP CPU Frequency fix.
|
||||||
|
|||||||
+173
-25
@@ -4,31 +4,67 @@
|
|||||||
|
|
||||||
The follow list of games are supported. It is worth noting that there are multiple releases of these games, and some specific releases may not be supported.
|
The follow list of games are supported. It is worth noting that there are multiple releases of these games, and some specific releases may not be supported.
|
||||||
|
|
||||||
| Game Name | Game ID | DVP | NVidia | Intel (Mesa) | AMD (Mesa) | AMD (proprietary) |
|
| Game Name | Game ID | DVP | NVidia | Intel (Mesa) | AMD (Mesa) | AMD (proprietary) |
|
||||||
|---------------------------------|---------|----------|--------|--------------|------------|-------------------|
|
|--------------------------------------------------|---------|-----------|--------|--------------|------------|-------------------|
|
||||||
| 2 Spicy | SBMV | DVP-0027 | ✓ | ✓ | ✓ | ✓ |
|
| After Burner Climax | SBLR | DVP-0009 | ✓ | ✓ | ✓ | |
|
||||||
| After Burner Climax | SBLR | DVP-0009 | ✓ | ✓ | ✓ | |
|
| After Burner Climax Rev A | SBLR | DVP-0009A | ✓ | ✓ | ✓ | |
|
||||||
| Ghost Squad Evolution | SBNJ | DVP-0029 | ✓ | ✓ | ✓ | ✓ |
|
| After Burner Climax Rev B | SBLR | DVP-0009B | ✓ | ✓ | ✓ | |
|
||||||
| Harley Davidson | SBRG | DVP-5007 | ✓ | ✓ | ✓ | ✓ |
|
| After Burner Climax SDX | SBMN | DVP-0018 | ✓ | ✓ | ✓ | |
|
||||||
| Hummer Extreme | SBST | DVP-0079 | ✓ | ✓ | ✓ | ✓ |
|
| After Burner Climax SDX Rev A | SBMN | DVP-0018A | ✓ | ✓ | ✓ | |
|
||||||
| Hummer | SBQN | DVP-0057 | ✓ | ✓ | ✓ | ✓ |
|
| After Burner Climax SE | SBLR | DVP-0031 | ✓ | ✓ | ✓ | |
|
||||||
| Let's Go Jungle | SBLU | DVP-0011 | ✓ | ✓ | ✓ | |
|
| After Burner Climax SE Rev A | SBLR | DVP-0031A | ✓ | ✓ | ✓ | |
|
||||||
| Let's Go Jungle Special | SBNR | DVP-0036 | ✓ | ✓ | ✓ | |
|
| Ghost Squad Evolution | SBNJ | DVP-0029 | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Outrun 2 SP SDX | SBMB | DVP-0015 | ✓ | ✓ | ✓ | ✓ |
|
| Harley Davidson | SBRG | DVP-5007 | ✓ | ✓ | ✓ | ✓ |
|
||||||
| R-Tuned | SBQW | DVP-0060 | ✓ | ✓ | ✓ | ✓ |
|
| Hummer | SBQN | DVP-0057B | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Race TV | SBPF | DVP-0044 | ✓ | ✓ | ✓ | ✓ |
|
| Hummer SDLX | SBST | DVP-0057 | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Rambo | SBQL | DVP-0069 | ✓ | ✓ | ✓ | ✓ |
|
| Hummer Extreme | SBST | DVP-0079 | ✓ | ✓ | ✓ | ✓ |
|
||||||
| The House of the Dead 4 | SBLC | DVP-0003 | ✓ | ✓ | ✓ | ✓ |
|
| Hummer Extreme MDX | SBST | DVP-0083 | ✓ | ✓ | ✓ | ✓ |
|
||||||
| The House of the Dead 4 Special | SBLS | DVP-0010 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Rev A | SBML | DVP-0019A | ✓ | ✓ | ✓ | ✓ |
|
||||||
| The House of the Dead Ex | SBRC | DVP-0063 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Rev B | SBML | DVP-0019B | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Virtua Fighter 5 | SBLM | DVP-0008 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Rev C | SBML | DVP-0019C | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Virtua Fighter 5 R | SBQU | DVP-5004 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Rev D | SBML | DVP-0019D | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Virtua Fighter 5 FS | SBUV | DVP-5019 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Rev G | SBML | DVP-0019G | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Initial D 4 | SBNK | DVP-0030 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Export Rev B | SBNK | DVP-0030B | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Initial D 5 | SBTS | DVP-0075 | ✓ | ✓ | ✓ | |
|
| Initial D Arcade Stage 4 Export Rev C | SBNK | DVP-0030C | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Virtua Tennis 3 | SBKX | DVP-0005 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D Arcade Stage 4 Export Rev D | SBNK | DVP-0030D | ✓ | ✓ | ✓ | ✓ |
|
||||||
| Primeval Hunt | SBPP | DVP-0048 | ✓ | ✓ | ✓ | ✓ |
|
| Initial D 5 EXP | SBRY | DVP-0075 | ✓ | ✓ | ✓ | |
|
||||||
|
| Initial D 5 EXP 2.0 | SBTS | DVP-0084 | ✓ | ✓ | ✓ | |
|
||||||
|
| Initial D 5 EXP 2.0 Rev A | SBQN | DVP-0084A | ✓ | ✓ | ✓ | |
|
||||||
|
| Initial D Arcade Stage 5 Rev A | SBQZ | DVP-0070A | ✓ | ✓ | ✓ | |
|
||||||
|
| Initial D Arcade Stage 5 Rev F | SBQZ | DVP-0070F | ✓ | ✓ | ✓ | |
|
||||||
|
| Let's Go Jungle | SBLU | DVP-0011 | ✓ | ✓ | ✓ | |
|
||||||
|
| Let's Go Jungle! Rev A | SBLU | DVP-0011A | ✓ | ✓ | ✓ | |
|
||||||
|
| Let's Go Jungle Special | SBNR | DVP-0036 | ✓ | ✓ | ✓ | |
|
||||||
|
| SEGA Network Taisen Mahjong MJ4 | SBPN | DVP-0049G | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| SEGA Network Taisen Mahjong MJ4 Evolution | SBTA | DVP-0081 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Outrun 2 SP SDX | SBMB | DVP-0015 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Outrun 2 SP SDX Rev A | SBMB | DVP-0015A | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Primeval Hunt | SBPP | DVP-0048 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Rambo | SBQL | DVP-0069 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| R-Tuned | SBQW | DVP-0060 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Sega Race TV | SBPF | DVP-0044 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| The House of the Dead 4 Rev A | SBLC | DVP-0003A | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| The House of the Dead 4 Rev B | SBLC | DVP-0003B | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| The House of the Dead 4 Rev C | SBLC | DVP-0003C | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| The House of the Dead 4 Special | SBLS | DVP-0010 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| The House of the Dead 4 Special Rev B | SBLS | DVP-0010B | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| The House of the Dead Ex | SBRC | DVP-0063 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Too Spicy | SBMV | DVP-0027 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 | SBLM | DVP-0008 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Rev A | SBLM | DVP-0008A | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Rev B | SBLM | DVP-0008B | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Rev E (Public Version C) | SBLM | DVP-0008E | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Export | SBLM | DVP-0043 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Final Showdown REV A | SBUV | DVP-5019 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Final Showdown REV B | SBXX | DVP-5020 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 Final Showdown REV B ver 6.0000 | SBXX | DVP-5020 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 R | SBQU | DVP-5004 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 R Rev D | SBQU | DVP-5004D | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Fighter 5 R Rev G | SBQU | DVP-5004G | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Tennis 3 | SBKX | DVP-0005 | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Tennis 3 Rev A | SBKX | DVP-0005A | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Tennis 3 Rev B | SBKX | DVP-0005B | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
| Virtua Tennis 3 Rev C | SBKX | DVP-0005C | ✓ | ✓ | ✓ | ✓ |
|
||||||
|
|
||||||
## Game Issues & Fixes
|
## Game Issues & Fixes
|
||||||
|
|
||||||
@@ -54,6 +90,10 @@ sudo ln -s /lib/i386-linux-gnu/libglut.so /lib/i386-linux-gnu/libglut.so.3
|
|||||||
|
|
||||||
- You need to set `SKIP_OUTRUN_CABINET_CHECK` to 1 in `lindbergh.conf` to play in DX, SDX or Standard cabinet types.
|
- You need to set `SKIP_OUTRUN_CABINET_CHECK` to 1 in `lindbergh.conf` to play in DX, SDX or Standard cabinet types.
|
||||||
|
|
||||||
|
### Hummer (all versions)
|
||||||
|
|
||||||
|
The games will ask for libGLcore.so.1 and libnvidia-tls.so.1 you can copy for example libkswapapi.so as libGLcore.so.1 and libnvidia-tls.so.1 and the game will work fine.
|
||||||
|
|
||||||
## Configuration File : lindbergh.conf
|
## Configuration File : lindbergh.conf
|
||||||
|
|
||||||
All configurable options are set and explained in the [`lindbergh.conf`](lindbergh.conf) file itself, and should be reasonably easy to understand. This chapter further explains some of those setup options.
|
All configurable options are set and explained in the [`lindbergh.conf`](lindbergh.conf) file itself, and should be reasonably easy to understand. This chapter further explains some of those setup options.
|
||||||
@@ -120,3 +160,111 @@ Will cause input on analogue input 1 to be clamped as follows:
|
|||||||
|
|
||||||
There are currently no audio options that you can set. If you have a stereo sound card installed then the audio will be downmixed to stereo. If you have a 5.1 sound card installed and the game supports surround sound, each surround channel should be passed through properly and should play sound as it was originally intended.
|
There are currently no audio options that you can set. If you have a stereo sound card installed then the audio will be downmixed to stereo. If you have a 5.1 sound card installed and the game supports surround sound, each surround channel should be passed through properly and should play sound as it was originally intended.
|
||||||
|
|
||||||
|
|
||||||
|
## Installing and Running the Flatpak
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
Before installing the main package, ensure that Flatpak is set up on your system. If Flatpak is not installed, follow the official [Flatpak setup guide](https://flatpak.org/setup/).
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
Once downloaded, install Lindbergh Loader by running the following command in your terminal:
|
||||||
|
|
||||||
|
```
|
||||||
|
flatpak install lindbergh-loader-dev.flatpak
|
||||||
|
```
|
||||||
|
|
||||||
|
Additionally, install the required dependencies:
|
||||||
|
|
||||||
|
```
|
||||||
|
flatpak install org.freedesktop.Platform.Compat.i386//24.08
|
||||||
|
flatpak install org.freedesktop.Platform.GL32.default//24.08
|
||||||
|
```
|
||||||
|
Intel GPU Users (VAAPI Support):
|
||||||
|
|
||||||
|
```
|
||||||
|
flatpak install org.freedesktop.Platform.VAAPI.Intel.i386//24.08
|
||||||
|
```
|
||||||
|
|
||||||
|
NVIDIA GPU Users (Driver Support):
|
||||||
|
|
||||||
|
If your system uses an NVIDIA GPU, you need to install the matching NVIDIA driver package for your system.
|
||||||
|
To check your NVIDIA driver version, run:
|
||||||
|
|
||||||
|
```
|
||||||
|
nvidia-smi
|
||||||
|
```
|
||||||
|
Then, install the corresponding Flatpak package, replacing 570-86-16 with your actual driver version:
|
||||||
|
|
||||||
|
```
|
||||||
|
flatpak install org.freedesktop.Platform.GL32.nvidia-570-86-16
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running Lindbergh Loader
|
||||||
|
|
||||||
|
Once installed, launch the application with:
|
||||||
|
|
||||||
|
```
|
||||||
|
flatpak run com.github.lindberghloader.dev
|
||||||
|
```
|
||||||
|
|
||||||
|
### Managing Game Locations
|
||||||
|
|
||||||
|
By default, games should be added to:
|
||||||
|
|
||||||
|
```
|
||||||
|
~/Games
|
||||||
|
```
|
||||||
|
|
||||||
|
If you need to add more locations, install Flatseal:
|
||||||
|
|
||||||
|
```
|
||||||
|
flatpak install com.github.tchx84.Flatseal
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, run Flatseal and grant Lindbergh Loader access to additional directories.
|
||||||
|
|
||||||
|
### Stand alone mode
|
||||||
|
|
||||||
|
Now, you have the option to run the games without copying any files to the game's folder.
|
||||||
|
Your system's 32 bit library folder, your current folder and the game's folder will be added to LD_LIBRARY_PATH env variable,
|
||||||
|
so you can han the loader libs in any of those locations.
|
||||||
|
|
||||||
|
Passing -c option you can specify the location of the .conf file like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh -c /my/custom/folder/myconfig.conf
|
||||||
|
```
|
||||||
|
|
||||||
|
## -g or --gamepath
|
||||||
|
With this new option, you can specify the location of the game, where the game's ELF resides.
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh -g /my/custom/folder/hod4/elf
|
||||||
|
```
|
||||||
|
|
||||||
|
The loader will search for known elf files in that folder but you can also run it like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh myCustom.elf -g /my/custom/folder/hod4/elf
|
||||||
|
```
|
||||||
|
|
||||||
|
The loader will load `myCustom.elf` inside the passed folder.
|
||||||
|
|
||||||
|
## Passing a folder containing an elf
|
||||||
|
With this option, you pass a full path, including an ELF name like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
./lindbergh /my/custom/folder/hod4/elf/myCustom.elf
|
||||||
|
```
|
||||||
|
|
||||||
|
The loader will load the ELF in that folder.
|
||||||
|
|
||||||
|
You can combine all options.
|
||||||
|
|
||||||
|
You can have the needed libraries in the folder where `lindbergh` resides, in the system's 32 bit lib folder or in the game's folder.
|
||||||
|
The loader will try to find the files.
|
||||||
|
|
||||||
|
If by mistake, you pass both, a full path including an ELF and a path with -g option, the path passed with -g option will be omitted.
|
||||||
|
Remember that if the path containg spaces, which is not recommended, pass the path inside double quotes or `\` before the space.
|
||||||
|
|||||||
+52
-30
@@ -1,5 +1,5 @@
|
|||||||
# SEGA Lindbergh Emulator Configuration File
|
# SEGA Lindbergh Emulator Configuration File
|
||||||
# By the Lindbergh Development Team
|
# By the Lindbergh Development Team 2024-2025
|
||||||
|
|
||||||
# Set the requested dip switch width here
|
# Set the requested dip switch width here
|
||||||
WIDTH AUTO
|
WIDTH AUTO
|
||||||
@@ -7,28 +7,31 @@ WIDTH AUTO
|
|||||||
# Set the requested dip switch height here
|
# Set the requested dip switch height here
|
||||||
HEIGHT AUTO
|
HEIGHT AUTO
|
||||||
|
|
||||||
|
# Boost render resolution in HOD4/2Spicy/Harley/Rambo/HOD-EX/ID4/ID5 and LGJ
|
||||||
|
# BOOST_RENDER_RES 1
|
||||||
|
|
||||||
# Set if the emulator should go full screen
|
# Set if the emulator should go full screen
|
||||||
FULLSCREEN 0
|
# FULLSCREEN 0
|
||||||
|
|
||||||
# Sets the Input Mode
|
# Sets the Input Mode
|
||||||
# Mode 0: will use both SDL/X11 and EVDEV inputs (default)
|
# Mode 0: will use both SDL/X11 and EVDEV inputs (default)
|
||||||
# Mode 1: will use SDL/X11 inputs only
|
# Mode 1: will use SDL/X11 inputs only
|
||||||
# Mode 2: will use EVDEV raw inputs only, which should be configured at the bottom of the settings file
|
# Mode 2: will use EVDEV raw inputs only, which should be configured at the bottom of the settings file
|
||||||
INPUT_MODE 0
|
# INPUT_MODE 0
|
||||||
|
|
||||||
# Set to 1 if you want to disable SDL (Fixes SRTV boost bar)
|
# Set to 1 if you want to disable SDL (Fixes SRTV boost bar)
|
||||||
NO_SDL 0
|
# NO_SDL 0
|
||||||
|
|
||||||
# Set the Region ( JP/US/EX )
|
# Set the Region ( JP/US/EX )
|
||||||
REGION EX
|
# REGION EX
|
||||||
|
|
||||||
# Set if you want the game to be Free Play
|
# Set if you want the game to be Free Play
|
||||||
FREEPLAY 1
|
# FREEPLAY 1
|
||||||
|
|
||||||
# Set if the emulator should emulate JVS and use the keyboard/mouse for controls.
|
# Set if the emulator should emulate JVS and use the keyboard/mouse for controls.
|
||||||
# If this is set to 0, then the emulator will route the traffic to the serial device
|
# If this is set to 0, then the emulator will route the traffic to the serial device
|
||||||
# defined in JVS_PATH if it has been defined.
|
# defined in JVS_PATH if it has been defined.
|
||||||
EMULATE_JVS 1
|
# EMULATE_JVS 1
|
||||||
|
|
||||||
# Set if the emulator should emulate the rideboard used in the special games here
|
# Set if the emulator should emulate the rideboard used in the special games here
|
||||||
# If this is set to 0, then the emulator will route the traffic to one of the serial ports
|
# If this is set to 0, then the emulator will route the traffic to one of the serial ports
|
||||||
@@ -41,8 +44,12 @@ EMULATE_DRIVEBOARD AUTO
|
|||||||
# Set if the emulator should emulate the motion board from Outrun 2 SP SDX here
|
# Set if the emulator should emulate the motion board from Outrun 2 SP SDX here
|
||||||
# If this is set to 0, then the emulator will route the traffic to one of the serial ports
|
# If this is set to 0, then the emulator will route the traffic to one of the serial ports
|
||||||
EMULATE_MOTIONBOARD AUTO
|
EMULATE_MOTIONBOARD AUTO
|
||||||
|
|
||||||
# Set if the loader should emulate the card reader in Virtua Tenis 3
|
# Set if the loader should emulate the card reader in Virtua Tenis 3
|
||||||
# EMULATE_CARDREADER 1
|
EMULATE_CARDREADER AUTO
|
||||||
|
|
||||||
|
# Set to 1 if the loader should emulate the touchscreen with the mouse in PH.
|
||||||
|
# EMULATE_TOUCHSCREEN 1
|
||||||
|
|
||||||
# Card File for reader 1
|
# Card File for reader 1
|
||||||
# CARDFILE_01 Card_01.crd
|
# CARDFILE_01 Card_01.crd
|
||||||
@@ -51,7 +58,7 @@ EMULATE_MOTIONBOARD AUTO
|
|||||||
# CARDFILE_02 Card_02.crd
|
# CARDFILE_02 Card_02.crd
|
||||||
|
|
||||||
# Define the path to pass the JVS packets to if JVS is not being emulated.
|
# Define the path to pass the JVS packets to if JVS is not being emulated.
|
||||||
JVS_PATH /dev/ttyUSB0
|
# JVS_PATH /dev/ttyUSB0
|
||||||
|
|
||||||
# Define the path to pass the first serial port to if it's not being emulated.
|
# Define the path to pass the first serial port to if it's not being emulated.
|
||||||
# SERIAL_1_PATH /dev/ttyUSB0
|
# SERIAL_1_PATH /dev/ttyUSB0
|
||||||
@@ -60,47 +67,51 @@ JVS_PATH /dev/ttyUSB0
|
|||||||
# SERIAL_2_PATH /dev/ttyUSB0
|
# SERIAL_2_PATH /dev/ttyUSB0
|
||||||
|
|
||||||
# Define the path to the sram.bin file
|
# Define the path to the sram.bin file
|
||||||
SRAM_PATH sram.bin
|
# SRAM_PATH sram.bin
|
||||||
|
|
||||||
# Define the path to the eeprom.bin file
|
# Define the path to the eeprom.bin file
|
||||||
EEPROM_PATH eeprom.bin
|
# EEPROM_PATH eeprom.bin
|
||||||
|
|
||||||
|
# If set, the library libCG.so needed for 2Spicy, Harley, Rambo and HOD-Ex shader recompilation
|
||||||
|
# will be loaded from the specifyied location. (include the name of file in the location)
|
||||||
|
# LIBCG_PATH /my/file/location/myLibCg.so
|
||||||
|
|
||||||
# Set the GPU vendor (0 = Autodetect / 1 = NVidia / 2 = AMD / 3 = ATI(AMD-PRO) / 4 = Intel / 5 = Unknown)
|
# Set the GPU vendor (0 = Autodetect / 1 = NVidia / 2 = AMD / 3 = ATI(AMD-PRO) / 4 = Intel / 5 = Unknown)
|
||||||
GPU_VENDOR 0
|
# GPU_VENDOR 0
|
||||||
|
|
||||||
# Set if you want to see debug messages in the console
|
# Set if you want to see debug messages in the console
|
||||||
DEBUG_MSGS 0
|
# DEBUG_MSGS 0
|
||||||
|
|
||||||
# Set if you'd like to add a border for optical light gun tracking
|
# Set if you'd like to add a border for optical light gun tracking
|
||||||
BORDER_ENABLED 0
|
# BORDER_ENABLED 0
|
||||||
|
|
||||||
# Set the thickness of the white border as a percentage of the width of the screen
|
# Set the thickness of the white border as a percentage of the width of the screen
|
||||||
WHITE_BORDER_PERCENTAGE 2
|
# WHITE_BORDER_PERCENTAGE 2
|
||||||
|
|
||||||
# Set the thickness of the black border which sits around the
|
# Set the thickness of the black border which sits around the
|
||||||
# white border as a percentage of the width of the screen
|
# white border as a percentage of the width of the screen
|
||||||
BLACK_BORDER_PERCENTAGE 0
|
# BLACK_BORDER_PERCENTAGE 0
|
||||||
|
|
||||||
# Set to true if you experience flickering in hummer
|
# Set to true if you experience flickering in hummer
|
||||||
HUMMER_FLICKER_FIX 0
|
# HUMMER_FLICKER_FIX 0
|
||||||
|
|
||||||
# Set to keep the aspect ratio (4:3) in games like Sega Race TV and Primeval Hunt
|
# Set to keep the aspect ratio (4:3) in games like Sega Race TV and Primeval Hunt
|
||||||
KEEP_ASPECT_RATIO 0
|
# KEEP_ASPECT_RATIO 0
|
||||||
|
|
||||||
# Set to 0 if you want to disable the Glare effect in OutRun
|
# Set to 0 if you want to disable the Glare effect in OutRun
|
||||||
OUTRUN_LENS_GLARE_ENABLED 1
|
# OUTRUN_LENS_GLARE_ENABLED 1
|
||||||
|
|
||||||
# Set to 1 to bypass cabinet checks including drive board and tower in Outrun 2 SP SDX
|
# Set to 1 to bypass cabinet checks including drive board and tower in Outrun 2 SP SDX
|
||||||
SKIP_OUTRUN_CABINET_CHECK 0
|
# SKIP_OUTRUN_CABINET_CHECK 0
|
||||||
|
|
||||||
# Set to 1 if you want to limit the FPS in games that are not limited like OutRun2
|
# Set to 1 if you want to limit the FPS in games that are not limited like OutRun2
|
||||||
FPS_LIMITER_ENABLED 0
|
# FPS_LIMITER_ENABLED 0
|
||||||
|
|
||||||
# Set the target FPS (will only work if FPS_LIMITER_ENABLED = 1)
|
# Set the target FPS (will only work if FPS_LIMITER_ENABLED = 1)
|
||||||
FPS_TARGET 60
|
# FPS_TARGET 60
|
||||||
|
|
||||||
# Set to 1 if you want to render LGJ using the mesa patches instead of nVidia (fixes some glitches)
|
# Set to 1 if you want to render LGJ using the mesa patches instead of nVidia (fixes some glitches)
|
||||||
LGJ_RENDER_WITH_MESA 1
|
# LGJ_RENDER_WITH_MESA 1
|
||||||
|
|
||||||
# Set the Primeval Hunt mode
|
# Set the Primeval Hunt mode
|
||||||
# Mode 0: Default (Side by Side)
|
# Mode 0: Default (Side by Side)
|
||||||
@@ -108,37 +119,48 @@ LGJ_RENDER_WITH_MESA 1
|
|||||||
# Mode 2: Side by Side
|
# Mode 2: Side by Side
|
||||||
# Mode 3: 3ds mode 1 (Touch screen to the right)
|
# Mode 3: 3ds mode 1 (Touch screen to the right)
|
||||||
# Mode 4: 3ds mode 2 (Touch screen to the bottom)
|
# Mode 4: 3ds mode 2 (Touch screen to the bottom)
|
||||||
PRIMEVAL_HUNT_MODE 1
|
# PRIMEVAL_HUNT_MODE 1
|
||||||
|
|
||||||
# Disble to use the original fonts instead of the built in font in the loader
|
# Disble to use the original fonts instead of the built in font in the loader
|
||||||
DISABLE_BUILTIN_FONT 0
|
# DISABLE_BUILTIN_FONT 0
|
||||||
|
|
||||||
# Disble to use the original logos instead of the built in logos in the loader
|
# Disble to use the original logos instead of the built in logos in the loader
|
||||||
DISABLE_BUILTIN_LOGOS 0
|
# DISABLE_BUILTIN_LOGOS 0
|
||||||
|
|
||||||
# Set to 0 to enable the mouse pointer/Cursor
|
# Set to 0 to enable the mouse pointer/Cursor
|
||||||
HIDE_CURSOR 1
|
# HIDE_CURSOR 1
|
||||||
|
|
||||||
# Set the custom mouse pointer from a PNG file (Usefull for shooting games)
|
# Set the custom mouse pointer from a PNG file (Usefull for shooting games)
|
||||||
# CUSTOM_CURSOR myCustomCursor.png
|
# CUSTOM_CURSOR myCustomCursor.png
|
||||||
|
|
||||||
# Set the width of the custom cursor
|
# Set the width of the custom cursor
|
||||||
CUSTOM_CURSOR_WIDTH 32
|
# CUSTOM_CURSOR_WIDTH 32
|
||||||
|
|
||||||
# Set the height of the custom cursor
|
# Set the height of the custom cursor
|
||||||
CUSTOM_CURSOR_HEIGHT 32
|
# CUSTOM_CURSOR_HEIGHT 32
|
||||||
|
|
||||||
|
# Set a custom cursor for the touch screen in Primeval Hunt
|
||||||
|
# PH_TOUCH_CURSOR myCustomHandCursor.png
|
||||||
|
|
||||||
|
# Set the width of the custom cursor
|
||||||
|
# PH_TOUCH_CURSOR_WIDTH 32
|
||||||
|
|
||||||
|
# Set the height of the custom cursor
|
||||||
|
# PH_TOUCH_CURSOR_HEIGHT 32
|
||||||
|
|
||||||
# Hacky way to make MJ4 work at prohibited times?
|
# Hacky way to make MJ4 work at prohibited times?
|
||||||
# MJ4_ENABLED_ALL_THE_TIME 1
|
# MJ4_ENABLED_ALL_THE_TIME 1
|
||||||
|
|
||||||
# Sets the IP address in the eeprom for Outrun link (you have to put your NIC ip)
|
# Sets the IP address in the eeprom for Outrun link (you have to put your NIC ip)
|
||||||
# OR2_IP 192.168.1.2
|
# OR2_IP 192.168.1.2
|
||||||
|
# OR2_NETMASK 255.255.255.0
|
||||||
|
|
||||||
# House of the dead 4 speed fix set the frequency of your CPU in Ghz (The speed reported by the manufacturer)
|
# House of the dead 4 speed fix set the frequency of your CPU in Ghz (The speed reported by the manufacturer)
|
||||||
# CPU_FREQ_GHZ 4.0
|
# CPU_FREQ_GHZ 4.0
|
||||||
|
|
||||||
# Set the colour of the lindbergh to change the Segaboot logo
|
# Set the colour of the lindbergh to change the Segaboot logo
|
||||||
# Possible colours are: YELLOW, RED, BLUE, SILVER, REDEX
|
# Possible colours are: YELLOW, RED, BLUE, SILVER, REDEX
|
||||||
LINDBERGH_COLOUR YELLOW
|
# LINDBERGH_COLOUR YELLOW
|
||||||
|
|
||||||
# X11 MODE (Input Mode 1)
|
# X11 MODE (Input Mode 1)
|
||||||
# To find the value pairs for these run `xev` on linux
|
# To find the value pairs for these run `xev` on linux
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Executable
+11
@@ -0,0 +1,11 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
echo "Install Packages Running..."
|
||||||
|
sudo dpkg --add-architecture i386
|
||||||
|
sudo apt-get update
|
||||||
|
sudo apt-get -y install --no-install-recommends \
|
||||||
|
build-essential gcc-multilib fuse freeglut3-dev:i386 libsdl2-dev:i386 libfaudio-dev:i386 libvdpau1:i386 \
|
||||||
|
libstdc++5:i386 libxmu6:i386 libpcsclite1:i386 libncurses5:i386 unzip
|
||||||
|
|
||||||
|
sudo add-apt-repository ppa:kisak/kisak-mesa -y
|
||||||
|
sudo apt-get -y update && sudo apt -y dist-upgrade
|
||||||
Executable
+103
@@ -0,0 +1,103 @@
|
|||||||
|
#!/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"
|
||||||
|
"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"
|
||||||
|
)
|
||||||
|
|
||||||
|
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
|
||||||
|
cp ../libs/libcrypto.so.0.9.7 $OUTPUT_FOLDER/usr/lib
|
||||||
|
cp ../libs/libssl.so.0.9.7 $OUTPUT_FOLDER/usr/lib
|
||||||
|
cp ../libs/libopenal.so.0 $OUTPUT_FOLDER/usr/lib
|
||||||
|
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/libcrypto.so.0.9.7 $OUTPUT_FOLDER/usr/lib32
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/libssl.so.0.9.7 $OUTPUT_FOLDER/usr/lib32
|
||||||
|
mv $OUTPUT_FOLDER/usr/lib/libopenal.so.0 $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,4 @@
|
|||||||
|
.flatpak-builder/
|
||||||
|
build/
|
||||||
|
repo/
|
||||||
|
*.flatpak
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# We just make any GL32 extension have higher priority
|
||||||
|
include /run/flatpak/ld.so.conf.d/app-*-org.freedesktop.Platform.GL32.*.conf
|
||||||
|
/app/lib32
|
||||||
|
/app/lib/i386-linux-gnu
|
||||||
Binary file not shown.
@@ -0,0 +1,36 @@
|
|||||||
|
diff --color -ruN ncurses-5.9.orig/c++/cursesf.h ncurses-5.9/c++/cursesf.h
|
||||||
|
--- ncurses-5.9.orig/c++/cursesf.h 2005-08-13 20:08:24.000000000 +0200
|
||||||
|
+++ ncurses-5.9/c++/cursesf.h 2025-02-21 14:45:57.002814632 +0100
|
||||||
|
@@ -703,7 +703,7 @@
|
||||||
|
virtual ~NCursesUserForm() {
|
||||||
|
};
|
||||||
|
|
||||||
|
- inline T* UserData (void) const {
|
||||||
|
+ inline T* UserData (void) {
|
||||||
|
return reinterpret_cast<T*>(get_user ());
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --color -ruN ncurses-5.9.orig/c++/cursesm.h ncurses-5.9/c++/cursesm.h
|
||||||
|
--- ncurses-5.9.orig/c++/cursesm.h 2005-08-13 20:10:36.000000000 +0200
|
||||||
|
+++ ncurses-5.9/c++/cursesm.h 2025-02-21 14:47:21.238076003 +0100
|
||||||
|
@@ -659,7 +659,7 @@
|
||||||
|
virtual ~NCursesUserMenu() {
|
||||||
|
};
|
||||||
|
|
||||||
|
- inline T* UserData (void) const {
|
||||||
|
+ inline T* UserData (void) {
|
||||||
|
return reinterpret_cast<T*>(get_user ());
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --color -ruN ncurses-5.9.orig/c++/cursesp.h ncurses-5.9/c++/cursesp.h
|
||||||
|
--- ncurses-5.9.orig/c++/cursesp.h 2008-08-16 19:20:23.000000000 +0200
|
||||||
|
+++ ncurses-5.9/c++/cursesp.h 2025-02-21 14:45:19.718735744 +0100
|
||||||
|
@@ -251,7 +251,7 @@
|
||||||
|
|
||||||
|
virtual ~NCursesUserPanel() {};
|
||||||
|
|
||||||
|
- T* UserData (void) const
|
||||||
|
+ T* UserData (void)
|
||||||
|
{
|
||||||
|
return reinterpret_cast<T*>(get_user ());
|
||||||
|
};
|
||||||
@@ -0,0 +1,304 @@
|
|||||||
|
app-id: com.github.lindberghloader
|
||||||
|
runtime: org.freedesktop.Platform
|
||||||
|
runtime-version: &runtime-version '24.08'
|
||||||
|
sdk: org.freedesktop.Sdk
|
||||||
|
|
||||||
|
x-gl-versions: &gl-versions '24.08;1.4'
|
||||||
|
x-gl-merge-dirs: &gl-merge-dirs vulkan/icd.d;glvnd/egl_vendor.d;egl/egl_external_platform.d;OpenCL/vendors;lib/dri;lib/d3d;lib/gbm;vulkan/explicit_layer.d;vulkan/implicit_layer.d # Define GL merge dirs alias
|
||||||
|
x-i386-build-options: &i386-build-options
|
||||||
|
libdir: /app/lib32
|
||||||
|
env:
|
||||||
|
CC: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-gcc
|
||||||
|
CXX: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-g++
|
||||||
|
LD: /usr/lib/sdk/toolchain-i386/bin/i686-unknown-linux-gnu-ld
|
||||||
|
LDFLAGS: "-L/app/lib32"
|
||||||
|
|
||||||
|
command: lindbergh
|
||||||
|
|
||||||
|
# SDK extensions needed for building 32-bit components
|
||||||
|
sdk-extensions:
|
||||||
|
- org.freedesktop.Sdk.Extension.toolchain-i386
|
||||||
|
- org.freedesktop.Sdk.Compat.i386
|
||||||
|
|
||||||
|
finish-args:
|
||||||
|
- --env=LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
||||||
|
- --env=PATH=/app/bin:/usr/bin
|
||||||
|
- --allow=multiarch
|
||||||
|
- --share=ipc
|
||||||
|
- --share=network
|
||||||
|
- --socket=x11
|
||||||
|
- --socket=wayland
|
||||||
|
- --device=all
|
||||||
|
- --socket=pulseaudio
|
||||||
|
- --filesystem=~/Games
|
||||||
|
|
||||||
|
# Runtime extensions automatically downloaded and installed with the app (For some reason does not work)
|
||||||
|
add-extensions:
|
||||||
|
org.freedesktop.Platform.Compat.i386:
|
||||||
|
directory: lib/i386-linux-gnu
|
||||||
|
version: *runtime-version
|
||||||
|
|
||||||
|
# 32-bit graphics driver extension
|
||||||
|
org.freedesktop.Platform.GL32:
|
||||||
|
directory: lib/i386-linux-gnu/GL
|
||||||
|
versions: *gl-versions
|
||||||
|
subdirectories: true
|
||||||
|
autodelete: false
|
||||||
|
add-ld-path: lib
|
||||||
|
merge-dirs: *gl-merge-dirs
|
||||||
|
download-if: active-gl-driver
|
||||||
|
enable-if: active-gl-driver
|
||||||
|
autoprune-unless: active-gl-driver
|
||||||
|
|
||||||
|
modules:
|
||||||
|
# Pre-built 32-bit library (if required)
|
||||||
|
- name: libstdcxx5
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- mkdir -p /app/lib32
|
||||||
|
- install -Dm644 libstdc++.so.5 /app/lib32/libstdc++.so.5
|
||||||
|
sources:
|
||||||
|
- type: file
|
||||||
|
path: ./assets/libstdc++.so.5
|
||||||
|
|
||||||
|
# Build 32-bit libGLU
|
||||||
|
- name: libGLU
|
||||||
|
buildsystem: autotools
|
||||||
|
config-opts:
|
||||||
|
- --host=i686-unknown-linux-gnu
|
||||||
|
- --prefix=/app
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz
|
||||||
|
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
|
||||||
|
|
||||||
|
# Build 32-bit freeglut
|
||||||
|
- name: freeglut
|
||||||
|
buildsystem: cmake
|
||||||
|
config-opts:
|
||||||
|
- -DCMAKE_BUILD_TYPE=Release
|
||||||
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://downloads.sourceforge.net/freeglut/freeglut-3.2.2.tar.gz
|
||||||
|
sha256: c5944a082df0bba96b5756dddb1f75d0cd72ce27b5395c6c1dde85c2ff297a50
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit libFAudio (dynamic)
|
||||||
|
- name: libFAudio-Dynamic
|
||||||
|
buildsystem: cmake-ninja
|
||||||
|
config-opts:
|
||||||
|
- -DCMAKE_BUILD_TYPE=Release
|
||||||
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
|
- -DBUILD_SDL3=off
|
||||||
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
env:
|
||||||
|
CFLAGS: "-m32 -mstackrealign"
|
||||||
|
CXXFLAGS: "-m32 -mstackrealign"
|
||||||
|
sources:
|
||||||
|
- type: git
|
||||||
|
url: https://github.com/FNA-XNA/FAudio.git
|
||||||
|
tag: "24.12"
|
||||||
|
|
||||||
|
# Build 32-bit libXmu
|
||||||
|
- name: libxmu
|
||||||
|
buildsystem: autotools
|
||||||
|
config-opts:
|
||||||
|
- --prefix=/app
|
||||||
|
- --with-shared
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://xorg.freedesktop.org/releases/individual/lib/libXmu-1.2.1.tar.gz
|
||||||
|
sha256: bf0902583dd1123856c11e0a5085bd3c6e9886fbbd44954464975fd7d52eb599
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit libmd
|
||||||
|
- name: libmd
|
||||||
|
buildsystem: autotools
|
||||||
|
config-opts:
|
||||||
|
- --prefix=/app
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://archive.hadrons.org/software/libmd/libmd-1.1.0.tar.xz
|
||||||
|
sha256: 1bd6aa42275313af3141c7cf2e5b964e8b1fd488025caf2f971f43b00776b332
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit libbsd
|
||||||
|
- name: libbsd
|
||||||
|
buildsystem: autotools
|
||||||
|
config-opts:
|
||||||
|
- --prefix=/app
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://libbsd.freedesktop.org/releases/libbsd-0.12.2.tar.xz
|
||||||
|
sha256: b88cc9163d0c652aaf39a99991d974ddba1c3a9711db8f1b5838af2a14731014
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit ncurses (very old version)
|
||||||
|
- name: ncurses
|
||||||
|
buildsystem: autotools
|
||||||
|
config-opts:
|
||||||
|
- --prefix=/app
|
||||||
|
- --with-shared
|
||||||
|
- --without-debug
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://ftp.gnu.org/pub/gnu/ncurses/ncurses-5.9.tar.gz
|
||||||
|
sha256: 9046298fb440324c9d4135ecea7879ffed8546dd1b58e59430ea07a4633f563b
|
||||||
|
- type: patch
|
||||||
|
path: ./assets/ncurses-5.9.patch
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
env:
|
||||||
|
CPPFLAGS: "-P"
|
||||||
|
CXXFLAGS: "-std=c++14"
|
||||||
|
|
||||||
|
# Install pre-built 32-bit Nvidia Cg Toolkit (old)
|
||||||
|
- name: nvidia-cg-toolkit
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- install -Dm755 usr/lib/libCg.so /app/lib32/libCg.so
|
||||||
|
- install -Dm755 usr/lib/libCgGL.so /app/lib32/libCgGL.so
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: http://developer.download.nvidia.com/cg/Cg_3.1/Cg-3.1_April2012_x86.tgz
|
||||||
|
sha256: cef3591e436f528852db0e8c145d3842f920e0c89bcfb219c466797cb7b18879
|
||||||
|
|
||||||
|
# Build 32-bit libsndio (dynamic)
|
||||||
|
- name: libsndio-dynamic
|
||||||
|
buildsystem: autotools
|
||||||
|
config-opts:
|
||||||
|
- --prefix=/app
|
||||||
|
- --enable-dynamic
|
||||||
|
- --enable-alsa
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://www.sndio.org/sndio-1.10.0.tar.gz
|
||||||
|
sha256: bebd3bfd01c50c9376cf3e7814b9379bed9e17d0393b5113b7eb7a3d0d038c54
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
|
||||||
|
# Build 32-bit libopenal (old version)
|
||||||
|
- name: libopenal
|
||||||
|
buildsystem: cmake
|
||||||
|
config-opts:
|
||||||
|
- -DCMAKE_INSTALL_PREFIX=/app
|
||||||
|
- -DCMAKE_INSTALL_LIBDIR=/app/lib32
|
||||||
|
- -DALSOFT_BACKEND_PULSEAUDIO=ON
|
||||||
|
- -DALSOFT_BACKEND_ALSA=ON
|
||||||
|
- -DALSOFT_BACKEND_JACK=OFF
|
||||||
|
- -DALSOFT_BACKEND_SNDIO=ON
|
||||||
|
- -DSOUNDIO_INCLUDE_DIR=/app/include
|
||||||
|
- -DSOUNDIO_LIBRARY=/app/lib32/libsndio.so
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://github.com/kcat/openal-soft/archive/refs/tags/openal-soft-1.17.2.tar.gz
|
||||||
|
sha256: 11ea176f6cbf9763dbce0953dd77ab72d032b4ad95f07afffb91844abb174033
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
env:
|
||||||
|
CFLAGS: "-m32 -mstackrealign"
|
||||||
|
CXXFLAGS: "-m32 -std=c++14 -mstackrealign"
|
||||||
|
|
||||||
|
# Build 32-bit OpenSSL (extremely old and insecure version)
|
||||||
|
- name: openssl
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- ./Configure --prefix=/app --openssldir=/app/etc/ssl shared 386 no-asm no-krb5 linux-pentium
|
||||||
|
- 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
|
||||||
|
- install -d /app/lib32
|
||||||
|
- mv libcrypto.so* /app/lib32/
|
||||||
|
- mv libssl.so* /app/lib32/
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_0_9_7.tar.gz
|
||||||
|
sha256: 14e3a90f75994689e8c1bef098a97021f225a1a1623a7b8012079bd8b2eca1e8
|
||||||
|
|
||||||
|
# Build 32-bit libpcsclite
|
||||||
|
- name: libpcsclite
|
||||||
|
buildsystem: meson
|
||||||
|
config-opts:
|
||||||
|
- -Dpolkit=false
|
||||||
|
- -Dlibsystemd=false
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
env:
|
||||||
|
CFLAGS: "-m32"
|
||||||
|
CXXFLAGS: "-m32"
|
||||||
|
LDFLAGS: "-m32 -L/app/lib32"
|
||||||
|
PKG_CONFIG_PATH: "/app/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/sdk/toolchain-i386/lib/pkgconfig"
|
||||||
|
sources:
|
||||||
|
- type: archive
|
||||||
|
url: https://pcsclite.apdu.fr/files/pcsc-lite-2.3.1.tar.xz
|
||||||
|
sha256: a641d44d57affe1edd8365dd75307afc307e7eefb4e7ad839f6f146baa41ed56
|
||||||
|
|
||||||
|
# Build the main application (lindbergh-loader)
|
||||||
|
- name: lindbergh-loader
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- export LD_LIBRARY_PATH=/app/lib32:$LD_LIBRARY_PATH
|
||||||
|
- make -j$(nproc)
|
||||||
|
- 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.so /app/lib32/
|
||||||
|
- install -Dm755 ./build/libsegaapi.so /app/lib32/
|
||||||
|
- install -Dm755 ./build/libkswapapi.so /app/lib32/
|
||||||
|
- install -Dm755 ./build/libposixtime.so /app/lib32/
|
||||||
|
- install -Dm755 ./libs/libCg.so /app/lib32/libCg2.so
|
||||||
|
- ln -sf libposixtime.so /app/lib32/libposixtime.so.1
|
||||||
|
- ln -sf libposixtime.so /app/lib32/libposixtime.so.2.4
|
||||||
|
- 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/libnvidia-tls.so.1
|
||||||
|
- mv /app/lib/libopenal* /app/lib32/
|
||||||
|
build-options:
|
||||||
|
arch:
|
||||||
|
x86_64: *i386-build-options
|
||||||
|
sources:
|
||||||
|
- type: dir
|
||||||
|
path: ../..
|
||||||
|
|
||||||
|
# Setup dynamic linker configuration
|
||||||
|
- name: bundle-setup
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- install -Dm644 -t /app/etc ld.so.conf
|
||||||
|
sources:
|
||||||
|
- type: file
|
||||||
|
path: ./assets/ld.so.conf
|
||||||
|
|
||||||
|
# Cleanup unnecessary files to reduce final flatpak size
|
||||||
|
- name: cleanup
|
||||||
|
buildsystem: simple
|
||||||
|
build-commands:
|
||||||
|
- find /app/lib32 -name '*.a' -type f -delete
|
||||||
|
- find /app/lib32 -name '*.la' -type f -delete
|
||||||
|
- find /app/bin -mindepth 1 ! -name "lindbergh" -exec rm -f {} \;
|
||||||
|
- 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
|
||||||
|
- rm -f /app/lib32/libmenu.so*
|
||||||
|
- rm -f /app/lib32/libform.so*
|
||||||
|
- rm -f /app/lib32/libpanel.so*
|
||||||
|
- rm -f /app/lib32/libXmuu.so*
|
||||||
|
- rm -f /app/lib32/libbsd.so*
|
||||||
|
- 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 |
+183
-183
@@ -2,7 +2,6 @@
|
|||||||
#include <string.h> /* String function definitions */
|
#include <string.h> /* String function definitions */
|
||||||
#include <unistd.h> /* UNIX standard function definitions */
|
#include <unistd.h> /* UNIX standard function definitions */
|
||||||
#include <fcntl.h> /* File control definitions */
|
#include <fcntl.h> /* File control definitions */
|
||||||
#include <errno.h> /* Error number definitions */
|
|
||||||
#include <stdlib.h> /* Standard library functions like malloc, free, exit, and atoi */
|
#include <stdlib.h> /* Standard library functions like malloc, free, exit, and atoi */
|
||||||
#include <sys/select.h>
|
#include <sys/select.h>
|
||||||
|
|
||||||
@@ -30,10 +29,10 @@
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t srcAddress;
|
uint32_t srcAddress;
|
||||||
uint32_t srcSize;
|
uint32_t srcSize;
|
||||||
uint32_t destAddress;
|
uint32_t destAddress;
|
||||||
uint32_t destSize;
|
uint32_t destSize;
|
||||||
} BaseboardCommand;
|
} BaseboardCommand;
|
||||||
|
|
||||||
BaseboardCommand jvsCommand = {0};
|
BaseboardCommand jvsCommand = {0};
|
||||||
@@ -41,16 +40,16 @@ BaseboardCommand serialCommand = {0};
|
|||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t *data;
|
uint32_t *data;
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
} readData_t;
|
} readData_t;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
uint32_t offset;
|
uint32_t offset;
|
||||||
uint32_t *data;
|
uint32_t *data;
|
||||||
uint32_t size;
|
uint32_t size;
|
||||||
} writeData_t;
|
} writeData_t;
|
||||||
|
|
||||||
FILE *sram = NULL;
|
FILE *sram = NULL;
|
||||||
@@ -64,224 +63,225 @@ int jvsPacketSize = -1;
|
|||||||
|
|
||||||
int initBaseboard()
|
int initBaseboard()
|
||||||
{
|
{
|
||||||
char *sramPath = getConfig()->sramPath;
|
char *sramPath = getConfig()->sramPath;
|
||||||
|
|
||||||
sram = fopen(sramPath, "a");
|
sram = fopen(sramPath, "a");
|
||||||
|
|
||||||
// Create file if it doesn't exist
|
// Create file if it doesn't exist
|
||||||
if (sram == NULL)
|
if (sram == NULL)
|
||||||
{
|
|
||||||
printf("Error: Cannot open %s\n", sramPath);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
fclose(sram);
|
|
||||||
sram = fopen(sramPath, "rb+");
|
|
||||||
fseek(sram, 0, SEEK_SET);
|
|
||||||
|
|
||||||
if (getConfig()->emulateJVS == 0 && strcmp(getConfig()->jvsPath, "none") != 0)
|
|
||||||
{
|
|
||||||
jvsFileDescriptor = openJVSSerial(getConfig()->jvsPath);
|
|
||||||
if (jvsFileDescriptor < 0)
|
|
||||||
{
|
{
|
||||||
printf("Error: Failed to open %s for JVS\n", getConfig()->jvsPath);
|
printf("Error: Cannot open %s\n", sramPath);
|
||||||
return -1;
|
return 1;
|
||||||
|
}
|
||||||
|
fclose(sram);
|
||||||
|
sram = fopen(sramPath, "rb+");
|
||||||
|
fseek(sram, 0, SEEK_SET);
|
||||||
|
|
||||||
|
if (getConfig()->emulateJVS == 0 && strcmp(getConfig()->jvsPath, "none") != 0)
|
||||||
|
{
|
||||||
|
jvsFileDescriptor = openJVSSerial(getConfig()->jvsPath);
|
||||||
|
if (jvsFileDescriptor < 0)
|
||||||
|
{
|
||||||
|
printf("Error: Failed to open %s for JVS\n", getConfig()->jvsPath);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
initJVSSerial(jvsFileDescriptor);
|
||||||
|
startJVSFrameThread(&jvsFileDescriptor);
|
||||||
}
|
}
|
||||||
|
|
||||||
initJVSSerial(jvsFileDescriptor);
|
return 0;
|
||||||
startJVSFrameThread(&jvsFileDescriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t baseboardRead(int fd, void *buf, size_t count)
|
ssize_t baseboardRead(int fd, void *buf, size_t count)
|
||||||
{
|
{
|
||||||
memcpy(buf, &sharedMemory[sharedMemoryIndex], count);
|
memcpy(buf, &sharedMemory[sharedMemoryIndex], count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
ssize_t baseboardWrite(int fd, const void *buf, size_t count)
|
ssize_t baseboardWrite(int fd, const void *buf, size_t count)
|
||||||
{
|
{
|
||||||
memcpy(&sharedMemory[sharedMemoryIndex], buf, count);
|
memcpy(&sharedMemory[sharedMemoryIndex], buf, 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
int baseboardIoctl(int fd, unsigned int request, void *data)
|
int baseboardIoctl(int fd, unsigned int request, void *data)
|
||||||
{
|
{
|
||||||
switch (request)
|
switch (request)
|
||||||
{
|
|
||||||
|
|
||||||
case BASEBOARD_GET_VERSION:
|
|
||||||
{
|
|
||||||
uint8_t versionData[4] = {0x00, 0x19, 0x20, 0x07};
|
|
||||||
memcpy(data, versionData, 4);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_INIT:
|
|
||||||
{
|
|
||||||
// selectReply = -1; Considering adding this in
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_READY: // Not sure if this is what it should be called
|
|
||||||
{
|
|
||||||
selectReply = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_SEEK_SHM:
|
|
||||||
{
|
|
||||||
sharedMemoryIndex = (unsigned int)data;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_READ_SRAM:
|
|
||||||
{
|
|
||||||
readData_t *_data = data;
|
|
||||||
fseek(sram, _data->offset, SEEK_SET);
|
|
||||||
fread(_data->data, 1, _data->size, sram);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_WRITE_SRAM:
|
|
||||||
{
|
|
||||||
writeData_t *_data = data;
|
|
||||||
fseek(sram, _data->offset, SEEK_SET);
|
|
||||||
fwrite(_data->data, 1, _data->size, sram);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_REQUEST:
|
|
||||||
{
|
|
||||||
uint32_t *_data = data;
|
|
||||||
|
|
||||||
switch (_data[0])
|
|
||||||
{
|
{
|
||||||
|
|
||||||
case BASEBOARD_GET_SERIAL: // bcCmdSysInfoGetReq
|
case BASEBOARD_GET_VERSION:
|
||||||
{
|
{
|
||||||
serialCommand.destAddress = _data[1];
|
uint8_t versionData[4] = {0x00, 0x19, 0x20, 0x07};
|
||||||
serialCommand.destSize = _data[2];
|
memcpy(data, versionData, 4);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_WRITE_FLASH: // bcCmdSysFlashWrite
|
case BASEBOARD_INIT:
|
||||||
{
|
{
|
||||||
log_warn("The game attempted to write to the baseboard flash\n");
|
// selectReply = -1; Considering adding this in
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_PROCESS_JVS:
|
case BASEBOARD_READY: // Not sure if this is what it should be called
|
||||||
{
|
{
|
||||||
jvsCommand.srcAddress = _data[1];
|
selectReply = 0;
|
||||||
jvsCommand.srcSize = _data[2];
|
return 0;
|
||||||
jvsCommand.destAddress = _data[3];
|
}
|
||||||
jvsCommand.destSize = _data[4];
|
break;
|
||||||
memcpy(inputBuffer, &sharedMemory[jvsCommand.srcAddress], jvsCommand.srcSize);
|
|
||||||
|
|
||||||
if (getConfig()->emulateJVS)
|
case BASEBOARD_SEEK_SHM:
|
||||||
{
|
{
|
||||||
processPacket(&jvsPacketSize);
|
sharedMemoryIndex = (unsigned int)data;
|
||||||
}
|
return 0;
|
||||||
else if (jvsFileDescriptor >= 0)
|
}
|
||||||
{
|
break;
|
||||||
for (int i = 0; i < jvsCommand.srcSize; i++)
|
|
||||||
|
case BASEBOARD_READ_SRAM:
|
||||||
|
{
|
||||||
|
readData_t *_data = data;
|
||||||
|
fseek(sram, _data->offset, SEEK_SET);
|
||||||
|
fread(_data->data, 1, _data->size, sram);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_WRITE_SRAM:
|
||||||
|
{
|
||||||
|
writeData_t *_data = data;
|
||||||
|
fseek(sram, _data->offset, SEEK_SET);
|
||||||
|
fwrite(_data->data, 1, _data->size, sram);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_REQUEST:
|
||||||
|
{
|
||||||
|
uint32_t *_data = data;
|
||||||
|
|
||||||
|
switch (_data[0])
|
||||||
{
|
{
|
||||||
write(jvsFileDescriptor, &inputBuffer[i], 1);
|
|
||||||
if (inputBuffer[i] == 0xF0)
|
case BASEBOARD_GET_SERIAL: // bcCmdSysInfoGetReq
|
||||||
{
|
{
|
||||||
setSenseLine(3);
|
serialCommand.destAddress = _data[1];
|
||||||
}
|
serialCommand.destSize = _data[2];
|
||||||
else if (inputBuffer[i] == 0xF1)
|
|
||||||
{
|
|
||||||
setSenseLine(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_WRITE_FLASH: // bcCmdSysFlashWrite
|
||||||
|
{
|
||||||
|
log_warn("The game attempted to write to the baseboard flash\n");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_PROCESS_JVS:
|
||||||
|
{
|
||||||
|
jvsCommand.srcAddress = _data[1];
|
||||||
|
jvsCommand.srcSize = _data[2];
|
||||||
|
jvsCommand.destAddress = _data[3];
|
||||||
|
jvsCommand.destSize = _data[4];
|
||||||
|
memcpy(inputBuffer, &sharedMemory[jvsCommand.srcAddress], jvsCommand.srcSize);
|
||||||
|
|
||||||
|
if (getConfig()->emulateJVS)
|
||||||
|
{
|
||||||
|
processPacket(&jvsPacketSize);
|
||||||
|
}
|
||||||
|
else if (jvsFileDescriptor >= 0)
|
||||||
|
{
|
||||||
|
for (int i = 0; i < jvsCommand.srcSize; i++)
|
||||||
|
{
|
||||||
|
write(jvsFileDescriptor, &inputBuffer[i], 1);
|
||||||
|
if (inputBuffer[i] == 0xF0)
|
||||||
|
{
|
||||||
|
setSenseLine(3);
|
||||||
|
}
|
||||||
|
else if (inputBuffer[i] == 0xF1)
|
||||||
|
{
|
||||||
|
setSenseLine(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BASEBOARD_GET_SENSE_LINE:
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Error: Unknown baseboard command %X\n", _data[0]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acknowledge the command
|
||||||
|
_data[0] |= 0xF0000000;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_GET_SENSE_LINE:
|
case BASEBOARD_RECEIVE:
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("Error: Unknown baseboard command %X\n", _data[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Acknowledge the command
|
|
||||||
_data[0] |= 0xF0000000;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_RECEIVE:
|
|
||||||
{
|
|
||||||
uint32_t *_data = data;
|
|
||||||
|
|
||||||
switch (_data[0] & 0xFFF)
|
|
||||||
{
|
{
|
||||||
|
uint32_t *_data = data;
|
||||||
|
|
||||||
case BASEBOARD_GET_SERIAL:
|
switch (_data[0] & 0xFFF)
|
||||||
{
|
{
|
||||||
memcpy(&sharedMemory[serialCommand.destAddress + 96], SERIAL_STRING, strlen(SERIAL_STRING));
|
|
||||||
_data[1] = 1; // Set the status to success
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case BASEBOARD_GET_SENSE_LINE:
|
case BASEBOARD_GET_SERIAL:
|
||||||
{
|
{
|
||||||
_data[2] = getSenseLine();
|
memcpy(&sharedMemory[serialCommand.destAddress + 96], SERIAL_STRING, strlen(SERIAL_STRING));
|
||||||
_data[1] = 1; // Set the status to success
|
_data[1] = 1; // Set the status to success
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case BASEBOARD_PROCESS_JVS:
|
case BASEBOARD_GET_SENSE_LINE:
|
||||||
{
|
{
|
||||||
if (getConfig()->emulateJVS)
|
_data[2] = getSenseLine();
|
||||||
{
|
_data[1] = 1; // Set the status to success
|
||||||
memcpy(&sharedMemory[jvsCommand.destAddress], outputBuffer, jvsPacketSize);
|
}
|
||||||
_data[2] = jvsCommand.destAddress;
|
break;
|
||||||
_data[3] = jvsPacketSize;
|
|
||||||
_data[1] = 1; // Set the status to success
|
case BASEBOARD_PROCESS_JVS:
|
||||||
}
|
{
|
||||||
else if (jvsFileDescriptor >= 0)
|
if (getConfig()->emulateJVS)
|
||||||
{
|
{
|
||||||
JVSFrame frame = readJVSFrameFromThread();
|
memcpy(&sharedMemory[jvsCommand.destAddress], outputBuffer, jvsPacketSize);
|
||||||
memcpy(&sharedMemory[jvsCommand.destAddress], frame.buffer, frame.size);
|
_data[2] = jvsCommand.destAddress;
|
||||||
_data[2] = jvsCommand.destAddress;
|
_data[3] = jvsPacketSize;
|
||||||
_data[3] = frame.size;
|
_data[1] = 1; // Set the status to success
|
||||||
_data[1] = frame.ready;
|
}
|
||||||
}
|
else if (jvsFileDescriptor >= 0)
|
||||||
|
{
|
||||||
|
JVSFrame frame = readJVSFrameFromThread();
|
||||||
|
memcpy(&sharedMemory[jvsCommand.destAddress], frame.buffer, frame.size);
|
||||||
|
_data[2] = jvsCommand.destAddress;
|
||||||
|
_data[3] = frame.size;
|
||||||
|
_data[1] = frame.ready;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("Error: Unknown baseboard receive command %X\n", _data[0] & 0xFFF);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Acknowledge the command
|
||||||
|
_data[0] |= 0xF0000000;
|
||||||
|
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("Error: Unknown baseboard receive command %X\n", _data[0] & 0xFFF);
|
printf("Error: Unknown baseboard ioctl %X\n", request);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Acknowledge the command
|
|
||||||
_data[0] |= 0xF0000000;
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
printf("Error: Unknown baseboard ioctl %X\n", request);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef BORDER_H
|
#pragma once
|
||||||
#define BORDER_H
|
|
||||||
|
|
||||||
void drawGameBorder(int width, int height, float whiteBorderPercentage, float blackBorderPercentage);
|
void drawGameBorder(int width, int height, float whiteBorderPercentage, float blackBorderPercentage);
|
||||||
|
|
||||||
#endif // BORDER_H
|
|
||||||
+31
-20
@@ -1,7 +1,6 @@
|
|||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -11,6 +10,8 @@
|
|||||||
|
|
||||||
#define BLOCKSIZE 8
|
#define BLOCKSIZE 8
|
||||||
|
|
||||||
|
extern uint32_t gId;
|
||||||
|
|
||||||
uint8_t cardHeader[] = {0x08, 0x00, 0x00, 0x00, 0x81, 0x00, 0x59, 0xda, 0x00, 0x00, 0x54, 0x4d, 0x50, 0x06, 0x03, 0x23, 0x10, 0x41, 0x62,
|
uint8_t cardHeader[] = {0x08, 0x00, 0x00, 0x00, 0x81, 0x00, 0x59, 0xda, 0x00, 0x00, 0x54, 0x4d, 0x50, 0x06, 0x03, 0x23, 0x10, 0x41, 0x62,
|
||||||
0xad, 0x00, 0x2b, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x71, 0x52, 0x70, 0x00, 0x00,
|
0xad, 0x00, 0x2b, 0x0b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x95, 0x71, 0x52, 0x70, 0x00, 0x00,
|
||||||
0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xd2};
|
0x00, 0x00, 0xaa, 0xaa, 0xaa, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xd2};
|
||||||
@@ -38,34 +39,44 @@ void initWriteCmd(int fdIdx)
|
|||||||
|
|
||||||
int initCardReader()
|
int initCardReader()
|
||||||
{
|
{
|
||||||
|
EmulatorConfig *config = getConfig();
|
||||||
|
|
||||||
|
switch (gId)
|
||||||
|
{
|
||||||
|
case R_TUNED:
|
||||||
|
case VIRTUA_TENNIS_3:
|
||||||
|
case VIRTUA_TENNIS_3_TEST:
|
||||||
|
case VIRTUA_TENNIS_3_REVA:
|
||||||
|
case VIRTUA_TENNIS_3_REVA_TEST:
|
||||||
|
case VIRTUA_TENNIS_3_REVB:
|
||||||
|
case VIRTUA_TENNIS_3_REVB_TEST:
|
||||||
|
case VIRTUA_TENNIS_3_REVC:
|
||||||
|
case VIRTUA_TENNIS_3_REVC_TEST:
|
||||||
|
// Code for supported games
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
printf("Warning: This Game does not support Card Reader, I will disable the card reader for you.\n");
|
||||||
|
config->emulateCardreader = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getConfig()->emulateCardreader && getConfig()->emulateDriveboard && gId != R_TUNED)
|
||||||
|
{
|
||||||
|
printf("Warning: This Game does not support Card Reader and Driver Board emulation enabled at the same time.\n");
|
||||||
|
printf("Please disable Drive Board emulations in the config file.\n");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
initReadCmd(0);
|
initReadCmd(0);
|
||||||
initReadCmd(1);
|
initReadCmd(1);
|
||||||
initWriteCmd(0);
|
initWriteCmd(0);
|
||||||
initWriteCmd(1);
|
initWriteCmd(1);
|
||||||
|
|
||||||
uint32_t gId = getConfig()->crc32;
|
|
||||||
if (gId != VIRTUA_TENNIS_3 && gId != VIRTUA_TENNIS_3_TEST && gId != VIRTUA_TENNIS_3_REVA && gId != VIRTUA_TENNIS_3_REVA_TEST &&
|
|
||||||
gId != VIRTUA_TENNIS_3_REVB && gId != VIRTUA_TENNIS_3_REVB_TEST && gId != VIRTUA_TENNIS_3_REVC &&
|
|
||||||
gId != VIRTUA_TENNIS_3_REVC_TEST && gId != R_TUNED)
|
|
||||||
{
|
|
||||||
printf("Game does not support Card Reader, please disable the card reader emulation in the config file.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
if (getConfig()->emulateCardreader && getConfig()->emulateDriveboard && gId != R_TUNED)
|
|
||||||
{
|
|
||||||
printf("Game does not support Card Reader and Driver Board emulation enabled at the same time.\n");
|
|
||||||
printf("Please disable Drive Board emulations in the config file.\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
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,6 +1,6 @@
|
|||||||
#ifndef CARD_READER_H
|
#pragma once
|
||||||
#define CARD_READER_H
|
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
@@ -32,5 +32,3 @@ int initCardReader();
|
|||||||
size_t cardReaderWrite(int fd, const void *buf, size_t count);
|
size_t cardReaderWrite(int fd, const void *buf, size_t count);
|
||||||
size_t cardReaderRead(int fd, void *buf, size_t count);
|
size_t cardReaderRead(int fd, void *buf, size_t count);
|
||||||
void cardReaderSetFd(int serial, int fd, char *fName);
|
void cardReaderSetFd(int serial, int fd, char *fName);
|
||||||
|
|
||||||
#endif
|
|
||||||
+709
-659
File diff suppressed because it is too large
Load Diff
+12
-5
@@ -1,7 +1,7 @@
|
|||||||
#ifndef CONFIG_H
|
#pragma once
|
||||||
#define CONFIG_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
#define MAX_PATH_LENGTH 1024
|
#define MAX_PATH_LENGTH 1024
|
||||||
#define INPUT_STRING_LENGTH 256
|
#define INPUT_STRING_LENGTH 256
|
||||||
@@ -71,7 +71,6 @@
|
|||||||
#define VIRTUA_FIGHTER_5_REVB 0x8953bd52 // DVP-0008B
|
#define VIRTUA_FIGHTER_5_REVB 0x8953bd52 // DVP-0008B
|
||||||
#define VIRTUA_FIGHTER_5_REVE 0x4c2edbf6 // DVP-0008E
|
#define VIRTUA_FIGHTER_5_REVE 0x4c2edbf6 // DVP-0008E
|
||||||
#define VIRTUA_FIGHTER_5_EXPORT 0xec474630 // DVP-0043
|
#define VIRTUA_FIGHTER_5_EXPORT 0xec474630 // DVP-0043
|
||||||
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN 0x48 // DVP-5019 or does not exist
|
|
||||||
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVA 0xbae2be62 // DVP-5019A
|
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVA 0xbae2be62 // DVP-5019A
|
||||||
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB 0x7cee1d81 // DVP-5020
|
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB 0x7cee1d81 // DVP-5020
|
||||||
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB_6000 0x34c0d02 // DVP-5020 ver 6.00 (Weird public version)
|
#define VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB_6000 0x34c0d02 // DVP-5020 ver 6.00 (Weird public version)
|
||||||
@@ -183,6 +182,7 @@ typedef struct {
|
|||||||
char player1_button_8[INPUT_STRING_LENGTH];
|
char player1_button_8[INPUT_STRING_LENGTH];
|
||||||
char player1_button_9[INPUT_STRING_LENGTH];
|
char player1_button_9[INPUT_STRING_LENGTH];
|
||||||
char player1_button_10[INPUT_STRING_LENGTH];
|
char player1_button_10[INPUT_STRING_LENGTH];
|
||||||
|
char player1_coin[INPUT_STRING_LENGTH];
|
||||||
|
|
||||||
// Player 2 controls
|
// Player 2 controls
|
||||||
char player2_button_start[INPUT_STRING_LENGTH];
|
char player2_button_start[INPUT_STRING_LENGTH];
|
||||||
@@ -201,7 +201,8 @@ typedef struct {
|
|||||||
char player2_button_8[INPUT_STRING_LENGTH];
|
char player2_button_8[INPUT_STRING_LENGTH];
|
||||||
char player2_button_9[INPUT_STRING_LENGTH];
|
char player2_button_9[INPUT_STRING_LENGTH];
|
||||||
char player2_button_10[INPUT_STRING_LENGTH];
|
char player2_button_10[INPUT_STRING_LENGTH];
|
||||||
|
char player2_coin[INPUT_STRING_LENGTH];
|
||||||
|
|
||||||
// Analogue inputs
|
// Analogue inputs
|
||||||
char analogue_1[INPUT_STRING_LENGTH];
|
char analogue_1[INPUT_STRING_LENGTH];
|
||||||
char analogue_2[INPUT_STRING_LENGTH];
|
char analogue_2[INPUT_STRING_LENGTH];
|
||||||
@@ -224,17 +225,20 @@ typedef struct
|
|||||||
int emulateDriveboard;
|
int emulateDriveboard;
|
||||||
int emulateMotionboard;
|
int emulateMotionboard;
|
||||||
int emulateCardreader;
|
int emulateCardreader;
|
||||||
|
int emulateTouchscreen;
|
||||||
char cardFile1[MAX_PATH_LENGTH];
|
char cardFile1[MAX_PATH_LENGTH];
|
||||||
char cardFile2[MAX_PATH_LENGTH];
|
char cardFile2[MAX_PATH_LENGTH];
|
||||||
int emulateJVS;
|
int emulateJVS;
|
||||||
int fullscreen;
|
int fullscreen;
|
||||||
char eepromPath[MAX_PATH_LENGTH];
|
char eepromPath[MAX_PATH_LENGTH];
|
||||||
char sramPath[MAX_PATH_LENGTH];
|
char sramPath[MAX_PATH_LENGTH];
|
||||||
|
char libCgPath[MAX_PATH_LENGTH];
|
||||||
char jvsPath[MAX_PATH_LENGTH];
|
char jvsPath[MAX_PATH_LENGTH];
|
||||||
char serial1Path[MAX_PATH_LENGTH];
|
char serial1Path[MAX_PATH_LENGTH];
|
||||||
char serial2Path[MAX_PATH_LENGTH];
|
char serial2Path[MAX_PATH_LENGTH];
|
||||||
int width;
|
int width;
|
||||||
int height;
|
int height;
|
||||||
|
int boostRenderRes;
|
||||||
Colour lindberghColour;
|
Colour lindberghColour;
|
||||||
GameStatus gameStatus;
|
GameStatus gameStatus;
|
||||||
GameType gameType;
|
GameType gameType;
|
||||||
@@ -267,6 +271,9 @@ typedef struct
|
|||||||
char customCursor[MAX_PATH_LENGTH];
|
char customCursor[MAX_PATH_LENGTH];
|
||||||
int customCursorWidth;
|
int customCursorWidth;
|
||||||
int customCursorHeight;
|
int customCursorHeight;
|
||||||
|
char phTouchCursor[MAX_PATH_LENGTH];
|
||||||
|
int phTouchCursorWidth;
|
||||||
|
int phTouchCursorHeight;
|
||||||
int mj4EnabledAtT;
|
int mj4EnabledAtT;
|
||||||
char or2IP[16];
|
char or2IP[16];
|
||||||
char or2Netmask[16];
|
char or2Netmask[16];
|
||||||
@@ -279,6 +286,7 @@ typedef struct
|
|||||||
int borderEnabled;
|
int borderEnabled;
|
||||||
} EmulatorConfig;
|
} EmulatorConfig;
|
||||||
|
|
||||||
|
uint32_t get_crc32(const char *s, ssize_t n);
|
||||||
KeyMapping getDefaultKeymap();
|
KeyMapping getDefaultKeymap();
|
||||||
int initConfig(const char* configFilePath);
|
int initConfig(const char* configFilePath);
|
||||||
EmulatorConfig *getConfig();
|
EmulatorConfig *getConfig();
|
||||||
@@ -292,4 +300,3 @@ const char *getLindberghColourString(Colour lindberghColour);
|
|||||||
const char *getGameRegionString(GameRegion region);
|
const char *getGameRegionString(GameRegion region);
|
||||||
const char *getGpuTypeString(GpuType gpuType);
|
const char *getGpuTypeString(GpuType gpuType);
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -0,0 +1,229 @@
|
|||||||
|
#include <SDL2/SDL_events.h>
|
||||||
|
#include <SDL2/SDL_mouse.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#define STB_IMAGE_IMPLEMENTATION
|
||||||
|
#include "stb_image.h"
|
||||||
|
#define STBI_ONLY_PNG
|
||||||
|
#define STBI_SUPPORT_ZLIB
|
||||||
|
#define STBI_NO_SIMD
|
||||||
|
|
||||||
|
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/Xcursor/Xcursor.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
extern Display *x11Display;
|
||||||
|
extern Window window;
|
||||||
|
|
||||||
|
void *customCursor;
|
||||||
|
void *phTouchCursor;
|
||||||
|
void *blankCursor;
|
||||||
|
|
||||||
|
SDL_Surface *createSurfaceFromStb(unsigned char *data, int width, int height, int channels)
|
||||||
|
{
|
||||||
|
Uint32 rmask, gmask, bmask, amask;
|
||||||
|
if (channels == 4)
|
||||||
|
{
|
||||||
|
rmask = 0x000000FF;
|
||||||
|
gmask = 0x0000FF00;
|
||||||
|
bmask = 0x00FF0000;
|
||||||
|
amask = 0xFF000000;
|
||||||
|
}
|
||||||
|
else if (channels == 3)
|
||||||
|
{
|
||||||
|
rmask = 0x000000FF;
|
||||||
|
gmask = 0x0000FF00;
|
||||||
|
bmask = 0x00FF0000;
|
||||||
|
amask = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Unsupported image format with %d channels.\n", channels);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
return SDL_CreateRGBSurfaceFrom(data, width, height, channels * 8, width * channels, rmask, gmask, bmask, amask);
|
||||||
|
}
|
||||||
|
|
||||||
|
int loadNewCursor(const char *cursorFileName, void **cursor, int customWidth, int customHeight)
|
||||||
|
{
|
||||||
|
int width, height, channels;
|
||||||
|
unsigned char *imageData = stbi_load(cursorFileName, &width, &height, &channels, 0);
|
||||||
|
if (!imageData)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to load image: %s\n", cursorFileName);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Surface *originalSurface = createSurfaceFromStb(imageData, width, height, channels);
|
||||||
|
if (!originalSurface)
|
||||||
|
{
|
||||||
|
stbi_image_free(imageData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Surface *resizedSurface =
|
||||||
|
SDL_CreateRGBSurface(0, customWidth, customHeight, originalSurface->format->BitsPerPixel, originalSurface->format->Rmask,
|
||||||
|
originalSurface->format->Gmask, originalSurface->format->Bmask, originalSurface->format->Amask);
|
||||||
|
if (!resizedSurface)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "SDL_CreateRGBSurface Error: %s\n", SDL_GetError());
|
||||||
|
SDL_FreeSurface(originalSurface);
|
||||||
|
stbi_image_free(imageData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_Rect srcRect = {0, 0, originalSurface->w, originalSurface->h};
|
||||||
|
SDL_Rect destRect = {0, 0, customWidth, customHeight};
|
||||||
|
if (SDL_BlitScaled(originalSurface, &srcRect, resizedSurface, &destRect) != 0)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "SDL_BlitScaled Error: %s\n", SDL_GetError());
|
||||||
|
SDL_FreeSurface(resizedSurface);
|
||||||
|
SDL_FreeSurface(originalSurface);
|
||||||
|
stbi_image_free(imageData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getConfig()->noSDL == 0)
|
||||||
|
{
|
||||||
|
*cursor = SDL_CreateColorCursor(resizedSurface, customWidth / 2, customHeight / 2);
|
||||||
|
if (!*cursor)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "SDL_CreateColorCursor Error: %s\n", SDL_GetError());
|
||||||
|
SDL_FreeSurface(resizedSurface);
|
||||||
|
SDL_FreeSurface(originalSurface);
|
||||||
|
stbi_image_free(imageData);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
SDL_FreeSurface(resizedSurface);
|
||||||
|
SDL_FreeSurface(originalSurface);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XcursorImage *xcursor = XcursorImageCreate(resizedSurface->w, resizedSurface->h);
|
||||||
|
if (!xcursor)
|
||||||
|
return None;
|
||||||
|
|
||||||
|
xcursor->xhot = customWidth / 2;
|
||||||
|
xcursor->yhot = customHeight / 2;
|
||||||
|
xcursor->width = resizedSurface->w;
|
||||||
|
xcursor->height = resizedSurface->h;
|
||||||
|
|
||||||
|
// Convert SDL surface to Xcursor format (32-bit ARGB)
|
||||||
|
for (int y = 0; y < resizedSurface->h; ++y)
|
||||||
|
{
|
||||||
|
for (int x = 0; x < resizedSurface->w; ++x)
|
||||||
|
{
|
||||||
|
Uint32 pixel = ((Uint32 *)resizedSurface->pixels)[y * resizedSurface->w + x];
|
||||||
|
Uint8 r, g, b, a;
|
||||||
|
SDL_GetRGBA(pixel, resizedSurface->format, &r, &g, &b, &a);
|
||||||
|
xcursor->pixels[y * resizedSurface->w + x] = (a << 24) | (r << 16) | (g << 8) | b;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
*cursor = (void*)XcursorImageLoadCursor(x11Display, xcursor);
|
||||||
|
XcursorImageDestroy(xcursor);
|
||||||
|
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void loadCursors()
|
||||||
|
{
|
||||||
|
if (strcmp(getConfig()->customCursor, "") != 0)
|
||||||
|
{
|
||||||
|
if (!loadNewCursor(getConfig()->customCursor, (void *)&customCursor, getConfig()->customCursorWidth,
|
||||||
|
getConfig()->customCursorHeight))
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Custom cursor could not be loaded!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(getConfig()->phTouchCursor, "") != 0)
|
||||||
|
{
|
||||||
|
if (!loadNewCursor(getConfig()->phTouchCursor, (void *)&phTouchCursor, getConfig()->phTouchCursorWidth,
|
||||||
|
getConfig()->phTouchCursorHeight))
|
||||||
|
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Custom cursor could not be loaded!\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(getConfig()->noSDL)
|
||||||
|
{
|
||||||
|
XColor dummyColor;
|
||||||
|
Pixmap blankPixmap;
|
||||||
|
blankPixmap = XCreatePixmap(x11Display, window, 1, 1, 1);
|
||||||
|
if (!blankPixmap)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to create blank pixmap\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
blankCursor = (void*)XCreatePixmapCursor(x11Display, blankPixmap, blankPixmap, &dummyColor, &dummyColor, 0, 0);
|
||||||
|
if (!blankCursor)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Failed to create blank cursor\n");
|
||||||
|
XFreePixmap(x11Display, blankPixmap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void setCursor(void *cursor)
|
||||||
|
{
|
||||||
|
if (getConfig()->noSDL == 0)
|
||||||
|
{
|
||||||
|
if (SDL_GetCursor() != NULL)
|
||||||
|
SDL_SetCursor(cursor);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XDefineCursor(x11Display, window, (Cursor)cursor);
|
||||||
|
XFlush(x11Display);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void hideCursor()
|
||||||
|
{
|
||||||
|
if (getConfig()->noSDL == 0)
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XDefineCursor(x11Display, window, (Cursor)blankCursor);
|
||||||
|
XFlush(x11Display);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showCursor()
|
||||||
|
{
|
||||||
|
if (getConfig()->noSDL == 0)
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(SDL_ENABLE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XDefineCursor(x11Display, window, (Cursor)customCursor);
|
||||||
|
XFlush(x11Display);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void showPhCursor()
|
||||||
|
{
|
||||||
|
if (getConfig()->noSDL == 0)
|
||||||
|
{
|
||||||
|
SDL_ShowCursor(SDL_ENABLE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
XDefineCursor(x11Display, window, (Cursor)phTouchCursor);
|
||||||
|
XFlush(x11Display);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
|
||||||
|
int loadNewCursor(const char *cursorFileName, void **cursor, int customWidth, int customHeight);
|
||||||
|
void loadCursors();
|
||||||
|
void setCursor(void *cursor);
|
||||||
|
void hideCursor();
|
||||||
|
void showCursor();
|
||||||
|
void showPhCursor();
|
||||||
+22
-16
@@ -16,6 +16,8 @@
|
|||||||
#define I2C_SEEK 2
|
#define I2C_SEEK 2
|
||||||
#define I2C_WRITE 3
|
#define I2C_WRITE 3
|
||||||
|
|
||||||
|
extern uint32_t gId;
|
||||||
|
|
||||||
union i2c_smbus_data {
|
union i2c_smbus_data {
|
||||||
uint8_t byte;
|
uint8_t byte;
|
||||||
uint16_t word;
|
uint16_t word;
|
||||||
@@ -68,36 +70,40 @@ int initEeprom()
|
|||||||
setFreeplay(eeprom, getConfig()->freeplay);
|
setFreeplay(eeprom, getConfig()->freeplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((getConfig()->crc32 == LETS_GO_JUNGLE_SPECIAL) || (getConfig()->crc32 == THE_HOUSE_OF_THE_DEAD_EX) ||
|
switch (gId)
|
||||||
(getConfig()->crc32 == THE_HOUSE_OF_THE_DEAD_4_SPECIAL) ||
|
|
||||||
(getConfig()->crc32 == THE_HOUSE_OF_THE_DEAD_4_SPECIAL_REVB))
|
|
||||||
{
|
{
|
||||||
|
case LETS_GO_JUNGLE_SPECIAL:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_EX:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_SPECIAL:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_SPECIAL_REVB:
|
||||||
if (fixCreditSection(eeprom) != 0)
|
if (fixCreditSection(eeprom) != 0)
|
||||||
{
|
{
|
||||||
printf("Error initializing eeprom settings.");
|
printf("Error initializing eeprom settings.");
|
||||||
fclose(eeprom);
|
fclose(eeprom);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
case HUMMER:
|
||||||
if (getConfig()->crc32 == HUMMER || getConfig()->crc32 == HUMMER_SDLX || getConfig()->crc32 == HUMMER_EXTREME ||
|
case HUMMER_SDLX:
|
||||||
getConfig()->crc32 == HUMMER_EXTREME_MDX)
|
case HUMMER_EXTREME:
|
||||||
{
|
case HUMMER_EXTREME_MDX:
|
||||||
if (fixCoinAssignmentsHummer(eeprom) != 0)
|
if (fixCoinAssignmentsHummer(eeprom) != 0)
|
||||||
{
|
{
|
||||||
printf("Error initializing eeprom settings.");
|
printf("Error initializing eeprom settings.");
|
||||||
fclose(eeprom);
|
fclose(eeprom);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
break;
|
||||||
|
case OUTRUN_2_SP_SDX:
|
||||||
if ((getConfig()->crc32 == OUTRUN_2_SP_SDX || getConfig()->crc32 == OUTRUN_2_SP_SDX_REVA) && strcmp(getConfig()->or2IP, "") != 0)
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
{
|
if (strcmp(getConfig()->or2IP, "") != 0)
|
||||||
if (setIP(eeprom, getConfig()->or2IP, getConfig()->or2Netmask) != 0)
|
|
||||||
{
|
{
|
||||||
printf("Error setting the new IP address.");
|
if (setIP(eeprom, getConfig()->or2IP, getConfig()->or2Netmask) != 0)
|
||||||
fclose(eeprom);
|
{
|
||||||
return 1;
|
printf("Error setting the new IP address.");
|
||||||
|
fclose(eeprom);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "eeprom_settings.h"
|
#include "eeprom_settings.h"
|
||||||
|
|
||||||
uint32_t crc32_table[255];
|
uint32_t crc32_table[255];
|
||||||
|
|||||||
+175
-32
@@ -41,6 +41,7 @@ ArcadeInput arcadeInputs[] = {{"TEST_BUTTON", 0, BUTTON_TEST, 1},
|
|||||||
{"PLAYER_1_BUTTON_8", 1, BUTTON_8, 1},
|
{"PLAYER_1_BUTTON_8", 1, BUTTON_8, 1},
|
||||||
{"PLAYER_1_BUTTON_9", 1, BUTTON_9, 1},
|
{"PLAYER_1_BUTTON_9", 1, BUTTON_9, 1},
|
||||||
{"PLAYER_1_BUTTON_10", 1, BUTTON_10, 1},
|
{"PLAYER_1_BUTTON_10", 1, BUTTON_10, 1},
|
||||||
|
{"PLAYER_1_COIN", 1, COIN, 1},
|
||||||
|
|
||||||
{"PLAYER_2_BUTTON_START", 2, BUTTON_START, 1},
|
{"PLAYER_2_BUTTON_START", 2, BUTTON_START, 1},
|
||||||
{"PLAYER_2_BUTTON_SERVICE", 2, BUTTON_SERVICE, 1},
|
{"PLAYER_2_BUTTON_SERVICE", 2, BUTTON_SERVICE, 1},
|
||||||
@@ -58,6 +59,7 @@ ArcadeInput arcadeInputs[] = {{"TEST_BUTTON", 0, BUTTON_TEST, 1},
|
|||||||
{"PLAYER_2_BUTTON_8", 2, BUTTON_8, 1},
|
{"PLAYER_2_BUTTON_8", 2, BUTTON_8, 1},
|
||||||
{"PLAYER_2_BUTTON_9", 2, BUTTON_9, 1},
|
{"PLAYER_2_BUTTON_9", 2, BUTTON_9, 1},
|
||||||
{"PLAYER_2_BUTTON_10", 2, BUTTON_10, 1},
|
{"PLAYER_2_BUTTON_10", 2, BUTTON_10, 1},
|
||||||
|
{"PLAYER_2_COIN", 2, COIN, 1},
|
||||||
|
|
||||||
{"ANALOGUE_1", 0, ANALOGUE_1, 1},
|
{"ANALOGUE_1", 0, ANALOGUE_1, 1},
|
||||||
{"ANALOGUE_2", 0, ANALOGUE_2, 1},
|
{"ANALOGUE_2", 0, ANALOGUE_2, 1},
|
||||||
@@ -860,7 +862,7 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
int controller = open(controllers->controller[i].path, O_RDONLY);
|
int controller = open(controllers->controller[i].path, O_RDONLY);
|
||||||
if (controller < 0)
|
if (controller < 0)
|
||||||
{
|
{
|
||||||
strcpy(controllers->controller[i].name, "Unknown");
|
strncpy(controllers->controller[i].name, "Unknown", SIZE);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -910,16 +912,26 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
{
|
{
|
||||||
if (test_bit(code, bit[EV_KEY]))
|
if (test_bit(code, bit[EV_KEY]))
|
||||||
{
|
{
|
||||||
|
if(controllers->controller[i].inputCount >= MAX_INPUTS) { // the number of input is limited
|
||||||
|
fprintf(stderr, "warning, maximum number of inputs reached !\n");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
controllers->controller[i].enabled = 1;
|
controllers->controller[i].enabled = 1;
|
||||||
ControllerInput *controllerInput =
|
ControllerInput *controllerInput =
|
||||||
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
||||||
controllerInput->evType = EV_KEY;
|
controllerInput->evType = EV_KEY;
|
||||||
controllerInput->evCode = code;
|
controllerInput->evCode = code;
|
||||||
controllerInput->specialFunction = NO_SPECIAL_FUNCTION;
|
controllerInput->specialFunction = NO_SPECIAL_FUNCTION;
|
||||||
strcpy(controllerInput->inputName, controllers->controller[i].name);
|
strncpy(controllerInput->inputName, controllers->controller[i].name, SIZE);
|
||||||
strcat(controllerInput->inputName, "_");
|
strcat(controllerInput->inputName, "_");
|
||||||
strcat(controllerInput->inputName, codename(EV_KEY, code));
|
strcat(controllerInput->inputName, codename(EV_KEY, code));
|
||||||
normaliseName(controllerInput->inputName);
|
normaliseName(controllerInput->inputName);
|
||||||
|
if (snprintf(controllerInput->inputTechName, SIZE, "%s:KEY:%i", controllers->controller[i].path, code) >= 1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
strncpy(controllerInput->inputTechNegName, "-", SIZE); // unassignable value (not "" while some conf are empty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -937,31 +949,70 @@ static ControllerStatus listControllers(Controllers *controllers)
|
|||||||
controllerInput->evType = EV_ABS;
|
controllerInput->evType = EV_ABS;
|
||||||
controllerInput->evCode = code;
|
controllerInput->evCode = code;
|
||||||
controllerInput->specialFunction = NO_SPECIAL_FUNCTION;
|
controllerInput->specialFunction = NO_SPECIAL_FUNCTION;
|
||||||
strcpy(controllerInput->inputName, controllers->controller[i].name);
|
strncpy(controllerInput->inputName, controllers->controller[i].name, SIZE);
|
||||||
strcat(controllerInput->inputName, "_");
|
strcat(controllerInput->inputName, "_");
|
||||||
strcat(controllerInput->inputName, codename(EV_ABS, code));
|
strcat(controllerInput->inputName, codename(EV_ABS, code));
|
||||||
normaliseName(controllerInput->inputName);
|
normaliseName(controllerInput->inputName);
|
||||||
|
if (snprintf(controllerInput->inputTechName, SIZE, "%s:ABS:%i", controllers->controller[i].path, code) >= 1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
if (snprintf(controllerInput->inputTechNegName, SIZE, "%s:ABS_NEG:%i", controllers->controller[i].path, code) >= 1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
|
||||||
ControllerInput *minControllerInput =
|
ControllerInput *minControllerInput =
|
||||||
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
||||||
minControllerInput->evType = EV_ABS;
|
minControllerInput->evType = EV_ABS;
|
||||||
minControllerInput->evCode = code;
|
minControllerInput->evCode = code;
|
||||||
minControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MIN;
|
minControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MIN;
|
||||||
strcpy(minControllerInput->inputName, controllerInput->inputName);
|
strncpy(minControllerInput->inputName, controllerInput->inputName, SIZE);
|
||||||
strcat(minControllerInput->inputName, "_MIN");
|
strcat(minControllerInput->inputName, "_MIN");
|
||||||
|
if (snprintf(minControllerInput->inputTechName, SIZE, "%s:ABS:%i:MIN", controllers->controller[i].path, code) >= 1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
if (snprintf(minControllerInput->inputTechNegName, SIZE, "%s:ABS_NEG:%i:MIN", controllers->controller[i].path, code) >=
|
||||||
|
1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
|
||||||
ControllerInput *maxControllerInput =
|
ControllerInput *maxControllerInput =
|
||||||
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
&controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
||||||
maxControllerInput->evType = EV_ABS;
|
maxControllerInput->evType = EV_ABS;
|
||||||
maxControllerInput->evCode = code;
|
maxControllerInput->evCode = code;
|
||||||
maxControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MAX;
|
maxControllerInput->specialFunction = ANALOGUE_TO_DIGITAL_MAX;
|
||||||
strcpy(maxControllerInput->inputName, controllerInput->inputName);
|
strncpy(maxControllerInput->inputName, controllerInput->inputName, SIZE);
|
||||||
strcat(maxControllerInput->inputName, "_MAX");
|
strcat(maxControllerInput->inputName, "_MAX");
|
||||||
|
if (snprintf(maxControllerInput->inputTechName, SIZE, "%s:ABS:%i:MAX", controllers->controller[i].path, code) >= 1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
if (snprintf(maxControllerInput->inputTechNegName, SIZE, "%s:ABS_NEG:%i:MAX", controllers->controller[i].path, code) >=
|
||||||
|
1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
|
||||||
|
ControllerInput *shakeControllerInput = &controllers->controller[i].inputs[controllers->controller[i].inputCount++];
|
||||||
|
shakeControllerInput->evType = EV_ABS;
|
||||||
|
shakeControllerInput->evCode = code;
|
||||||
|
shakeControllerInput->specialFunction = ANALOGUE_SHAKE;
|
||||||
|
strncpy(shakeControllerInput->inputName, controllerInput->inputName, SIZE);
|
||||||
|
strcat(shakeControllerInput->inputName, "_SHAKE");
|
||||||
|
if (snprintf(shakeControllerInput->inputTechName, SIZE, "%s:ABS:%i:SHAKE", controllers->controller[i].path, code) >=
|
||||||
|
1024)
|
||||||
|
{
|
||||||
|
// hum ok, truncated value
|
||||||
|
}
|
||||||
|
|
||||||
struct input_absinfo absoluteFeatures;
|
struct input_absinfo absoluteFeatures;
|
||||||
ioctl(controller, EVIOCGABS(code), &absoluteFeatures);
|
ioctl(controller, EVIOCGABS(code), &absoluteFeatures);
|
||||||
controllers->controller[i].absMin[code] = absoluteFeatures.minimum;
|
controllers->controller[i].absMin[code] = absoluteFeatures.minimum;
|
||||||
controllers->controller[i].absMax[code] = absoluteFeatures.maximum;
|
controllers->controller[i].absMax[code] = absoluteFeatures.maximum;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1048,8 +1099,13 @@ void *controllerThread(void *_args)
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
setSwitch(args->controller->keyTriggers[event.code].player,
|
if(args->controller->keyTriggers[event.code].isCoin == 1) {
|
||||||
args->controller->keyTriggers[event.code].channel, event.value == 0 ? 0 : 1);
|
if(event.value == 1)
|
||||||
|
incrementCoin(args->controller->keyTriggers[event.code].player, 1);
|
||||||
|
} else
|
||||||
|
setSwitch(args->controller->keyTriggers[event.code].player,
|
||||||
|
args->controller->keyTriggers[event.code].channel, event.value == 0 ? 0 : 1);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1059,31 +1115,67 @@ void *controllerThread(void *_args)
|
|||||||
((double)event.value - (double)args->controller->absMin[event.code]) /
|
((double)event.value - (double)args->controller->absMin[event.code]) /
|
||||||
((double)args->controller->absMax[event.code] - (double)args->controller->absMin[event.code]);
|
((double)args->controller->absMax[event.code] - (double)args->controller->absMin[event.code]);
|
||||||
|
|
||||||
|
if(args->controller->absTriggers[event.code].isNeg == 1) {
|
||||||
|
scaled = 1.0 - scaled;
|
||||||
|
}
|
||||||
|
|
||||||
if (args->controller->absTriggers[event.code].enabled)
|
if (args->controller->absTriggers[event.code].enabled)
|
||||||
{
|
{
|
||||||
int channel = args->controller->absTriggers[event.code].channel;
|
int channel = args->controller->absTriggers[event.code].channel;
|
||||||
// Deadzone handling
|
|
||||||
if (scaled < analogue_deadzones[channel].start_max)
|
if (args->controller->absTriggers[event.code].isAnalogue) {
|
||||||
|
// Deadzone handling
|
||||||
|
if (scaled < analogue_deadzones[channel].start_max)
|
||||||
scaled = 0.0;
|
scaled = 0.0;
|
||||||
if (scaled > analogue_deadzones[channel].middle_min && scaled < analogue_deadzones[channel].middle_max)
|
if (scaled > analogue_deadzones[channel].middle_min && scaled < analogue_deadzones[channel].middle_max)
|
||||||
scaled = 0.5;
|
scaled = 0.5;
|
||||||
if (scaled > analogue_deadzones[channel].end_min)
|
if (scaled > analogue_deadzones[channel].end_min)
|
||||||
scaled = 1.0;
|
scaled = 1.0;
|
||||||
|
setAnalogue(channel, scaled * (pow(2, jvsBits) - 1));
|
||||||
setAnalogue(channel, scaled * (pow(2, jvsBits) - 1));
|
} else {
|
||||||
|
setSwitch(args->controller->absTriggers[event.code].player,
|
||||||
|
args->controller->absTriggers[event.code].channel, scaled < 0.8 ? 0 : 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args->controller->absTriggers[event.code].minEnabled)
|
if(event.value <= ((args->controller->absMin[event.code] + args->controller->absMax[event.code]) / 2)) {
|
||||||
{
|
if (args->controller->absTriggers[event.code].minEnabled)
|
||||||
setSwitch(args->controller->absTriggers[event.code].minPlayer,
|
{
|
||||||
args->controller->absTriggers[event.code].minChannel, scaled < 0.2);
|
int channel = args->controller->absTriggers[event.code].minChannel;
|
||||||
|
|
||||||
|
if (args->controller->absTriggers[event.code].isAnalogue) {
|
||||||
|
setAnalogue(channel, scaled < 0.2 ? 0.0 : pow(2, jvsBits) * 1.0);
|
||||||
|
} else {
|
||||||
|
setSwitch(args->controller->absTriggers[event.code].minPlayer,
|
||||||
|
args->controller->absTriggers[event.code].minChannel, scaled < 0.2 ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (args->controller->absTriggers[event.code].maxEnabled)
|
if(event.value >= ((args->controller->absMin[event.code] + args->controller->absMax[event.code]) / 2)) {
|
||||||
{
|
if (args->controller->absTriggers[event.code].maxEnabled)
|
||||||
setSwitch(args->controller->absTriggers[event.code].maxPlayer,
|
{
|
||||||
args->controller->absTriggers[event.code].maxChannel, scaled > 0.8);
|
int channel = args->controller->absTriggers[event.code].maxChannel;
|
||||||
|
|
||||||
|
if (args->controller->absTriggers[event.code].isAnalogue) {
|
||||||
|
setAnalogue(channel, scaled > 0.8 ? pow(2, jvsBits) : 0.0);
|
||||||
|
} else {
|
||||||
|
setSwitch(args->controller->absTriggers[event.code].maxPlayer,
|
||||||
|
args->controller->absTriggers[event.code].maxChannel, scaled > 0.8 ? 1 : 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (args->controller->absTriggers[event.code].shakeEnabled)
|
||||||
|
{
|
||||||
|
int channel = args->controller->absTriggers[event.code].shakeChannel;
|
||||||
|
if( (scaled > args->controller->absTriggers[event.code].shakePreviousScaled && scaled - args->controller->absTriggers[event.code].shakePreviousScaled > 0.1) ||
|
||||||
|
(scaled < args->controller->absTriggers[event.code].shakePreviousScaled && -scaled + args->controller->absTriggers[event.code].shakePreviousScaled > 0.1)) {
|
||||||
|
setAnalogue(channel, 0);
|
||||||
|
} else {
|
||||||
|
setAnalogue(channel, pow(2, jvsBits) / 2);
|
||||||
|
}
|
||||||
|
args->controller->absTriggers[event.code].shakePreviousScaled = scaled;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1106,6 +1198,10 @@ char *getMapping(char *mapping)
|
|||||||
// Test button
|
// Test button
|
||||||
if (strcmp(mapping, config->arcadeInputs.test) == 0)
|
if (strcmp(mapping, config->arcadeInputs.test) == 0)
|
||||||
return "TEST_BUTTON";
|
return "TEST_BUTTON";
|
||||||
|
if (strcmp(mapping, config->arcadeInputs.player1_coin) == 0)
|
||||||
|
return "PLAYER_1_COIN";
|
||||||
|
if (strcmp(mapping, config->arcadeInputs.player2_coin) == 0)
|
||||||
|
return "PLAYER_2_COIN";
|
||||||
|
|
||||||
// Player 1 controls
|
// Player 1 controls
|
||||||
if (strcmp(mapping, config->arcadeInputs.player1_button_start) == 0)
|
if (strcmp(mapping, config->arcadeInputs.player1_button_start) == 0)
|
||||||
@@ -1204,7 +1300,7 @@ ControllerStatus getArcadeInputByName(char *name, ArcadeInput *input)
|
|||||||
{
|
{
|
||||||
if (strcmp(tempName, name) == 0)
|
if (strcmp(tempName, name) == 0)
|
||||||
{
|
{
|
||||||
strcpy(input->name, arcadeInputs[index].name);
|
strncpy(input->name, arcadeInputs[index].name, SIZE);
|
||||||
input->channel = arcadeInputs[index].channel;
|
input->channel = arcadeInputs[index].channel;
|
||||||
input->player = arcadeInputs[index].player;
|
input->player = arcadeInputs[index].player;
|
||||||
return CONTROLLER_STATUS_SUCCESS;
|
return CONTROLLER_STATUS_SUCCESS;
|
||||||
@@ -1232,19 +1328,35 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
controllers->controller[i].absTriggers[j].enabled = 0;
|
controllers->controller[i].absTriggers[j].enabled = 0;
|
||||||
controllers->controller[i].absTriggers[j].minEnabled = 0;
|
controllers->controller[i].absTriggers[j].minEnabled = 0;
|
||||||
controllers->controller[i].absTriggers[j].maxEnabled = 0;
|
controllers->controller[i].absTriggers[j].maxEnabled = 0;
|
||||||
|
controllers->controller[i].absTriggers[j].shakeEnabled = 0;
|
||||||
|
controllers->controller[i].absTriggers[j].isNeg = 0;
|
||||||
|
controllers->controller[i].absTriggers[j].isAnalogue = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < KEY_MAX; j++)
|
for (int j = 0; j < KEY_MAX; j++)
|
||||||
{
|
{
|
||||||
controllers->controller[i].keyTriggers[j].enabled = 0;
|
controllers->controller[i].keyTriggers[j].enabled = 0;
|
||||||
controllers->controller[i].keyTriggers[j].isAnalogue = 0;
|
controllers->controller[i].keyTriggers[j].isAnalogue = 0;
|
||||||
|
controllers->controller[i].keyTriggers[j].isCoin = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int j = 0; j < controllers->controller[i].inputCount; j++)
|
for (int j = 0; j < controllers->controller[i].inputCount; j++)
|
||||||
{
|
{
|
||||||
char *mapping = getMapping(controllers->controller[i].inputs[j].inputName);
|
char *mapping = getMapping(controllers->controller[i].inputs[j].inputName);
|
||||||
if (mapping == NULL)
|
int negabs = 0;
|
||||||
continue;
|
|
||||||
|
if (mapping == NULL) {
|
||||||
|
// give a 2nd chance with a techninal mapping
|
||||||
|
mapping = getMapping(controllers->controller[i].inputs[j].inputTechName);
|
||||||
|
if (mapping == NULL) {
|
||||||
|
// give a 3rd change with negativ technical mapping
|
||||||
|
mapping = getMapping(controllers->controller[i].inputs[j].inputTechNegName);
|
||||||
|
negabs = 1;
|
||||||
|
if (mapping == NULL) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ArcadeInput input = {0};
|
ArcadeInput input = {0};
|
||||||
ControllerStatus status = getArcadeInputByName(mapping, &input);
|
ControllerStatus status = getArcadeInputByName(mapping, &input);
|
||||||
@@ -1265,10 +1377,13 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].enabled = 1;
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].enabled = 1;
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].channel =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].channel =
|
||||||
input.channel;
|
input.channel;
|
||||||
strcpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].name,
|
strncpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].name,
|
||||||
input.name);
|
input.name, SIZE);
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].player =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].player =
|
||||||
input.player;
|
input.player;
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isNeg = negabs;
|
||||||
|
if (strstr(input.name, "ANALOGUE") == NULL)
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1277,10 +1392,13 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxEnabled = 1;
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxEnabled = 1;
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxChannel =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxChannel =
|
||||||
input.channel;
|
input.channel;
|
||||||
strcpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxName,
|
strncpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxName,
|
||||||
input.name);
|
input.name, SIZE);
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxPlayer =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].maxPlayer =
|
||||||
input.player;
|
input.player;
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isNeg = negabs;
|
||||||
|
if (strstr(input.name, "ANALOGUE") == NULL)
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1289,10 +1407,25 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minEnabled = 1;
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minEnabled = 1;
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minChannel =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minChannel =
|
||||||
input.channel;
|
input.channel;
|
||||||
strcpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minName,
|
strncpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minName,
|
||||||
input.name);
|
input.name, SIZE);
|
||||||
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minPlayer =
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].minPlayer =
|
||||||
input.player;
|
input.player;
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isNeg = negabs;
|
||||||
|
if (strstr(input.name, "ANALOGUE") == NULL)
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case ANALOGUE_SHAKE:
|
||||||
|
{
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakeEnabled = 1;
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakeChannel =
|
||||||
|
input.channel;
|
||||||
|
strncpy(controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakeName,
|
||||||
|
input.name, SIZE);
|
||||||
|
controllers->controller[i].absTriggers[controllers->controller[i].inputs[j].evCode].shakePlayer =
|
||||||
|
input.player;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1307,13 +1440,23 @@ ControllerStatus startControllerThreads(Controllers *controllers)
|
|||||||
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].enabled = 1;
|
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].enabled = 1;
|
||||||
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].channel =
|
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].channel =
|
||||||
input.channel;
|
input.channel;
|
||||||
strcpy(controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].name,
|
strncpy(controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].name,
|
||||||
input.name);
|
input.name, SIZE);
|
||||||
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].player =
|
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].player =
|
||||||
input.player;
|
input.player;
|
||||||
|
|
||||||
if (strstr(input.name, "ANALOGUE") != NULL)
|
if (strstr(input.name, "ANALOGUE") != NULL)
|
||||||
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 1;
|
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].isAnalogue = 1;
|
||||||
|
|
||||||
|
if (strcmp(input.name, "PLAYER_1_COIN") == 0)
|
||||||
|
{
|
||||||
|
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].isCoin = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(input.name, "PLAYER_2_COIN") == 0)
|
||||||
|
{
|
||||||
|
controllers->controller[i].keyTriggers[controllers->controller[i].inputs[j].evCode].isCoin = 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|||||||
@@ -2,9 +2,9 @@
|
|||||||
|
|
||||||
#include <linux/input-event-codes.h>
|
#include <linux/input-event-codes.h>
|
||||||
|
|
||||||
#define SIZE 1024
|
#define SIZE 300
|
||||||
#define CONTROLLER_THREAD_MAX 256
|
#define CONTROLLER_THREAD_MAX 256
|
||||||
|
#define MAX_INPUTS 512
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -31,6 +31,15 @@ typedef struct
|
|||||||
int maxEnabled;
|
int maxEnabled;
|
||||||
|
|
||||||
int isAnalogue;
|
int isAnalogue;
|
||||||
|
int isNeg; // reversed axis
|
||||||
|
|
||||||
|
char shakeName[SIZE];
|
||||||
|
int shakeChannel;
|
||||||
|
int shakeEnabled;
|
||||||
|
int shakePlayer;
|
||||||
|
double shakePreviousScaled;
|
||||||
|
|
||||||
|
int isCoin;
|
||||||
} ArcadeInput;
|
} ArcadeInput;
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
@@ -43,12 +52,15 @@ typedef enum {
|
|||||||
NO_SPECIAL_FUNCTION = 0,
|
NO_SPECIAL_FUNCTION = 0,
|
||||||
ANALOGUE_TO_DIGITAL_MAX,
|
ANALOGUE_TO_DIGITAL_MAX,
|
||||||
ANALOGUE_TO_DIGITAL_MIN,
|
ANALOGUE_TO_DIGITAL_MIN,
|
||||||
DIGITAL_TO_ANALOGUE
|
DIGITAL_TO_ANALOGUE,
|
||||||
|
ANALOGUE_SHAKE
|
||||||
} SpecialFunction;
|
} SpecialFunction;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
char inputName[SIZE];
|
char inputName[SIZE];
|
||||||
|
char inputTechName[SIZE];
|
||||||
|
char inputTechNegName[SIZE];
|
||||||
int evType;
|
int evType;
|
||||||
int evCode;
|
int evCode;
|
||||||
SpecialFunction specialFunction;
|
SpecialFunction specialFunction;
|
||||||
@@ -62,7 +74,7 @@ typedef struct
|
|||||||
int absMax[ABS_MAX];
|
int absMax[ABS_MAX];
|
||||||
int absMin[ABS_MAX];
|
int absMin[ABS_MAX];
|
||||||
|
|
||||||
ControllerInput inputs[SIZE];
|
ControllerInput inputs[MAX_INPUTS];
|
||||||
int inputCount;
|
int inputCount;
|
||||||
|
|
||||||
ArcadeInput keyTriggers[KEY_MAX];
|
ArcadeInput keyTriggers[KEY_MAX];
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
#ifndef FPS_LIMITER_H
|
#pragma once
|
||||||
#define FPS_LIMITER_H
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -13,5 +12,3 @@ typedef struct
|
|||||||
long Clock_now();
|
long Clock_now();
|
||||||
void FpsLimiter(fps_limit *stats);
|
void FpsLimiter(fps_limit *stats);
|
||||||
double calculateFps();
|
double calculateFps();
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
#include "border.h"
|
#include "border.h"
|
||||||
#include "resolution.h"
|
#include "resolution.h"
|
||||||
|
|
||||||
|
extern uint32_t gId;
|
||||||
extern SDL_Window *SDLwindow;
|
extern SDL_Window *SDLwindow;
|
||||||
extern char SDLgameTitle[];
|
extern char SDLgameTitle[];
|
||||||
extern fps_limit fpsLimit;
|
extern fps_limit fpsLimit;
|
||||||
@@ -36,7 +37,9 @@ void *idleFunc = NULL;
|
|||||||
|
|
||||||
void FGAPIENTRY glutInit(int *argcp, char **argv)
|
void FGAPIENTRY glutInit(int *argcp, char **argv)
|
||||||
{
|
{
|
||||||
if (*argcp > 1 && getConfig()->crc32 == SEGA_RACE_TV)
|
void FGAPIENTRY (*_glutInit)(int *argcp, char **argv) = dlsym(RTLD_NEXT, "glutInit");
|
||||||
|
|
||||||
|
if (*argcp > 1 && gId == SEGA_RACE_TV)
|
||||||
{
|
{
|
||||||
if (isTestMode())
|
if (isTestMode())
|
||||||
{
|
{
|
||||||
@@ -45,8 +48,14 @@ void FGAPIENTRY glutInit(int *argcp, char **argv)
|
|||||||
printf("Forced to use SDL to make Test mode render fine.\n");
|
printf("Forced to use SDL to make Test mode render fine.\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
GLUTGame = true;
|
|
||||||
|
|
||||||
|
if (getConfig()->noSDL)
|
||||||
|
{
|
||||||
|
_glutInit(argcp, argv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
GLUTGame = true;
|
||||||
initSDL(argcp, argv);
|
initSDL(argcp, argv);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -102,10 +111,13 @@ void FGAPIENTRY glutSwapBuffers(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int gId = config->crc32;
|
switch (gId)
|
||||||
if (gId == OUTRUN_2_SP_SDX || gId == OUTRUN_2_SP_SDX_REVA || gId == OUTRUN_2_SP_SDX_REVA_TEST || gId == OUTRUN_2_SP_SDX_REVA_TEST2 ||
|
|
||||||
gId == OUTRUN_2_SP_SDX_TEST)
|
|
||||||
{
|
{
|
||||||
|
case OUTRUN_2_SP_SDX:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
pollEvents();
|
pollEvents();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -174,11 +186,15 @@ void FGAPIENTRY glutSetCursor(int glutCursor)
|
|||||||
if (getConfig()->noSDL)
|
if (getConfig()->noSDL)
|
||||||
{
|
{
|
||||||
void FGAPIENTRY (*_glutSetCursor)(int glutCursor) = dlsym(RTLD_NEXT, "glutSetCursor");
|
void FGAPIENTRY (*_glutSetCursor)(int glutCursor) = dlsym(RTLD_NEXT, "glutSetCursor");
|
||||||
_glutSetCursor(glutCursor);
|
if(strcmp(getConfig()->customCursor, "") == 0)
|
||||||
|
_glutSetCursor(glutCursor);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SDL_Cursor *cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
if (strcmp(getConfig()->customCursor, "") == 0)
|
||||||
SDL_SetCursor(cursor);
|
{
|
||||||
|
SDL_Cursor *cursor = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
||||||
|
SDL_SetCursor(cursor);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void FGAPIENTRY glutDisplayFunc(void (*callback)(void))
|
void FGAPIENTRY glutDisplayFunc(void (*callback)(void))
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
#ifndef GLUTHOOKS_H
|
|
||||||
#define GLUTHOOKS_H
|
|
||||||
|
|
||||||
#endif
|
|
||||||
+56
-27
@@ -1,4 +1,3 @@
|
|||||||
#include <complex.h>
|
|
||||||
#define GL_GLEXT_PROTOTYPES
|
#define GL_GLEXT_PROTOTYPES
|
||||||
#ifndef __i386__
|
#ifndef __i386__
|
||||||
#define __i386__
|
#define __i386__
|
||||||
@@ -20,6 +19,7 @@
|
|||||||
#include <dlfcn.h>
|
#include <dlfcn.h>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
#include "fps_limiter.h"
|
#include "fps_limiter.h"
|
||||||
#include "sdlcalls.h"
|
#include "sdlcalls.h"
|
||||||
@@ -28,11 +28,12 @@
|
|||||||
#include "border.h"
|
#include "border.h"
|
||||||
|
|
||||||
bool sdlGame = false;
|
bool sdlGame = false;
|
||||||
|
extern uint32_t gId;
|
||||||
extern SDL_Window *SDLwindow;
|
extern SDL_Window *SDLwindow;
|
||||||
extern SDL_GLContext SDLcontext;
|
extern SDL_GLContext SDLcontext;
|
||||||
extern char SDLgameTitle[];
|
extern char SDLgameTitle[];
|
||||||
extern fps_limit fpsLimit;
|
extern fps_limit fpsLimit;
|
||||||
extern Window win;
|
extern Window window;
|
||||||
|
|
||||||
void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
|
void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
|
||||||
{
|
{
|
||||||
@@ -43,14 +44,22 @@ void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
|
|||||||
if (config->borderEnabled)
|
if (config->borderEnabled)
|
||||||
drawGameBorder(config->width, config->height, config->whiteBorderPercentage, config->blackBorderPercentage);
|
drawGameBorder(config->width, config->height, config->whiteBorderPercentage, config->blackBorderPercentage);
|
||||||
|
|
||||||
int gId = getConfig()->crc32;
|
if (getConfig()->noSDL)
|
||||||
if (getConfig()->noSDL && (gId == OUTRUN_2_SP_SDX || gId == OUTRUN_2_SP_SDX_REVA || gId == OUTRUN_2_SP_SDX_REVA_TEST ||
|
|
||||||
gId == OUTRUN_2_SP_SDX_REVA_TEST2 || gId == OUTRUN_2_SP_SDX_TEST))
|
|
||||||
{
|
{
|
||||||
XEvent event;
|
switch (gId)
|
||||||
while (XPending(dpy))
|
|
||||||
{
|
{
|
||||||
XNextEvent(dpy, &event);
|
case OUTRUN_2_SP_SDX:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
|
{
|
||||||
|
XEvent event;
|
||||||
|
while (XPending(dpy))
|
||||||
|
{
|
||||||
|
XNextEvent(dpy, &event);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -76,7 +85,7 @@ void glXSwapBuffers(Display *dpy, GLXDrawable drawable)
|
|||||||
|
|
||||||
if (getConfig()->noSDL)
|
if (getConfig()->noSDL)
|
||||||
{
|
{
|
||||||
XStoreName(dpy, win, "");
|
XStoreName(dpy, window, "");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
char windowTitle[512];
|
char windowTitle[512];
|
||||||
@@ -229,28 +238,37 @@ GLXFBConfig *glXChooseFBConfig(Display *dpy, int screen, const int *attrib_list,
|
|||||||
GLXFBConfig *(*_glXChooseFBConfig)(Display *dpy, int screen, const int *attrib_list, int *nelements) =
|
GLXFBConfig *(*_glXChooseFBConfig)(Display *dpy, int screen, const int *attrib_list, int *nelements) =
|
||||||
dlsym(RTLD_NEXT, "glXChooseFBConfig");
|
dlsym(RTLD_NEXT, "glXChooseFBConfig");
|
||||||
|
|
||||||
int gId = getConfig()->crc32;
|
|
||||||
char *__GLX_VENDOR_LIBRARY_NAME = getenv("__GLX_VENDOR_LIBRARY_NAME");
|
char *__GLX_VENDOR_LIBRARY_NAME = getenv("__GLX_VENDOR_LIBRARY_NAME");
|
||||||
char *__NV_PRIME_RENDER_OFFLOAD = getenv("__NV_PRIME_RENDER_OFFLOAD");
|
char *__NV_PRIME_RENDER_OFFLOAD = getenv("__NV_PRIME_RENDER_OFFLOAD");
|
||||||
if (__GLX_VENDOR_LIBRARY_NAME == NULL)
|
if (__GLX_VENDOR_LIBRARY_NAME == NULL)
|
||||||
__GLX_VENDOR_LIBRARY_NAME = " ";
|
__GLX_VENDOR_LIBRARY_NAME = " ";
|
||||||
if (__NV_PRIME_RENDER_OFFLOAD == NULL)
|
if (__NV_PRIME_RENDER_OFFLOAD == NULL)
|
||||||
__NV_PRIME_RENDER_OFFLOAD = " ";
|
__NV_PRIME_RENDER_OFFLOAD = " ";
|
||||||
if ((strcmp(__GLX_VENDOR_LIBRARY_NAME, "nvidia") == 0) && (strcmp(__NV_PRIME_RENDER_OFFLOAD, "1") == 0) &&
|
|
||||||
((gId == THE_HOUSE_OF_THE_DEAD_4_REVA) || (gId == THE_HOUSE_OF_THE_DEAD_4_REVB) ||
|
switch (gId)
|
||||||
(gId == THE_HOUSE_OF_THE_DEAD_4_REVC) || (gId == THE_HOUSE_OF_THE_DEAD_4_SPECIAL) ||
|
|
||||||
(gId == THE_HOUSE_OF_THE_DEAD_4_SPECIAL_REVB) || (gId == THE_HOUSE_OF_THE_DEAD_EX) || (gId == TOO_SPICY)))
|
|
||||||
{
|
{
|
||||||
for (int i = 0; attrib_list[i] != None; i += 2)
|
case THE_HOUSE_OF_THE_DEAD_4_REVA:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_REVB:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_REVC:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_SPECIAL:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_4_SPECIAL_REVB:
|
||||||
|
case THE_HOUSE_OF_THE_DEAD_EX:
|
||||||
|
case TOO_SPICY:
|
||||||
|
{
|
||||||
|
if (strcmp(__GLX_VENDOR_LIBRARY_NAME, "nvidia") == 0 && strcmp(__NV_PRIME_RENDER_OFFLOAD, "1") == 0)
|
||||||
{
|
{
|
||||||
if (attrib_list[i] == GLX_DOUBLEBUFFER)
|
for (int i = 0; attrib_list[i] != None; i += 2)
|
||||||
{
|
{
|
||||||
int *ptr = (int *)&attrib_list[i + 1];
|
if (attrib_list[i] == GLX_DOUBLEBUFFER)
|
||||||
patchMemory((intptr_t)ptr, "01");
|
{
|
||||||
setVariable((intptr_t)ptr, GLX_DONT_CARE);
|
int *ptr = (int *)&attrib_list[i + 1];
|
||||||
|
patchMemory((intptr_t)ptr, "01");
|
||||||
|
setVariable((intptr_t)ptr, GLX_DONT_CARE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return _glXChooseFBConfig(dpy, screen, attrib_list, nelements);
|
return _glXChooseFBConfig(dpy, screen, attrib_list, nelements);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,20 +324,31 @@ GLXFBConfigSGIX *glXChooseFBConfigSGIX(Display *dpy, int screen, int *attrib_lis
|
|||||||
__GLX_VENDOR_LIBRARY_NAME = " ";
|
__GLX_VENDOR_LIBRARY_NAME = " ";
|
||||||
if (__NV_PRIME_RENDER_OFFLOAD == NULL)
|
if (__NV_PRIME_RENDER_OFFLOAD == NULL)
|
||||||
__NV_PRIME_RENDER_OFFLOAD = " ";
|
__NV_PRIME_RENDER_OFFLOAD = " ";
|
||||||
if ((strcmp(__GLX_VENDOR_LIBRARY_NAME, "nvidia") == 0) && (strcmp(__NV_PRIME_RENDER_OFFLOAD, "1") == 0) &&
|
|
||||||
((gId == INITIALD_4_REVA) || (gId == INITIALD_4_REVB) || (gId == INITIALD_4_REVC) || (gId == INITIALD_4_REVD) ||
|
switch (gId)
|
||||||
(gId == INITIALD_4_REVG) || (gId == INITIALD_4_EXP_REVB) || (gId == INITIALD_4_EXP_REVC) ||
|
|
||||||
gId == INITIALD_4_EXP_REVD))
|
|
||||||
{
|
{
|
||||||
for (int i = 0; attrib_list[i] != None; i += 2)
|
case INITIALD_4_REVA:
|
||||||
|
case INITIALD_4_REVB:
|
||||||
|
case INITIALD_4_REVC:
|
||||||
|
case INITIALD_4_REVD:
|
||||||
|
case INITIALD_4_REVG:
|
||||||
|
case INITIALD_4_EXP_REVB:
|
||||||
|
case INITIALD_4_EXP_REVC:
|
||||||
|
case INITIALD_4_EXP_REVD:
|
||||||
|
{
|
||||||
|
if (strcmp(__GLX_VENDOR_LIBRARY_NAME, "nvidia") == 0 && strcmp(__NV_PRIME_RENDER_OFFLOAD, "1") == 0)
|
||||||
{
|
{
|
||||||
if (attrib_list[i] == GLX_DOUBLEBUFFER)
|
for (int i = 0; attrib_list[i] != None; i += 2)
|
||||||
{
|
{
|
||||||
int *ptr = (int *)&attrib_list[i + 1];
|
if (attrib_list[i] == GLX_DOUBLEBUFFER)
|
||||||
patchMemory((intptr_t)ptr, "01");
|
{
|
||||||
|
int *ptr = (int *)&attrib_list[i + 1];
|
||||||
|
patchMemory((intptr_t)ptr, "01");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return glXChooseFBConfig(dpy, screen, attrib_list, nelements);
|
return glXChooseFBConfig(dpy, screen, attrib_list, nelements);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+564
-118
File diff suppressed because it is too large
Load Diff
@@ -1,4 +0,0 @@
|
|||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
uint32_t get_crc32(const char *s, size_t n);
|
|
||||||
+154
-24
@@ -1,11 +1,15 @@
|
|||||||
#ifndef __i386__
|
#ifndef __i386__
|
||||||
#define __i386__
|
#define __i386__
|
||||||
|
#include "customcursor.h"
|
||||||
#endif
|
#endif
|
||||||
#undef __x86_64__
|
#undef __x86_64__
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
|
|
||||||
#include "jvs.h"
|
#include "jvs.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "customcursor.h"
|
||||||
|
#include "patch.h"
|
||||||
|
#include "touchscreen.h"
|
||||||
|
|
||||||
#include <GL/freeglut.h>
|
#include <GL/freeglut.h>
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
@@ -20,6 +24,12 @@
|
|||||||
GameType gameType = SHOOTING;
|
GameType gameType = SHOOTING;
|
||||||
int jvsAnalogueInBits = 10;
|
int jvsAnalogueInBits = 10;
|
||||||
extern int phX, phY, phW, phH;
|
extern int phX, phY, phW, phH;
|
||||||
|
extern int phX2, phY2, phW2, phH2;
|
||||||
|
int phIsDragging = 0;
|
||||||
|
|
||||||
|
extern void *customCursor;
|
||||||
|
extern void *phTouchCursor;
|
||||||
|
extern bool phShowCursorInGame;
|
||||||
|
|
||||||
int initInput()
|
int initInput()
|
||||||
{
|
{
|
||||||
@@ -35,6 +45,105 @@ int initInput()
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void phTouchScreenCursor(int mX, int mY, int *motX, int *motY)
|
||||||
|
{
|
||||||
|
if (getConfig()->emulateTouchscreen)
|
||||||
|
{
|
||||||
|
switch (getConfig()->phMode)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
if ((mX >= phX2 && mX <= (phX2 + phW2) && mY >= phY2 && mY <= (phY2 + phH2)) && getConfig()->hideCursor == 0)
|
||||||
|
{
|
||||||
|
setCursor(phTouchCursor);
|
||||||
|
showPhCursor();
|
||||||
|
}
|
||||||
|
else if (getConfig()->hideCursor == 1 || phShowCursorInGame == false)
|
||||||
|
{
|
||||||
|
hideCursor();
|
||||||
|
}
|
||||||
|
else if (phShowCursorInGame && getConfig()->hideCursor == 0)
|
||||||
|
{
|
||||||
|
setCursor(customCursor);
|
||||||
|
showCursor();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if ((mX >= phX2 && mX <= (phX2 + phW2) && mY >= (phY2 + phH) && mY <= (phY2 + (phH2 + phH))) && getConfig()->hideCursor == 0)
|
||||||
|
{
|
||||||
|
setCursor(phTouchCursor);
|
||||||
|
showPhCursor();
|
||||||
|
}
|
||||||
|
else if (getConfig()->hideCursor == 1 || phShowCursorInGame == false)
|
||||||
|
{
|
||||||
|
hideCursor();
|
||||||
|
}
|
||||||
|
else if (phShowCursorInGame && getConfig()->hideCursor == 0)
|
||||||
|
{
|
||||||
|
setCursor(customCursor);
|
||||||
|
showCursor();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mX < phX)
|
||||||
|
*motX = phX;
|
||||||
|
if (mX > (phW + phX))
|
||||||
|
*motX = (phW + phX) - 1;
|
||||||
|
if (mY > phH + phY)
|
||||||
|
*motY = (phH + phY) - 1;
|
||||||
|
if (mY < phY)
|
||||||
|
*motY = phY;
|
||||||
|
}
|
||||||
|
|
||||||
|
void phTouchClick(int mX, int mY, int type)
|
||||||
|
{
|
||||||
|
int x, y;
|
||||||
|
bool insideTouchScreen = false;
|
||||||
|
switch (getConfig()->phMode)
|
||||||
|
{
|
||||||
|
case 0:
|
||||||
|
case 2:
|
||||||
|
case 3:
|
||||||
|
if (mX >= phX2 && mX <= (phX2 + phW2) && mY >= phY2 && mY <= (phY2 + phH2))
|
||||||
|
{
|
||||||
|
x = mX - phW;
|
||||||
|
y = mY - phY2;
|
||||||
|
insideTouchScreen = true;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
if (mX >= phX2 && mX <= (phX2 + phW2) && mY >= (phY2 + phH) && mY <= (phY2 + (phH2 + phH)))
|
||||||
|
{
|
||||||
|
x = mX - phX2;
|
||||||
|
y = mY - phH;
|
||||||
|
insideTouchScreen = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (insideTouchScreen)
|
||||||
|
{
|
||||||
|
if (type == ButtonPress)
|
||||||
|
phCoordinates(x, y, phW2, phH2, ButtonPress);
|
||||||
|
else if (type == SDL_MOUSEBUTTONDOWN)
|
||||||
|
phCoordinates(x, y, phW2, phH2, SDL_MOUSEBUTTONDOWN);
|
||||||
|
else if (type == ButtonRelease)
|
||||||
|
phCoordinates(x, y, phW2, phH2, ButtonRelease);
|
||||||
|
else if (type == SDL_MOUSEBUTTONUP)
|
||||||
|
phCoordinates(x, y, phW2, phH2, SDL_MOUSEBUTTONUP);
|
||||||
|
else if (type == MotionNotify)
|
||||||
|
phCoordinates(x, y, phW2, phH2, MotionNotify);
|
||||||
|
else if (type == SDL_MOUSEMOTION)
|
||||||
|
phCoordinates(x, y, phW2, phH2, SDL_MOUSEMOTION);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (getConfig()->noSDL)
|
||||||
|
setSwitch(PLAYER_1, BUTTON_1, type == ButtonPress);
|
||||||
|
else
|
||||||
|
setSwitch(PLAYER_1, BUTTON_1, type == SDL_MOUSEBUTTONDOWN);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Button mapping used for driving games
|
* Button mapping used for driving games
|
||||||
*/
|
*/
|
||||||
@@ -281,16 +390,15 @@ int XNextEventShooting(Display *display, XEvent *event_return, int returnValue)
|
|||||||
{
|
{
|
||||||
int mX = event_return->xmotion.x;
|
int mX = event_return->xmotion.x;
|
||||||
int mY = event_return->xmotion.y;
|
int mY = event_return->xmotion.y;
|
||||||
if (mX < phX)
|
|
||||||
mX = phX;
|
if (phIsDragging)
|
||||||
if (mX > (phW + phX))
|
phTouchClick(mX, mY, event_return->type);
|
||||||
mX = (phW + phX) - 1;
|
|
||||||
if (mY > phH + phY)
|
int motX = mX, motY = mY;
|
||||||
mY = (phH + phY) - 1;
|
phTouchScreenCursor(mX, mY, &motX, &motY);
|
||||||
if (mY < phY)
|
|
||||||
mY = phY;
|
setAnalogue(ANALOGUE_1, ((double)(motX - phX) / (double)phW) * pow(2, jvsAnalogueInBits));
|
||||||
setAnalogue(ANALOGUE_1, ((double)(mX - phX) / (double)phW) * pow(2, jvsAnalogueInBits));
|
setAnalogue(ANALOGUE_2, ((double)(motY - phY) / (double)phH) * pow(2, jvsAnalogueInBits));
|
||||||
setAnalogue(ANALOGUE_2, ((double)(mY - phY) / (double)phH) * pow(2, jvsAnalogueInBits));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -335,7 +443,17 @@ int XNextEventShooting(Display *display, XEvent *event_return, int returnValue)
|
|||||||
{
|
{
|
||||||
if (event_return->xbutton.button == 1) // Trigger
|
if (event_return->xbutton.button == 1) // Trigger
|
||||||
{
|
{
|
||||||
setSwitch(PLAYER_1, BUTTON_1, event_return->type == ButtonPress);
|
if (getConfig()->crc32 == PRIMEVAL_HUNT && getConfig()->emulateTouchscreen)
|
||||||
|
{
|
||||||
|
int mX = event_return->xmotion.x;
|
||||||
|
int mY = event_return->xmotion.y;
|
||||||
|
phTouchClick(mX, mY, event_return->type);
|
||||||
|
phIsDragging = (event_return->type == ButtonPress ? 1 : 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setSwitch(PLAYER_1, BUTTON_1, event_return->type == ButtonPress);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (event_return->xbutton.button == 3) // Reload
|
else if (event_return->xbutton.button == 3) // Reload
|
||||||
{
|
{
|
||||||
@@ -503,10 +621,13 @@ void sdlEventShooting(SDL_Event *event)
|
|||||||
setSwitch(PLAYER_2, BUTTON_1, event->type == SDL_KEYDOWN);
|
setSwitch(PLAYER_2, BUTTON_1, event->type == SDL_KEYDOWN);
|
||||||
|
|
||||||
else if (event->key.keysym.sym == SDLK_x)
|
else if (event->key.keysym.sym == SDLK_x)
|
||||||
setSwitch(PLAYER_2, BUTTON_1, event->type == SDL_KEYDOWN);
|
setSwitch(PLAYER_2, BUTTON_2, event->type == SDL_KEYDOWN);
|
||||||
|
|
||||||
else if (event->key.keysym.sym == SDLK_c)
|
else if (event->key.keysym.sym == SDLK_c)
|
||||||
setSwitch(PLAYER_2, BUTTON_1, event->type == SDL_KEYDOWN);
|
setSwitch(PLAYER_2, BUTTON_3, event->type == SDL_KEYDOWN);
|
||||||
|
|
||||||
|
else if (event->key.keysym.sym == SDLK_v)
|
||||||
|
setSwitch(PLAYER_2, BUTTON_4, event->type == SDL_KEYDOWN);
|
||||||
|
|
||||||
else if (event->key.keysym.sym == SDLK_u)
|
else if (event->key.keysym.sym == SDLK_u)
|
||||||
setSwitch(PLAYER_2, BUTTON_UP, event->type == SDL_KEYDOWN);
|
setSwitch(PLAYER_2, BUTTON_UP, event->type == SDL_KEYDOWN);
|
||||||
@@ -534,16 +655,15 @@ void sdlEventShooting(SDL_Event *event)
|
|||||||
{
|
{
|
||||||
int mX = event->motion.x;
|
int mX = event->motion.x;
|
||||||
int mY = event->motion.y;
|
int mY = event->motion.y;
|
||||||
if (mX < phX)
|
|
||||||
mX = phX;
|
if (phIsDragging)
|
||||||
if (mX > (phW + phX))
|
phTouchClick(mX, mY, event->type);
|
||||||
mX = (phW + phX) - 1;
|
|
||||||
if (mY > phH + phY)
|
int motX = mX, motY = mY;
|
||||||
mY = (phH + phY) - 1;
|
phTouchScreenCursor(mX, mY, &motX, &motY);
|
||||||
if (mY < phY)
|
|
||||||
mY = phY;
|
setAnalogue(ANALOGUE_1, ((double)(motX - phX) / (double)phW) * pow(2, jvsAnalogueInBits));
|
||||||
setAnalogue(ANALOGUE_1, ((double)(mX - phX) / (double)phW) * pow(2, jvsAnalogueInBits));
|
setAnalogue(ANALOGUE_2, ((double)(motY - phY) / (double)phH) * pow(2, jvsAnalogueInBits));
|
||||||
setAnalogue(ANALOGUE_2, ((double)(mY - phY) / (double)phH) * pow(2, jvsAnalogueInBits));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -587,7 +707,17 @@ void sdlEventShooting(SDL_Event *event)
|
|||||||
{
|
{
|
||||||
if (event->button.button == SDL_BUTTON_LEFT) // Trigger
|
if (event->button.button == SDL_BUTTON_LEFT) // Trigger
|
||||||
{
|
{
|
||||||
setSwitch(PLAYER_1, BUTTON_1, event->type == SDL_MOUSEBUTTONDOWN);
|
if (getConfig()->crc32 == PRIMEVAL_HUNT && getConfig()->emulateTouchscreen)
|
||||||
|
{
|
||||||
|
int mX = event->motion.x;
|
||||||
|
int mY = event->motion.y;
|
||||||
|
phTouchClick(mX, mY, event->type);
|
||||||
|
phIsDragging = (event->type == SDL_MOUSEBUTTONDOWN ? 1 : 0);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setSwitch(PLAYER_1, BUTTON_1, event->type == SDL_MOUSEBUTTONDOWN);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (event->button.button == SDL_BUTTON_RIGHT) // Reload
|
else if (event->button.button == SDL_BUTTON_RIGHT) // Reload
|
||||||
{
|
{
|
||||||
|
|||||||
+1
-4
@@ -1,5 +1,4 @@
|
|||||||
#ifndef JVS_H_
|
#pragma once
|
||||||
#define JVS_H_
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
@@ -242,5 +241,3 @@ JVSIO* getJVSIO();
|
|||||||
int setSwitch(JVSPlayer player, JVSInput switchNumber, int value);
|
int setSwitch(JVSPlayer player, JVSInput switchNumber, int value);
|
||||||
int incrementCoin(JVSPlayer player, int amount);
|
int incrementCoin(JVSPlayer player, int amount);
|
||||||
int setAnalogue(JVSInput channel, int value);
|
int setAnalogue(JVSInput channel, int value);
|
||||||
|
|
||||||
#endif // JVS_H_
|
|
||||||
|
|||||||
+498
-187
@@ -1,10 +1,14 @@
|
|||||||
#include <dirent.h>
|
#include <stdbool.h>
|
||||||
#include <limits.h>
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdint.h>
|
#include <unistd.h>
|
||||||
|
#include <libgen.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "evdevinput.h"
|
#include "evdevinput.h"
|
||||||
#include "version.h"
|
#include "version.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
@@ -14,119 +18,353 @@
|
|||||||
#define PRELOAD_FILE_NAME "lindbergh.so"
|
#define PRELOAD_FILE_NAME "lindbergh.so"
|
||||||
#define TEAM "bobbydilley, retrofan, dkeruza-neo, doozer, francesco, rolel, caviar-x"
|
#define TEAM "bobbydilley, retrofan, dkeruza-neo, doozer, francesco, rolel, caviar-x"
|
||||||
#define LINDBERGH_CONFIG_PATH "LINDBERGH_CONFIG_PATH"
|
#define LINDBERGH_CONFIG_PATH "LINDBERGH_CONFIG_PATH"
|
||||||
|
#define LINDBERGH_LOADER_CURRENT_DIR "LINDBERGH_LOADER_CURRENT_DIR"
|
||||||
|
|
||||||
uint32_t elf_crc = 0;
|
uint32_t elf_crc = 0;
|
||||||
|
|
||||||
// List of all lindbergh executables known, not including the test executables
|
// List of all lindbergh executables known, not including the test executables
|
||||||
char *games[] = {"main.exe",
|
char *games[] = {"a.elf", "abc", "apacheM.elf", "chopperM.elf", "drive.elf", "dsr",
|
||||||
"ramboM.elf",
|
"gsevo", "hod4M.elf", "hodexRI.elf", "hummer_Master.elf", "id4.elf", "id5.elf",
|
||||||
"vt3_Lindbergh",
|
"Jennifer", "lgj_final", "lgjsp_app", "main.exe", "mj4", "ramboM.elf",
|
||||||
"hummer_Master.elf",
|
"vf5", "vsg", "vt3", "vt3_Lindbergh", "END"};
|
||||||
"drive.elf",
|
|
||||||
"chopperM.elf",
|
|
||||||
"vsg",
|
|
||||||
"Jennifer",
|
|
||||||
"dsr",
|
|
||||||
"abc",
|
|
||||||
"hod4M.elf",
|
|
||||||
"lgj_final",
|
|
||||||
"vt3",
|
|
||||||
"id4.elf",
|
|
||||||
"id5.elf",
|
|
||||||
"lgjsp_app",
|
|
||||||
"gsevo",
|
|
||||||
"vf5",
|
|
||||||
"apacheM.elf",
|
|
||||||
"hodexRI.elf",
|
|
||||||
"a.elf",
|
|
||||||
"END"};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests if the game uses a seperate elf for test mode
|
* An array containin clean games elf's CRC32
|
||||||
* and updates the command line to this elf.
|
|
||||||
*
|
|
||||||
* @param name The command path to run
|
|
||||||
*/
|
*/
|
||||||
void testModePath(char *name)
|
uint32_t cleanElfCRC32[] = {
|
||||||
|
0x51C4D2F6, // DVP-0003A | hod4M.elf
|
||||||
|
0x1348BCA8, // DVP-0003A | hod4testM.elf
|
||||||
|
0x0AAE384E, // DVP-0003B | hod4M.elf
|
||||||
|
0x352AA797, // DVP-0003B | hod4testM.elf
|
||||||
|
0x42EED61A, // DVP-0003C | hod4M.elf
|
||||||
|
0x6DA6E511, // DVP-0003C | hod4testM.elf
|
||||||
|
0x0E4BF4B1, // DVP-0005 | vt3_Lindbergh
|
||||||
|
0x9E48AB5B, // DVP-0005 | vt3_testmode
|
||||||
|
0xE4C64D01, // DVP-0005A | vt3_Lindbergh
|
||||||
|
0x9C0E77E5, // DVP-0005A | vt3_testmode
|
||||||
|
0xA4BDB9E2, // DVP-0005B | vt3_Lindbergh
|
||||||
|
0x74E25472, // DVP-0005B | vt3_testmode
|
||||||
|
0x987AE3FF, // DVP-0005C | vt3_Lindbergh
|
||||||
|
0x1E4271A4, // DVP-0005C | vt3_testmode
|
||||||
|
0xD409B70C, // DVP-0008 | vf5
|
||||||
|
0x08EBC0DB, // DVP-0008A | vf5
|
||||||
|
0xA47FBA2D, // DVP-0008B | vf5
|
||||||
|
0x8CA46167, // DVP-0008C | vf5
|
||||||
|
0x75946796, // DVP-0008E | vf5
|
||||||
|
0x2C8F5D57, // DVP-0009 | abc
|
||||||
|
0x13D90755, // DVP-0009A | abc
|
||||||
|
0x633AD6FB, // DVP-0009B | abc
|
||||||
|
0xD39825A8, // DVP-0010 | hod4M.elf
|
||||||
|
0x0745CF0A, // DVP-0010 | hod4testM.elf
|
||||||
|
0x13E59583, // DVP-0010B | hod4M.elf
|
||||||
|
0x302FEB00, // DVP-0010B | hod4testM.elf
|
||||||
|
0x04E08C99, // DVP-0011 | lgj_final
|
||||||
|
0x0C3D3CC3, // DVP-0011A | lgj_final
|
||||||
|
0xD9660B2E, // DVP-0015 | JenTest
|
||||||
|
0x821C3404, // DVP-0015 | Jennifer
|
||||||
|
0x13AF8581, // DVP-0015A | JenTest
|
||||||
|
0xB2CE9B23, // DVP-0015A | Jennifer
|
||||||
|
0xCC32DEAE, // DVP-0018 | abc
|
||||||
|
0x17114BC1, // DVP-0018A | abc
|
||||||
|
0x22905D60, // DVP-0019A | id4.elf
|
||||||
|
0x43582D48, // DVP-0019B | id4.elf
|
||||||
|
0x2D2A18C1, // DVP-0019C | id4.elf
|
||||||
|
0x9BFD0D98, // DVP-0019D | id4.elf
|
||||||
|
0x9CF9BBCC, // DVP-0019G | id4.elf
|
||||||
|
0xFA0F6AB0, // DVP-0027A | apacheM.elf
|
||||||
|
0x5A7F315E, // DVP-0027A | apachetestM.elf
|
||||||
|
0x9D414D18, // DVP-0029A | vsg
|
||||||
|
0xC345E213, // DVP-0030B | id4.elf
|
||||||
|
0x98E6A516, // DVP-0030C | id4.elf
|
||||||
|
0xF67365C9, // DVP-0030D | id4.elf
|
||||||
|
0x8BDD31BA, // DVP-0031 | abc
|
||||||
|
0x3DF37873, // DVP-0031A | abc
|
||||||
|
0xDD8BB792, // DVP-0036A | lgjsp_app
|
||||||
|
0xB0A96E34, // DVP-0043 | vf5
|
||||||
|
0xF99E5635, // DVP-0044 | drive.elf
|
||||||
|
0x4143F6B4, // DVP-0048A | main.exe
|
||||||
|
0x65489691, // DVP-0049 | mj4
|
||||||
|
0x653BC83B, // DVP-0057 | a.elf
|
||||||
|
0x04D88552, // DVP-0057B | a.elf
|
||||||
|
0x089D6051, // DVP-0060 | dsr
|
||||||
|
0x317F3B90, // DVP-0063 | hodexRI.elf
|
||||||
|
0x3A5EEC69, // DVP-0063 | hodextestR.elf
|
||||||
|
0x81E02850, // DVP-0069 | ramboM.elf
|
||||||
|
0xE4F202BB, // DVP-0070A | id5.elf
|
||||||
|
0x2E6732A3, // DVP-0070F | id5.elf
|
||||||
|
0xF99A3CDB, // DVP-0075 | id5.elf
|
||||||
|
0x05647A8E, // DVP-0079 | hummer_Master.elf
|
||||||
|
0x0AD7CF0F, // DVP-0081 | mj4
|
||||||
|
0x4442EA15, // DVP-0083 | hummer_Master.elf
|
||||||
|
0x8DF6BBF9, // DVP-0084 | id5.elf
|
||||||
|
0x2AF8004E, // DVP-0084A | id5.elf
|
||||||
|
0xB95528F4, // DVP-5004 | vf5
|
||||||
|
0x012E4898, // DVP-5004D | vf5
|
||||||
|
0x74465F9F, // DVP-5004G | vf5
|
||||||
|
0x75B48E22, // DVP-5007 | chopperM.elf
|
||||||
|
0xFCB9D941, // DVP-5019A | vf5
|
||||||
|
0xAB70901C, // DVP-5020 | vf5
|
||||||
|
0x6BAA510D, // DVP-5020 | vf5 | Ver 6.000
|
||||||
|
};
|
||||||
|
|
||||||
|
int cleanElfCRC32Count = sizeof(cleanElfCRC32) / sizeof(uint32_t);
|
||||||
|
|
||||||
|
uint32_t calcCrc32(uint32_t crc, uint8_t data)
|
||||||
{
|
{
|
||||||
// Check if a different testmode elf is used
|
crc ^= data;
|
||||||
if (strcmp(name, "./hod4M.elf") == 0)
|
for (int i = 0; i < 8; i++)
|
||||||
{
|
{
|
||||||
strcpy(name, "./hod4testM.elf");
|
if (crc & 1)
|
||||||
return;
|
{
|
||||||
|
crc = (crc >> 1) ^ 0xEDB88320;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
crc = (crc >> 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
return crc;
|
||||||
if (strcmp(name, "./hodexRI.elf") == 0)
|
|
||||||
{
|
|
||||||
strcpy(name, "./hodextestR.elf");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(name, "./Jennifer") == 0)
|
|
||||||
{
|
|
||||||
strcpy(name, "../JenTest/JenTest");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(name, "./apacheM.elf") == 0)
|
|
||||||
{
|
|
||||||
strcpy(name, "./apacheTestM.elf");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(name, "./vt3_Lindbergh") == 0)
|
|
||||||
{
|
|
||||||
strcpy(name, "./vt3_testmode");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Otherwise add the standard -t to the end
|
|
||||||
strcat(name, " -t");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
int calculateCRC32inChunks(const char *filename, uint32_t *crc)
|
||||||
* Makes sure the environment variables are set correctly
|
|
||||||
* to run the game.
|
|
||||||
*/
|
|
||||||
void setEnvironmentVariables()
|
|
||||||
{
|
{
|
||||||
// Ensure the library path is set correctly
|
FILE *file = fopen(filename, "rb");
|
||||||
char libraryPath[128] = {0};
|
if (file == NULL)
|
||||||
|
|
||||||
const char *currentLibraryPath = getenv(LD_LIBRARY_PATH);
|
|
||||||
if (currentLibraryPath != NULL)
|
|
||||||
{
|
{
|
||||||
strcat(libraryPath, currentLibraryPath);
|
log_error("Could not open file to calculate the CRC32.");
|
||||||
strcat(libraryPath, ":");
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
strcat(libraryPath, ".:lib:../lib");
|
*crc = 0xFFFFFFFF;
|
||||||
|
uint8_t buffer[4096];
|
||||||
|
size_t bytesRead;
|
||||||
|
|
||||||
setenv(LD_LIBRARY_PATH, libraryPath, 1);
|
while ((bytesRead = fread(buffer, 1, sizeof(buffer), file)) > 0)
|
||||||
|
{
|
||||||
|
for (size_t i = 0; i < bytesRead; i++)
|
||||||
|
{
|
||||||
|
*crc = calcCrc32(*crc, buffer[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fclose(file);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// Ensure the preload path is set correctly
|
int lookupCrcTable(uint32_t crc)
|
||||||
setenv(LD_PRELOAD, PRELOAD_FILE_NAME, 1);
|
{
|
||||||
|
for (int x = 0; x < cleanElfCRC32Count; x++)
|
||||||
|
{
|
||||||
|
if (cleanElfCRC32[x] == crc)
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int fileExists(const char *path)
|
||||||
|
{
|
||||||
|
struct stat buffer;
|
||||||
|
return stat(path, &buffer) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int dirExists(const char *path)
|
||||||
|
{
|
||||||
|
struct stat buffer;
|
||||||
|
return stat(path, &buffer) == 0 && S_ISDIR(buffer.st_mode);
|
||||||
|
}
|
||||||
|
|
||||||
|
void isCleanElf(char *command)
|
||||||
|
{
|
||||||
|
char *lastSpace = strrchr(command, ' ');
|
||||||
|
size_t length;
|
||||||
|
if (lastSpace != NULL && strcmp(lastSpace, " -t") == 0)
|
||||||
|
length = (size_t)(lastSpace - command);
|
||||||
|
else
|
||||||
|
length = strlen(command);
|
||||||
|
|
||||||
|
char elfName[256];
|
||||||
|
strncpy(elfName, command, length);
|
||||||
|
elfName[length] = '\0';
|
||||||
|
|
||||||
|
if (dirExists(elfName))
|
||||||
|
{
|
||||||
|
log_error("There is a folder named \'%s\' in the current directory instead of a game's ELF.", elfName + 2);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t crc;
|
||||||
|
if (calculateCRC32inChunks(elfName, &crc) != 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
crc = crc ^ 0xFFFFFFFF;
|
||||||
|
|
||||||
|
if (!lookupCrcTable(crc))
|
||||||
|
{
|
||||||
|
printf("\033[1;31m");
|
||||||
|
printf("Warning: The ELF you are running is not Clean and might cause unwanted behavior.\n");
|
||||||
|
printf(" Make sure you ELF and game dump are clean before reporting issues.\n");
|
||||||
|
printf(" If you are sure the ELF is clean, please report it to us.\n");
|
||||||
|
printf("\033[0m");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void extractPathFromProg(const char *input, char *out_path, char *out_prog)
|
||||||
|
{
|
||||||
|
char tmp1[MAX_PATH_LENGTH], tmp2[MAX_PATH_LENGTH];
|
||||||
|
strncpy(tmp1, input, MAX_PATH_LENGTH);
|
||||||
|
strncpy(tmp2, input, MAX_PATH_LENGTH);
|
||||||
|
strncpy(out_prog, basename(tmp1), MAX_PATH_LENGTH);
|
||||||
|
strncpy(out_path, dirname(tmp2), MAX_PATH_LENGTH);
|
||||||
|
}
|
||||||
|
|
||||||
|
void testModePath(char *program)
|
||||||
|
{
|
||||||
|
if (strcmp(program, "hod4M.elf") == 0)
|
||||||
|
strcpy(program, "hod4testM.elf");
|
||||||
|
else if (strcmp(program, "hodexRI.elf") == 0)
|
||||||
|
strcpy(program, "hodextestR.elf");
|
||||||
|
else if (strcmp(program, "apacheM.elf") == 0)
|
||||||
|
strcpy(program, "apachetestM.elf");
|
||||||
|
else if (strcmp(program, "vt3_Lindbergh") == 0)
|
||||||
|
strcpy(program, "vt3_testmode");
|
||||||
|
else if (strcmp(program, "Jennifer") == 0)
|
||||||
|
strcpy(program, "../JenTest/JenTest");
|
||||||
|
else
|
||||||
|
strcat(program, " -t");
|
||||||
|
}
|
||||||
|
|
||||||
|
char *findPreloadLibrary(const char *originalDir, const char *gameDir)
|
||||||
|
{
|
||||||
|
static char result[MAX_PATH_LENGTH];
|
||||||
|
char appImageLib[MAX_PATH_LENGTH];
|
||||||
|
snprintf(appImageLib, MAX_PATH_LENGTH, "%s/usr/lib32", getenv("APP_IMG_ROOT"));
|
||||||
|
const char *folderCandidates[] = {"/app/lib32", appImageLib, originalDir, "/usr/lib/i386-linux-gnu", "/usr/lib/i686-linux-gnu",
|
||||||
|
"/usr/lib32", "/usr/lib", NULL};
|
||||||
|
|
||||||
|
for (int i = 0; i < sizeof(folderCandidates) / sizeof(folderCandidates[0]); i++)
|
||||||
|
{
|
||||||
|
snprintf(result, MAX_PATH_LENGTH, "%s/%s", folderCandidates[i], PRELOAD_FILE_NAME);
|
||||||
|
if (fileExists(result))
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
if (fileExists(PRELOAD_FILE_NAME))
|
||||||
|
return PRELOAD_FILE_NAME;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int pathsDiffer(const char *p1, const char *p2)
|
||||||
|
{
|
||||||
|
char real1[MAX_PATH_LENGTH], real2[MAX_PATH_LENGTH];
|
||||||
|
if (!realpath(p1, real1) || !realpath(p2, real2))
|
||||||
|
return 1;
|
||||||
|
return strcmp(real1, real2) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasSpaces(const char *path)
|
||||||
|
{
|
||||||
|
if (strchr(path, ' '))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void setEnvironmentVariables(const char *ldLibPath, const char *originalDir, const char *gameDir, int zink, int nvidia,
|
||||||
|
const char *confFilePath)
|
||||||
|
{
|
||||||
|
setenv("LD_PRELOAD", ldLibPath, 1);
|
||||||
|
if (hasSpaces(ldLibPath))
|
||||||
|
{
|
||||||
|
log_error("The path \'%s\' where lindbergh.so is located cannot contain spaces.", ldLibPath);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *currentLibraryPath = getenv("LD_LIBRARY_PATH");
|
||||||
|
char newLdLibPath[MAX_PATH_LENGTH * 3] = "";
|
||||||
|
|
||||||
|
if (currentLibraryPath && strlen(currentLibraryPath) > 0)
|
||||||
|
snprintf(newLdLibPath, sizeof(newLdLibPath), "%s:", currentLibraryPath);
|
||||||
|
|
||||||
|
char *tmpLibPath = dirname(strdup(ldLibPath));
|
||||||
|
|
||||||
|
if (strcmp(tmpLibPath, ".") != 0)
|
||||||
|
{
|
||||||
|
strcat(newLdLibPath, ":");
|
||||||
|
strcat(newLdLibPath, tmpLibPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (originalDir != NULL && originalDir[0] != '\0' && pathsDiffer(originalDir, tmpLibPath) != 0)
|
||||||
|
{
|
||||||
|
strcat(newLdLibPath, ":");
|
||||||
|
strcat(newLdLibPath, originalDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameDir && gameDir[0] != '\0' && pathsDiffer(originalDir, gameDir) && pathsDiffer(tmpLibPath, gameDir))
|
||||||
|
{
|
||||||
|
strcat(newLdLibPath, ":");
|
||||||
|
strcat(newLdLibPath, gameDir);
|
||||||
|
}
|
||||||
|
|
||||||
|
strcat(newLdLibPath, ":.:lib:../lib");
|
||||||
|
|
||||||
|
if (newLdLibPath[0] == ':')
|
||||||
|
memmove(newLdLibPath, newLdLibPath + 1, strlen(newLdLibPath));
|
||||||
|
|
||||||
|
setenv("LD_LIBRARY_PATH", newLdLibPath, 1);
|
||||||
|
|
||||||
|
if (strlen(confFilePath) > 0)
|
||||||
|
{
|
||||||
|
if (hasSpaces(confFilePath))
|
||||||
|
{
|
||||||
|
log_error("The path \'%s\' for the config file cannot contain spaces.", confFilePath);
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
setenv(LINDBERGH_CONFIG_PATH, confFilePath, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zink && nvidia)
|
||||||
|
{
|
||||||
|
log_error("Cannot pass both, zink and nvidia options at the same time.");
|
||||||
|
exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (zink)
|
||||||
|
{
|
||||||
|
setenv("MESA_LOADER_DRIVER_OVERRIDE", "zink", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nvidia)
|
||||||
|
{
|
||||||
|
setenv("__GLX_VENDOR_LIBRARY_NAME", "nvidia", 1);
|
||||||
|
setenv("__NV_PRIME_RENDER_OFFLOAD", "1", 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
char libglDriPath[MAX_PATH_LENGTH];
|
||||||
|
sprintf(libglDriPath, "%s/usr/lib32/dri", getenv("APP_IMG_ROOT"));
|
||||||
|
setenv("LIBGL_DRIVERS_PATH", libglDriPath, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Prints the usage for the loader
|
|
||||||
*/
|
|
||||||
void printUsage(char *argv[])
|
void printUsage(char *argv[])
|
||||||
{
|
{
|
||||||
printf("%s [GAME_PATH] [OPTIONS]\n", argv[0]);
|
printf("%s [GAME_PATH] [OPTIONS]\n", argv[0]);
|
||||||
printf("Options:\n");
|
printf("Options:\n");
|
||||||
printf(" --test | -t Runs the test mode\n");
|
printf(" --test | -t Runs the test mode\n");
|
||||||
printf(" --segaboot | -s Runs segaboot\n");
|
printf(" --segaboot | -s Runs segaboot\n");
|
||||||
|
printf(" --zink | -z Runs with Zink\n");
|
||||||
|
printf(" --nvidia | -n Runs with nVidia GPU when is as a secondary GPU in a laptop\n");
|
||||||
printf(" --gdb Runs with GDB\n");
|
printf(" --gdb Runs with GDB\n");
|
||||||
printf(" --list-controllers Lists available controllers and inputs\n");
|
printf(" --list-controllers Lists available controllers and inputs\n");
|
||||||
printf(" --version Displays the version of the loader and team's names\n");
|
printf(" --version Displays the version of the loader and team's names\n");
|
||||||
printf(" --help Displays this usage text\n");
|
printf(" --help Displays this usage text\n");
|
||||||
printf(" --config | -c Specifies configuration path\n");
|
printf(" --config | -c Specifies configuration path\n");
|
||||||
|
printf(" --gamepath | -g Specifies game path without ELF name\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void printVersion()
|
||||||
|
{
|
||||||
|
printf("Lindbergh Loader v%d.%d\n", MAJOR_VERSION, MINOR_VERSION);
|
||||||
|
printf("Created by: %s\n", TEAM);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Lists available evdev controllers and their inputs
|
|
||||||
*/
|
|
||||||
int listControllers()
|
int listControllers()
|
||||||
{
|
{
|
||||||
Controllers controllers;
|
Controllers controllers;
|
||||||
@@ -134,7 +372,7 @@ int listControllers()
|
|||||||
ControllerStatus status = initControllers(&controllers);
|
ControllerStatus status = initControllers(&controllers);
|
||||||
if (status != CONTROLLER_STATUS_SUCCESS)
|
if (status != CONTROLLER_STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
printf("Failed to list controllers\n");
|
log_error("Failed to list controllers\n");
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -151,83 +389,20 @@ int listControllers()
|
|||||||
printf(" - %s\n", controller.inputs[i].inputName);
|
printf(" - %s\n", controller.inputs[i].inputName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
stopControllers(&controllers);
|
stopControllers(&controllers);
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Small utility to automatically detect the game and run it without
|
|
||||||
* having to type a long string in.
|
|
||||||
*/
|
|
||||||
void printVersion() {
|
|
||||||
printf("Lindbergh Loader v%d.%d\n", MAJOR_VERSION, MINOR_VERSION);
|
|
||||||
printf("Created by: %s\n", TEAM);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Small utility to automatically detect the game and run it without
|
|
||||||
* having to type a long string in.
|
|
||||||
*/
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
// Ensure environment variables are set correctly
|
if (argc > 1 && strcmp(argv[1], "--version") == 0)
|
||||||
setEnvironmentVariables();
|
{
|
||||||
|
|
||||||
// Check for --version before directory operations
|
|
||||||
if (argc > 1 && strcmp(argv[1], "--version") == 0) {
|
|
||||||
printVersion();
|
printVersion();
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Look for the games
|
|
||||||
struct dirent *ent;
|
|
||||||
DIR *dir = opendir(".");
|
|
||||||
|
|
||||||
if (dir == NULL)
|
|
||||||
{
|
|
||||||
log_error("Could not list files in current directory.");
|
|
||||||
return EXIT_FAILURE;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *game = NULL;
|
|
||||||
|
|
||||||
int lindberghSharedObjectFound = 0;
|
|
||||||
|
|
||||||
while ((ent = readdir(dir)) != NULL)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (ent->d_type != DT_REG)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (strcmp(ent->d_name, PRELOAD_FILE_NAME) == 0)
|
|
||||||
{
|
|
||||||
lindberghSharedObjectFound = 1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
int index = 0;
|
|
||||||
while (game == NULL)
|
|
||||||
{
|
|
||||||
if (strcmp(games[index], "END") == 0)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (strcmp(ent->d_name, games[index]) == 0)
|
|
||||||
{
|
|
||||||
game = games[index];
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
index++;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (game != NULL && lindberghSharedObjectFound)
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
closedir(dir);
|
|
||||||
|
|
||||||
if (argc > 1 && strcmp(argv[1], "--help") == 0)
|
if (argc > 1 && strcmp(argv[1], "--help") == 0)
|
||||||
{
|
{
|
||||||
printUsage(argv);
|
printUsage(argv);
|
||||||
@@ -239,77 +414,209 @@ int main(int argc, char *argv[])
|
|||||||
return listControllers();
|
return listControllers();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lindberghSharedObjectFound)
|
char passedGamePath[MAX_PATH_LENGTH] = "";
|
||||||
{
|
char forcedGamePath[MAX_PATH_LENGTH] = "";
|
||||||
log_error("The preload object lindbergh.so was not found in this directory.");
|
char forcedGameDir[MAX_PATH_LENGTH] = "";
|
||||||
return EXIT_FAILURE;
|
char gameELF[MAX_PATH_LENGTH] = "";
|
||||||
}
|
char extConfigPath[MAX_PATH_LENGTH] = "";
|
||||||
|
char originalDir[MAX_PATH_LENGTH] = "";
|
||||||
// Build up the command to start the game
|
bool gdb = false;
|
||||||
|
bool testMode = false;
|
||||||
int testMode = 0;
|
bool segaboot = false;
|
||||||
int gdb = 0;
|
bool zink = false;
|
||||||
int forceGame = 0;
|
bool nvidia = false;
|
||||||
int segaboot = 0;
|
|
||||||
char extConfigPath[PATH_MAX] = {0};
|
|
||||||
char forceGamePath[128] = {0};
|
|
||||||
|
|
||||||
for (int i = 1; i < argc; i++)
|
for (int i = 1; i < argc; i++)
|
||||||
{
|
{
|
||||||
if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--test") == 0)
|
if (strcmp(argv[i], "-t") == 0 || strcmp(argv[i], "--test") == 0)
|
||||||
{
|
{
|
||||||
testMode = 1;
|
testMode = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--segaboot") == 0)
|
if (strcmp(argv[i], "-s") == 0 || strcmp(argv[i], "--segaboot") == 0)
|
||||||
{
|
{
|
||||||
segaboot = 1;
|
segaboot = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "--gdb") == 0)
|
if (strcmp(argv[i], "--gdb") == 0)
|
||||||
{
|
{
|
||||||
gdb = 1;
|
gdb = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[i], "-z") == 0 || strcmp(argv[i], "--zink") == 0)
|
||||||
|
{
|
||||||
|
zink = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strcmp(argv[i], "-n") == 0 || strcmp(argv[i], "--nvidia") == 0)
|
||||||
|
{
|
||||||
|
nvidia = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--config") == 0)
|
if (strcmp(argv[i], "-c") == 0 || strcmp(argv[i], "--config") == 0)
|
||||||
{
|
{
|
||||||
if (i+1 >= argc)
|
if (i + 1 >= argc)
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
strncpy(extConfigPath, argv[i+1], PATH_MAX);
|
strncpy(extConfigPath, argv[i + 1], MAX_PATH_LENGTH);
|
||||||
i += 1;
|
i += 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// Treat the argument as the game name
|
|
||||||
strcpy(forceGamePath, argv[i]);
|
if ((strcmp(argv[i], "-g") == 0 || strcmp(argv[i], "--gamepath") == 0) && i + 1 < argc)
|
||||||
forceGame = 1;
|
{
|
||||||
|
strncpy(passedGamePath, argv[i + 1], MAX_PATH_LENGTH);
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
strncpy(forcedGamePath, argv[i], MAX_PATH_LENGTH);
|
||||||
}
|
}
|
||||||
|
|
||||||
char command[128] = {0};
|
if (!getcwd(originalDir, sizeof(originalDir)))
|
||||||
strcpy(command, "./");
|
|
||||||
if (forceGame)
|
|
||||||
{
|
{
|
||||||
strcat(command, forceGamePath);
|
perror("getcwd");
|
||||||
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
else if (segaboot)
|
|
||||||
|
int useForceCommandPath = strlen(forcedGamePath) > 0;
|
||||||
|
bool commandOnlyElf = useForceCommandPath && strchr(forcedGamePath, '/') == NULL;
|
||||||
|
|
||||||
|
if (useForceCommandPath && !commandOnlyElf)
|
||||||
{
|
{
|
||||||
strcat(command, "segaboot -t");
|
if (!fileExists(forcedGamePath))
|
||||||
|
{
|
||||||
|
log_error("File does not exist: %s\n", forcedGamePath);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
extractPathFromProg(forcedGamePath, forcedGameDir, gameELF);
|
||||||
|
if (hasSpaces(forcedGameDir))
|
||||||
|
{
|
||||||
|
log_warn("The path contains spaces, this most likely will cause issues.");
|
||||||
|
log_warn("Please, make sure you don't use spaces in the path.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dirExists(forcedGameDir))
|
||||||
|
{
|
||||||
|
log_error("Directory does not exist: %s\n", forcedGameDir);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
chdir(forcedGameDir);
|
||||||
|
}
|
||||||
|
else if (strlen(passedGamePath) > 0)
|
||||||
|
{
|
||||||
|
if (hasSpaces(passedGamePath))
|
||||||
|
{
|
||||||
|
log_warn("The path contains spaces, this most likely will cause issues.");
|
||||||
|
log_warn("Please, make sure you don't use spaces in the path.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dirExists(passedGamePath))
|
||||||
|
{
|
||||||
|
log_error("Directory does not exist: %s\n", passedGamePath);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
chdir(passedGamePath);
|
||||||
|
|
||||||
|
if (commandOnlyElf)
|
||||||
|
{
|
||||||
|
strncpy(gameELF, forcedGamePath, MAX_PATH_LENGTH);
|
||||||
|
if (!fileExists(gameELF))
|
||||||
|
{
|
||||||
|
log_error("Program '%s' not found in %s\n", gameELF, passedGamePath);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for (int i = 0; games[i] && strcmp(games[i], "END") != 0; i++)
|
||||||
|
{
|
||||||
|
if (fileExists(games[i]))
|
||||||
|
{
|
||||||
|
strncpy(gameELF, games[i], MAX_PATH_LENGTH);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (strlen(gameELF) == 0)
|
||||||
|
{
|
||||||
|
log_error("No known game file found in %s\n", passedGamePath);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (commandOnlyElf)
|
||||||
|
{
|
||||||
|
strncpy(gameELF, forcedGamePath, MAX_PATH_LENGTH);
|
||||||
|
if (!fileExists(gameELF))
|
||||||
|
{
|
||||||
|
log_error("'%s' not found in current directory\n", gameELF);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (game == NULL)
|
for (int i = 0; games[i] && strcmp(games[i], "END") != 0; i++)
|
||||||
{
|
{
|
||||||
log_error("No lindbergh game found in this directory.");
|
if (access(games[i], F_OK) == 0)
|
||||||
|
{
|
||||||
|
strncpy(gameELF, games[i], sizeof(gameELF) - 1);
|
||||||
|
gameELF[sizeof(gameELF) - 1] = '\0';
|
||||||
|
printf("Auto-detected ELF: %s\n", gameELF);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gameELF[0] == '\0')
|
||||||
|
{
|
||||||
|
log_error("No game ELF found in current directory.\n");
|
||||||
|
printUsage(argv);
|
||||||
return EXIT_FAILURE;
|
return EXIT_FAILURE;
|
||||||
}
|
}
|
||||||
strcat(command, game);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (testMode)
|
if (testMode)
|
||||||
testModePath(command);
|
{
|
||||||
|
testModePath(gameELF);
|
||||||
|
}
|
||||||
|
|
||||||
|
char *targetedGameDir = strlen(forcedGameDir) ? forcedGameDir : passedGamePath;
|
||||||
|
char *lib_path = findPreloadLibrary(originalDir, targetedGameDir);
|
||||||
|
if (!lib_path)
|
||||||
|
{
|
||||||
|
log_error("Error: %s not found in known locations.\n", PRELOAD_FILE_NAME);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
setEnvironmentVariables(lib_path, originalDir, targetedGameDir, zink, nvidia, extConfigPath);
|
||||||
|
|
||||||
|
if (segaboot)
|
||||||
|
{
|
||||||
|
strcpy(gameELF, "segaboot -t");
|
||||||
|
// testMode = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Final command
|
||||||
|
char command[MAX_PATH_LENGTH];
|
||||||
|
if (strcmp(gameELF, "../JenTest/JenTest") == 0)
|
||||||
|
{
|
||||||
|
snprintf(command, MAX_PATH_LENGTH, "%s", gameELF);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
snprintf(command, MAX_PATH_LENGTH, "./%s", gameELF);
|
||||||
|
}
|
||||||
|
|
||||||
|
isCleanElf(command);
|
||||||
|
|
||||||
if (gdb)
|
if (gdb)
|
||||||
{
|
{
|
||||||
@@ -318,12 +625,16 @@ int main(int argc, char *argv[])
|
|||||||
strcat(temp, command);
|
strcat(temp, command);
|
||||||
strcpy(command, temp);
|
strcpy(command, temp);
|
||||||
}
|
}
|
||||||
if (extConfigPath[0] != '\0')
|
|
||||||
{
|
|
||||||
setenv(LINDBERGH_CONFIG_PATH,extConfigPath,1);
|
|
||||||
}
|
|
||||||
|
|
||||||
log_info("Starting $ %s", command);
|
log_info("Starting $ %s", command);
|
||||||
|
|
||||||
return system(command);
|
int sysCmd = system(command);
|
||||||
|
|
||||||
|
if (chdir(originalDir) != 0)
|
||||||
|
{
|
||||||
|
log_error("Could not return to the original directory.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return sysCmd;
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-4
@@ -1,5 +1,4 @@
|
|||||||
#ifndef LINDBERGH_LOADER_LOG_H
|
#pragma once
|
||||||
#define LINDBERGH_LOADER_LOG_H
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
@@ -46,5 +45,3 @@ LogFormattedMessage logFormatMessage(const char *message, va_list args);
|
|||||||
FILE* logGetStream();
|
FILE* logGetStream();
|
||||||
void logInitTimer();
|
void logInitTimer();
|
||||||
void logGetElapsedTime(long *seconds, long *milliseconds);
|
void logGetElapsedTime(long *seconds, long *milliseconds);
|
||||||
|
|
||||||
#endif //LINDBERGH_LOADER_LOG_H
|
|
||||||
@@ -159,7 +159,8 @@ void *readJVSFrameThread(void * arg)
|
|||||||
ackSize = 0;
|
ackSize = 0;
|
||||||
waitForEnd = 0;
|
waitForEnd = 0;
|
||||||
|
|
||||||
do {
|
do
|
||||||
|
{
|
||||||
// printf("SERIAL thread debug: trying to read byte.\n");
|
// printf("SERIAL thread debug: trying to read byte.\n");
|
||||||
// Try to read a byte from serial, this call will be blocking if VMIN > 0 and VTIME = 0
|
// Try to read a byte from serial, this call will be blocking if VMIN > 0 and VTIME = 0
|
||||||
bytesRead = read(fd, &localBuffer[byteCount], 1);
|
bytesRead = read(fd, &localBuffer[byteCount], 1);
|
||||||
@@ -194,7 +195,6 @@ void *readJVSFrameThread(void * arg)
|
|||||||
}
|
}
|
||||||
} while (waitForEnd);
|
} while (waitForEnd);
|
||||||
|
|
||||||
|
|
||||||
// Lock the buffer while we write to it
|
// Lock the buffer while we write to it
|
||||||
pthread_mutex_lock(&jvsBuffer_lock);
|
pthread_mutex_lock(&jvsBuffer_lock);
|
||||||
memcpy(jvsFrameBuffer.buffer, localBuffer, byteCount);
|
memcpy(jvsFrameBuffer.buffer, localBuffer, byteCount);
|
||||||
@@ -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,18 +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);
|
||||||
|
|||||||
+1798
-1798
File diff suppressed because it is too large
Load Diff
+1771
-1294
File diff suppressed because it is too large
Load Diff
+53
-134
@@ -14,13 +14,9 @@
|
|||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "sdlcalls.h"
|
#include "sdlcalls.h"
|
||||||
#include "fps_limiter.h"
|
#include "fps_limiter.h"
|
||||||
#define STB_IMAGE_IMPLEMENTATION
|
#include "customcursor.h"
|
||||||
#include "stb_image.h"
|
|
||||||
|
|
||||||
#define STBI_ONLY_PNG
|
|
||||||
#define STBI_SUPPORT_ZLIB
|
|
||||||
#define STBI_NO_SIMD
|
|
||||||
|
|
||||||
|
extern uint32_t gId;
|
||||||
bool SDLWindowCreated = false;
|
bool SDLWindowCreated = false;
|
||||||
extern bool GLUTGame;
|
extern bool GLUTGame;
|
||||||
SDL_Window *SDLwindow;
|
SDL_Window *SDLwindow;
|
||||||
@@ -30,6 +26,11 @@ Window x11Window;
|
|||||||
char SDLgameTitle[256] = {0};
|
char SDLgameTitle[256] = {0};
|
||||||
extern fps_limit fpsLimit;
|
extern fps_limit fpsLimit;
|
||||||
|
|
||||||
|
extern void *customCursor;
|
||||||
|
extern void *phTouchCursor;
|
||||||
|
|
||||||
|
int glutInitialized = 0;
|
||||||
|
|
||||||
void GLAPIENTRY openglDebugCallback2(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
|
void GLAPIENTRY openglDebugCallback2(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
|
||||||
const GLchar *message, const void *userParam)
|
const GLchar *message, const void *userParam)
|
||||||
{
|
{
|
||||||
@@ -50,125 +51,32 @@ void GLAPIENTRY openglDebugCallback2(GLenum source, GLenum type, GLuint id, GLen
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_Surface *createSurfaceFromStb(unsigned char *data, int width, int height, int channels)
|
|
||||||
{
|
|
||||||
Uint32 rmask, gmask, bmask, amask;
|
|
||||||
|
|
||||||
if (channels == 4)
|
|
||||||
{ // RGBA
|
|
||||||
rmask = 0x000000FF;
|
|
||||||
gmask = 0x0000FF00;
|
|
||||||
bmask = 0x00FF0000;
|
|
||||||
amask = 0xFF000000;
|
|
||||||
}
|
|
||||||
else if (channels == 3)
|
|
||||||
{ // RGB
|
|
||||||
rmask = 0x000000FF;
|
|
||||||
gmask = 0x0000FF00;
|
|
||||||
bmask = 0x00FF0000;
|
|
||||||
amask = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Unsupported image format with %d channels.\n", channels);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Surface *surface = SDL_CreateRGBSurfaceFrom(data, width, height, channels * 8, width * channels, rmask, gmask, bmask, amask);
|
|
||||||
|
|
||||||
if (!surface)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "SDL_CreateRGBSurfaceFrom Error: %s\n", SDL_GetError());
|
|
||||||
}
|
|
||||||
return surface;
|
|
||||||
}
|
|
||||||
|
|
||||||
int loadNewCursor(char *cursorFileName)
|
|
||||||
{
|
|
||||||
int width, height, channels;
|
|
||||||
unsigned char *imageData = stbi_load(cursorFileName, &width, &height, &channels, 0);
|
|
||||||
if (!imageData)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Failed to load image: %s\n", cursorFileName);
|
|
||||||
SDL_Quit();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Surface *originalSurface = createSurfaceFromStb(imageData, width, height, channels);
|
|
||||||
if (!originalSurface)
|
|
||||||
{
|
|
||||||
stbi_image_free(imageData);
|
|
||||||
SDL_Quit();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int newWidth = getConfig()->customCursorWidth;
|
|
||||||
int newHeight = getConfig()->customCursorHeight;
|
|
||||||
SDL_Surface *resizedSurface =
|
|
||||||
SDL_CreateRGBSurface(0, newWidth, newHeight, originalSurface->format->BitsPerPixel, originalSurface->format->Rmask,
|
|
||||||
originalSurface->format->Gmask, originalSurface->format->Bmask, originalSurface->format->Amask);
|
|
||||||
if (!resizedSurface)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "SDL_CreateRGBSurface Error: %s\n", SDL_GetError());
|
|
||||||
SDL_FreeSurface(originalSurface);
|
|
||||||
stbi_image_free(imageData);
|
|
||||||
SDL_Quit();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Rect srcRect = {0, 0, originalSurface->w, originalSurface->h};
|
|
||||||
SDL_Rect destRect = {0, 0, newWidth, newHeight};
|
|
||||||
if (SDL_BlitScaled(originalSurface, &srcRect, resizedSurface, &destRect) != 0)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "SDL_BlitScaled Error: %s\n", SDL_GetError());
|
|
||||||
SDL_FreeSurface(resizedSurface);
|
|
||||||
SDL_FreeSurface(originalSurface);
|
|
||||||
stbi_image_free(imageData);
|
|
||||||
SDL_Quit();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_Cursor *customCursor = SDL_CreateColorCursor(resizedSurface, newWidth / 2, newHeight / 2);
|
|
||||||
if (!customCursor)
|
|
||||||
{
|
|
||||||
fprintf(stderr, "SDL_CreateColorCursor Error: %s\n", SDL_GetError());
|
|
||||||
SDL_FreeSurface(resizedSurface);
|
|
||||||
SDL_FreeSurface(originalSurface);
|
|
||||||
stbi_image_free(imageData);
|
|
||||||
SDL_Quit();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
SDL_SetCursor(customCursor);
|
|
||||||
|
|
||||||
SDL_FreeSurface(resizedSurface);
|
|
||||||
SDL_FreeSurface(originalSurface);
|
|
||||||
stbi_image_free(imageData);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void initSDL(int *argcp, char **argv)
|
void initSDL(int *argcp, char **argv)
|
||||||
{
|
{
|
||||||
int gId = getConfig()->crc32;
|
|
||||||
|
|
||||||
void FGAPIENTRY (*_glutInit)(int *argcp, char **argv) = dlsym(RTLD_NEXT, "glutInit");
|
void FGAPIENTRY (*_glutInit)(int *argcp, char **argv) = dlsym(RTLD_NEXT, "glutInit");
|
||||||
|
|
||||||
if (getConfig()->noSDL && GLUTGame)
|
switch (gId)
|
||||||
{
|
{
|
||||||
_glutInit(argcp, argv);
|
case OUTRUN_2_SP_SDX_TEST:
|
||||||
return;
|
case OUTRUN_2_SP_SDX_REVA_TEST:
|
||||||
|
case OUTRUN_2_SP_SDX_REVA_TEST2:
|
||||||
|
if (!glutInitialized)
|
||||||
|
{
|
||||||
|
glutInitialized = 1;
|
||||||
|
_glutInit(argcp, argv);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((gId == OUTRUN_2_SP_SDX_TEST || gId == OUTRUN_2_SP_SDX_REVA_TEST || gId == OUTRUN_2_SP_SDX_REVA_TEST2) && GLUTGame)
|
switch (gId)
|
||||||
{
|
|
||||||
_glutInit(argcp, argv);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((gId == AFTER_BURNER_CLIMAX) || (gId == AFTER_BURNER_CLIMAX_REVA) || (gId == AFTER_BURNER_CLIMAX_REVB) ||
|
|
||||||
(gId == AFTER_BURNER_CLIMAX_SDX) || (gId == AFTER_BURNER_CLIMAX_SDX_REVA) || (gId == AFTER_BURNER_CLIMAX_SE) ||
|
|
||||||
(gId == AFTER_BURNER_CLIMAX_SE_REVA))
|
|
||||||
{
|
{
|
||||||
|
case AFTER_BURNER_CLIMAX:
|
||||||
|
case AFTER_BURNER_CLIMAX_REVA:
|
||||||
|
case AFTER_BURNER_CLIMAX_REVB:
|
||||||
|
case AFTER_BURNER_CLIMAX_SDX:
|
||||||
|
case AFTER_BURNER_CLIMAX_SDX_REVA:
|
||||||
|
case AFTER_BURNER_CLIMAX_SE:
|
||||||
|
case AFTER_BURNER_CLIMAX_SE_REVA:
|
||||||
setenv("SDL_VIDEODRIVER", "x11", 1);
|
setenv("SDL_VIDEODRIVER", "x11", 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -183,14 +91,31 @@ void initSDL(int *argcp, char **argv)
|
|||||||
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); // Double buffering
|
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); // Double buffering
|
||||||
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 1); // 24-bit depth buffer
|
SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 1); // 24-bit depth buffer
|
||||||
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); // Set the alpha size to 8 bits
|
SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); // Set the alpha size to 8 bits
|
||||||
if (gId == AFTER_BURNER_CLIMAX || gId == AFTER_BURNER_CLIMAX_REVA || gId == AFTER_BURNER_CLIMAX_REVB ||
|
switch (gId)
|
||||||
gId == AFTER_BURNER_CLIMAX_SDX || gId == AFTER_BURNER_CLIMAX_SDX_REVA || gId == AFTER_BURNER_CLIMAX_SE ||
|
|
||||||
gId == AFTER_BURNER_CLIMAX_SE_REVA || gId == R_TUNED || gId == VIRTUA_FIGHTER_5 || gId == VIRTUA_FIGHTER_5_REVA ||
|
|
||||||
gId == VIRTUA_FIGHTER_5_REVB || gId == VIRTUA_FIGHTER_5_REVE || gId == VIRTUA_FIGHTER_5_EXPORT || gId == VIRTUA_FIGHTER_5_R ||
|
|
||||||
gId == VIRTUA_FIGHTER_5_R_REVD || gId == VIRTUA_FIGHTER_5_R_REVG || gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVA ||
|
|
||||||
gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB || gId == VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB_6000 || gId == GHOST_SQUAD_EVOLUTION ||
|
|
||||||
gId == SEGA_RACE_TV || gId == MJ4_REVG || gId == MJ4_EVO)
|
|
||||||
{
|
{
|
||||||
|
case AFTER_BURNER_CLIMAX:
|
||||||
|
case AFTER_BURNER_CLIMAX_REVA:
|
||||||
|
case AFTER_BURNER_CLIMAX_REVB:
|
||||||
|
case AFTER_BURNER_CLIMAX_SDX:
|
||||||
|
case AFTER_BURNER_CLIMAX_SDX_REVA:
|
||||||
|
case AFTER_BURNER_CLIMAX_SE:
|
||||||
|
case AFTER_BURNER_CLIMAX_SE_REVA:
|
||||||
|
case R_TUNED:
|
||||||
|
case VIRTUA_FIGHTER_5:
|
||||||
|
case VIRTUA_FIGHTER_5_REVA:
|
||||||
|
case VIRTUA_FIGHTER_5_REVB:
|
||||||
|
case VIRTUA_FIGHTER_5_REVE:
|
||||||
|
case VIRTUA_FIGHTER_5_EXPORT:
|
||||||
|
case VIRTUA_FIGHTER_5_R:
|
||||||
|
case VIRTUA_FIGHTER_5_R_REVD:
|
||||||
|
case VIRTUA_FIGHTER_5_R_REVG:
|
||||||
|
case VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVA:
|
||||||
|
case VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB:
|
||||||
|
case VIRTUA_FIGHTER_5_FINAL_SHOWDOWN_REVB_6000:
|
||||||
|
case GHOST_SQUAD_EVOLUTION:
|
||||||
|
case SEGA_RACE_TV:
|
||||||
|
case MJ4_REVG:
|
||||||
|
case MJ4_EVO:
|
||||||
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
|
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -236,18 +161,12 @@ void initSDL(int *argcp, char **argv)
|
|||||||
if (getConfig()->fullscreen)
|
if (getConfig()->fullscreen)
|
||||||
{
|
{
|
||||||
SDL_SetWindowFullscreen(SDLwindow, SDL_WINDOW_FULLSCREEN);
|
SDL_SetWindowFullscreen(SDLwindow, SDL_WINDOW_FULLSCREEN);
|
||||||
}
|
|
||||||
|
|
||||||
if (strcmp(getConfig()->customCursor, "") != 0)
|
|
||||||
{
|
|
||||||
if (!loadNewCursor(getConfig()->customCursor))
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Custom cursor could not be loaded!\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getConfig()->hideCursor)
|
loadCursors();
|
||||||
|
setCursor(customCursor);
|
||||||
|
|
||||||
|
if (getConfig()->hideCursor || gId == PRIMEVAL_HUNT)
|
||||||
SDL_ShowCursor(SDL_DISABLE);
|
SDL_ShowCursor(SDL_DISABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
#include "securityboard.h"
|
#include "securityboard.h"
|
||||||
#include "log.h"
|
#include "log.h"
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#define SECURITY_BOARD_FRONT_PANEL 0x38
|
#define SECURITY_BOARD_FRONT_PANEL 0x38
|
||||||
#define SECURITY_BOARD_FRONT_PANEL_NON_ROOT 0x1038
|
#define SECURITY_BOARD_FRONT_PANEL_NON_ROOT 0x1038
|
||||||
|
|||||||
+536
-337
File diff suppressed because it is too large
Load Diff
+307
-357
@@ -1,36 +1,31 @@
|
|||||||
#ifndef TWOSPICY_H
|
|
||||||
#define TWOSPICY_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: average.frag
|
// File: average.frag
|
||||||
const char toospicyFileName_0[] = "average.frag";
|
const char toospicyFileName_0[] = "average.frag";
|
||||||
const size_t toospicyPatchSize_0 = 271;
|
const size_t toospicyPatchSize_0 = 271;
|
||||||
const unsigned char toospicyPatchBuffer_0[] = {
|
const unsigned char toospicyPatchBuffer_0[] = {
|
||||||
0xe4, 0x97, 0xac, 0x3a, 0x18, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x01, 0x2b,
|
0xe4, 0x97, 0xac, 0x3a, 0x18, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x01, 0x2b, 0x76, 0x65,
|
||||||
0x76, 0x65, 0x63, 0x34, 0x20, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x3b, 0x09,
|
0x63, 0x34, 0x20, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x5f, 0x43, 0x4f, 0x4c, 0x4f, 0x52, 0x3b, 0x09, 0x0d, 0x0a, 0x76, 0x61,
|
||||||
0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43,
|
0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02,
|
||||||
0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0x69, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x14, 0x66, 0x6c, 0x6f,
|
0x69, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x01, 0x14, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x30,
|
||||||
0x61, 0x74, 0x20, 0x63, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x02, 0xac,
|
0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x02, 0xac, 0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f,
|
||||||
0x00, 0x00, 0x00, 0x93, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x3f, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00,
|
0x2f, 0x02, 0x3f, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x6c, 0x01, 0x00, 0x00, 0x2e, 0x00,
|
||||||
0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x6c, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0x4f, 0x09, 0x09, 0x63,
|
0x00, 0x00, 0x01, 0x4f, 0x09, 0x09, 0x63, 0x72, 0x64, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72,
|
||||||
0x72, 0x64, 0x2e, 0x78, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x20, 0x2b,
|
0x64, 0x2e, 0x78, 0x20, 0x2b, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x78, 0x29, 0x20, 0x2f, 0x20, 0x31, 0x32,
|
||||||
0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x78, 0x29, 0x20, 0x2f, 0x20, 0x31, 0x32, 0x38, 0x2e, 0x30,
|
0x38, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78,
|
||||||
0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x63, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x43,
|
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x79, 0x29, 0x02,
|
||||||
0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x20, 0x2b, 0x20, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x64, 0x79, 0x29,
|
0x8d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x53, 0x69, 0x7a, 0x65, 0x50,
|
||||||
0x02, 0x8d, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x2a, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x53, 0x69,
|
0x6f, 0x77, 0x65, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72,
|
||||||
0x7a, 0x65, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67,
|
0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x29, 0x02, 0xeb, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00};
|
||||||
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x20, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x63, 0x29, 0x02, 0xeb, 0x01, 0x00,
|
|
||||||
0x00, 0x2d, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: average.vert
|
// File: average.vert
|
||||||
const char toospicyFileName_1[] = "average.vert";
|
const char toospicyFileName_1[] = "average.vert";
|
||||||
const size_t toospicyPatchSize_1 = 82;
|
const size_t toospicyPatchSize_1 = 82;
|
||||||
const unsigned char toospicyPatchBuffer_1[] = {
|
const unsigned char toospicyPatchBuffer_1[] = {
|
||||||
0x07, 0x35, 0xa3, 0xe1, 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00,
|
0x07, 0x35, 0xa3, 0xe1, 0xa8, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x15, 0x61, 0x72,
|
||||||
0x01, 0x15, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78,
|
0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0x1b,
|
||||||
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0x1b, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x02,
|
0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x2f, 0x2f, 0x02, 0x5b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x09, 0x74, 0x65, 0x78, 0x43,
|
0x09, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3d, 0x02, 0x6d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00};
|
||||||
0x6f, 0x6f, 0x72, 0x64, 0x3d, 0x02, 0x6d, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: DoF.frag
|
// File: DoF.frag
|
||||||
const char toospicyFileName_2[] = "DoF.frag";
|
const char toospicyFileName_2[] = "DoF.frag";
|
||||||
@@ -46,146 +41,131 @@ const unsigned char toospicyPatchBuffer_2[] = {
|
|||||||
const char toospicyFileName_3[] = "GaussH.frag";
|
const char toospicyFileName_3[] = "GaussH.frag";
|
||||||
const size_t toospicyPatchSize_3 = 241;
|
const size_t toospicyPatchSize_3 = 241;
|
||||||
const unsigned char toospicyPatchBuffer_3[] = {
|
const unsigned char toospicyPatchBuffer_3[] = {
|
||||||
0xae, 0x80, 0x41, 0x90, 0xa9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x61,
|
0xae, 0x80, 0x41, 0x90, 0xa9, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x61, 0x66, 0x6c, 0x6f,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75,
|
0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c,
|
||||||
0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38,
|
0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66,
|
||||||
0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45,
|
0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x9c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20,
|
||||||
0x61, 0x74, 0x02, 0x9c, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63,
|
0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e,
|
||||||
0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20,
|
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0xd4, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0x71, 0x01,
|
||||||
0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0xd4, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x01,
|
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x39, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f,
|
||||||
0x01, 0x2e, 0x02, 0x71, 0x01, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x39, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
||||||
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x63, 0x6f, 0x6c,
|
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d};
|
||||||
0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f,
|
|
||||||
0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d};
|
|
||||||
|
|
||||||
// File: GaussH.vert
|
// File: GaussH.vert
|
||||||
const char toospicyFileName_4[] = "GaussH.vert";
|
const char toospicyFileName_4[] = "GaussH.vert";
|
||||||
const size_t toospicyPatchSize_4 = 53;
|
const size_t toospicyPatchSize_4 = 53;
|
||||||
const unsigned char toospicyPatchBuffer_4[] = {
|
const unsigned char toospicyPatchBuffer_4[] = {0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a,
|
||||||
0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x01,
|
0x01, 0x00, 0x00, 0x01, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b,
|
||||||
0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b, 0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44,
|
0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44, 0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30,
|
||||||
0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
||||||
|
|
||||||
// File: GaussH_Depth.frag
|
// File: GaussH_Depth.frag
|
||||||
const char toospicyFileName_5[] = "GaussH_Depth.frag";
|
const char toospicyFileName_5[] = "GaussH_Depth.frag";
|
||||||
const size_t toospicyPatchSize_5 = 495;
|
const size_t toospicyPatchSize_5 = 495;
|
||||||
const unsigned char toospicyPatchBuffer_5[] = {
|
const unsigned char toospicyPatchBuffer_5[] = {
|
||||||
0x80, 0x58, 0x2b, 0x1c, 0x71, 0x04, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68,
|
0x80, 0x58, 0x2b, 0x1c, 0x71, 0x04, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66,
|
||||||
0x61, 0x6c, 0x66, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20,
|
0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x32, 0x09,
|
||||||
0x68, 0x61, 0x6c, 0x66, 0x32, 0x09, 0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
|
0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x09, 0x76, 0x65,
|
||||||
0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x09, 0x76, 0x65, 0x63, 0x33, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e,
|
0x63, 0x33, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09, 0x76, 0x65, 0x63, 0x34,
|
||||||
0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09, 0x76, 0x65, 0x63, 0x34, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00,
|
0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0xba, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20,
|
||||||
0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x01, 0xba, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x47, 0x61, 0x6d, 0x65,
|
0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61,
|
||||||
0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d,
|
0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x52, 0x61, 0x79, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x53, 0x68, 0x61, 0x64, 0x6f, 0x77, 0x20, 0x52, 0x61, 0x79, 0x44, 0x65, 0x70,
|
0x3b, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
||||||
0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x54,
|
0x72, 0x64, 0x5b, 0x38, 0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
|
||||||
0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x38, 0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
|
||||||
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
|
0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d,
|
0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61,
|
||||||
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54,
|
0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c,
|
||||||
0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20,
|
0x6f, 0x61, 0x74, 0x02, 0xd7, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x19, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e,
|
||||||
0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66,
|
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0x0e, 0x01, 0x00, 0x00,
|
||||||
0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd7, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x19, 0x20, 0x76, 0x65, 0x63,
|
0xa9, 0x00, 0x00, 0x00, 0x02, 0xb8, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00,
|
||||||
0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e,
|
0x2b, 0x00, 0x00, 0x00, 0x02, 0x0b, 0x02, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0x32, 0x02, 0x00, 0x00,
|
||||||
0x30, 0x29, 0x02, 0x0e, 0x01, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x02, 0xb8, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00,
|
0x9f, 0x00, 0x00, 0x00, 0x01, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02, 0x29, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x02, 0x0b, 0x02, 0x00, 0x00,
|
0x03, 0x2e, 0x30, 0x29, 0x02, 0xf6, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02,
|
||||||
0x27, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0x32, 0x02, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x01, 0x06,
|
0x0c, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2e, 0x30, 0x29, 0x02, 0x30, 0x03, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02, 0x29, 0x01, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2e, 0x30,
|
0x01, 0x01, 0x2e, 0x02, 0xeb, 0x03, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x01, 0x18, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30,
|
||||||
0x29, 0x02, 0xf6, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x06, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x02,
|
0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0x47, 0x04, 0x00, 0x00, 0x25,
|
||||||
0x0c, 0x03, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x03, 0x2e, 0x30, 0x29, 0x02, 0x30, 0x03, 0x00, 0x00, 0xbc,
|
0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xeb, 0x03, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x01, 0x18, 0x76, 0x65,
|
|
||||||
0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30,
|
|
||||||
0x2e, 0x30, 0x29, 0x02, 0x47, 0x04, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d,
|
|
||||||
0x0a};
|
|
||||||
|
|
||||||
// File: GaussH_Depth.vert
|
// File: GaussH_Depth.vert
|
||||||
const char toospicyFileName_6[] = "GaussH_Depth.vert";
|
const char toospicyFileName_6[] = "GaussH_Depth.vert";
|
||||||
const size_t toospicyPatchSize_6 = 53;
|
const size_t toospicyPatchSize_6 = 53;
|
||||||
const unsigned char toospicyPatchBuffer_6[] = {
|
const unsigned char toospicyPatchBuffer_6[] = {0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a,
|
||||||
0xc1, 0x77, 0x6f, 0x38, 0x53, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x01, 0x00, 0x00, 0x01,
|
0x01, 0x00, 0x00, 0x01, 0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b,
|
||||||
0x22, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69, 0x29, 0x2b, 0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44,
|
0x30, 0x2e, 0x35, 0x29, 0x2a, 0x57, 0x49, 0x44, 0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30,
|
||||||
0x54, 0x48, 0x2c, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x7d};
|
||||||
|
|
||||||
// File: GaussV.frag
|
// File: GaussV.frag
|
||||||
const char toospicyFileName_7[] = "GaussV.frag";
|
const char toospicyFileName_7[] = "GaussV.frag";
|
||||||
const size_t toospicyPatchSize_7 = 281;
|
const size_t toospicyPatchSize_7 = 281;
|
||||||
const unsigned char toospicyPatchBuffer_7[] = {
|
const unsigned char toospicyPatchBuffer_7[] = {
|
||||||
0x47, 0x81, 0xa3, 0x96, 0xad, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x01, 0x6a,
|
0x47, 0x81, 0xa3, 0x96, 0xad, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x01, 0x6a, 0x66, 0x6c, 0x6f,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x47, 0x61, 0x75, 0x73, 0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x38,
|
0x61, 0x74, 0x20, 0x47, 0x61, 0x75, 0x73, 0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x38, 0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
||||||
0x5d, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48,
|
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a,
|
||||||
0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c,
|
0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d,
|
||||||
0x6f, 0x61, 0x74, 0x20, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b,
|
||||||
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x49, 0x44, 0x54, 0x48, 0x38, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xa7, 0x00, 0x00, 0x00, 0x22, 0x00,
|
||||||
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xa7, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30,
|
||||||
0x00, 0x01, 0x22, 0x76, 0x65, 0x63, 0x34, 0x20, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30,
|
0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02, 0xd4, 0x00, 0x00, 0x00, 0x97,
|
||||||
0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x02,
|
0x00, 0x00, 0x00, 0x01, 0x64, 0x2e, 0x30, 0x2c, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54, 0x38, 0x29, 0x29, 0x2a, 0x47, 0x61, 0x75, 0x73,
|
||||||
0xd4, 0x00, 0x00, 0x00, 0x97, 0x00, 0x00, 0x00, 0x01, 0x64, 0x2e, 0x30, 0x2c, 0x48, 0x45, 0x49, 0x47, 0x48, 0x54,
|
0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x37, 0x2d, 0x69, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20,
|
||||||
0x38, 0x29, 0x29, 0x2a, 0x47, 0x61, 0x75, 0x73, 0x73, 0x46, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5b, 0x37, 0x2d, 0x69,
|
0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67,
|
||||||
0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
0x62, 0x3d, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67,
|
||||||
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x63, 0x6f, 0x6c,
|
0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f,
|
|
||||||
0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: GaussV.vert
|
// File: GaussV.vert
|
||||||
const char toospicyFileName_8[] = "GaussV.vert";
|
const char toospicyFileName_8[] = "GaussV.vert";
|
||||||
const size_t toospicyPatchSize_8 = 40;
|
const size_t toospicyPatchSize_8 = 40;
|
||||||
const unsigned char toospicyPatchBuffer_8[] = {0x73, 0x83, 0x54, 0x8f, 0x81, 0x01, 0x00, 0x00, 0x02, 0x00,
|
const unsigned char toospicyPatchBuffer_8[] = {0x73, 0x83, 0x54, 0x8f, 0x81, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x65,
|
||||||
0x00, 0x00, 0x00, 0x65, 0x01, 0x00, 0x00, 0x01, 0x0c, 0x2e,
|
0x01, 0x00, 0x00, 0x01, 0x0c, 0x2e, 0x30, 0x2c, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x30, 0x2c, 0x28, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x28, 0x69,
|
0x28, 0x69, 0x29, 0x02, 0x68, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00};
|
||||||
0x29, 0x02, 0x68, 0x01, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: GetBrightArea.frag
|
// File: GetBrightArea.frag
|
||||||
const char toospicyFileName_9[] = "GetBrightArea.frag";
|
const char toospicyFileName_9[] = "GetBrightArea.frag";
|
||||||
const size_t toospicyPatchSize_9 = 63;
|
const size_t toospicyPatchSize_9 = 63;
|
||||||
const unsigned char toospicyPatchBuffer_9[] = {
|
const unsigned char toospicyPatchBuffer_9[] = {
|
||||||
0x32, 0x1e, 0x86, 0xd8, 0x17, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00,
|
0x32, 0x1e, 0x86, 0xd8, 0x17, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f,
|
||||||
0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02,
|
0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00,
|
||||||
0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f,
|
0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x01, 0x02, 0x0d, 0x0a};
|
||||||
0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0xfd, 0x01, 0x00, 0x00, 0x01, 0x02, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: GlareCompose.frag
|
// File: GlareCompose.frag
|
||||||
const char toospicyFileName_10[] = "GlareCompose.frag";
|
const char toospicyFileName_10[] = "GlareCompose.frag";
|
||||||
const size_t toospicyPatchSize_10 = 482;
|
const size_t toospicyPatchSize_10 = 482;
|
||||||
const unsigned char toospicyPatchBuffer_10[] = {
|
const unsigned char toospicyPatchBuffer_10[] = {
|
||||||
0x3d, 0xef, 0xd1, 0x18, 0x06, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x02,
|
0x3d, 0xef, 0xd1, 0x18, 0x06, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x1a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65,
|
0x1a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x42, 0x61,
|
||||||
0x72, 0x32, 0x44, 0x20, 0x42, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69,
|
0x73, 0x65, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69, 0x63, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
||||||
0x63, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x50,
|
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72,
|
||||||
0x6f, 0x77, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65,
|
0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x35, 0x5d, 0x3b,
|
||||||
0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x35, 0x5d, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a,
|
0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x0d, 0x0a, 0x7b,
|
||||||
0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x0d, 0x0a, 0x7b, 0x0d,
|
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x02, 0x27, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x02, 0x53, 0x01, 0x00, 0x00,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x02, 0x27, 0x01, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x02, 0x53, 0x01,
|
0x58, 0x00, 0x00, 0x00, 0x03, 0x19, 0x01, 0x00, 0x00, 0x23, 0x69, 0x66, 0x20, 0x31, 0x20, 0x2f, 0x2f, 0x92, 0xc7, 0x89, 0xc1, 0x81,
|
||||||
0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x03, 0x19, 0x01, 0x00, 0x00, 0x23, 0x69, 0x66, 0x20, 0x31, 0x20, 0x2f, 0x2f,
|
0x40, 0x68, 0x61, 0x72, 0x61, 0x68, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43,
|
||||||
0x92, 0xc7, 0x89, 0xc1, 0x81, 0x40, 0x68, 0x61, 0x72, 0x61, 0x68, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09,
|
0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x42, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6e,
|
||||||
0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72,
|
0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69, 0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x30, 0x5d, 0x29,
|
||||||
0x65, 0x32, 0x44, 0x28, 0x42, 0x61, 0x73, 0x65, 0x54, 0x6f, 0x6e, 0x65, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x50, 0x69,
|
0x2a, 0x31, 0x2e, 0x37, 0x35, 0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78,
|
||||||
0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x5b, 0x30, 0x5d, 0x29, 0x2a, 0x31, 0x2e, 0x37, 0x35,
|
0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x63,
|
||||||
0x3b, 0x0d, 0x0a, 0x09, 0x76, 0x65, 0x63, 0x34, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x3b, 0x0d,
|
0x6f, 0x6c, 0x2e, 0x72, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x72, 0x29, 0x3b, 0x0d, 0x0a, 0x09,
|
||||||
0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28,
|
0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x67,
|
||||||
0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x72, 0x29,
|
0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x67, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e,
|
||||||
0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x67, 0x20, 0x3d, 0x20, 0x6d, 0x61,
|
0x64, 0x6d, 0x69, 0x78, 0x2e, 0x62, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x62, 0x2c, 0x42, 0x54, 0x47,
|
||||||
0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x67, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e,
|
0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f, 0x6c, 0x2e, 0x62, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20,
|
||||||
0x67, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x62, 0x6c, 0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x62, 0x20, 0x3d, 0x20,
|
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x62, 0x6c,
|
||||||
0x6d, 0x61, 0x78, 0x28, 0x63, 0x6f, 0x6c, 0x2e, 0x62, 0x2c, 0x42, 0x54, 0x47, 0x6c, 0x61, 0x72, 0x65, 0x43, 0x6f,
|
0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x2a, 0x20, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x3b, 0x0d, 0x0a, 0x23,
|
||||||
0x6c, 0x2e, 0x62, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67,
|
0x69, 0x66, 0x20, 0x30, 0x02, 0xca, 0x01, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46,
|
||||||
0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x62, 0x6c,
|
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x65, 0x6e, 0x64, 0x6d, 0x69, 0x78, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x2a, 0x20, 0x50, 0x6f, 0x77, 0x65, 0x72, 0x3b,
|
|
||||||
0x0d, 0x0a, 0x23, 0x69, 0x66, 0x20, 0x30, 0x02, 0xca, 0x01, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x01, 0x1b, 0x20,
|
|
||||||
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x3d, 0x31, 0x2e,
|
|
||||||
0x30, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: gradate.frag
|
// File: gradate.frag
|
||||||
const char toospicyFileName_11[] = "gradate.frag";
|
const char toospicyFileName_11[] = "gradate.frag";
|
||||||
const size_t toospicyPatchSize_11 = 101;
|
const size_t toospicyPatchSize_11 = 101;
|
||||||
const unsigned char toospicyPatchBuffer_11[] = {
|
const unsigned char toospicyPatchBuffer_11[] = {
|
||||||
0xa4, 0x99, 0x62, 0x6c, 0x21, 0x02, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
|
0xa4, 0x99, 0x62, 0x6c, 0x21, 0x02, 0x00, 0x00, 0x01, 0x52, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c,
|
||||||
0x20, 0x68, 0x61, 0x6c, 0x66, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66,
|
0x66, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66,
|
||||||
0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x32, 0x09, 0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23,
|
0x32, 0x09, 0x76, 0x65, 0x63, 0x32, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33,
|
||||||
0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x09, 0x76, 0x65, 0x63, 0x33,
|
0x09, 0x76, 0x65, 0x63, 0x33, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09,
|
||||||
0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x09, 0x76,
|
0x76, 0x65, 0x63, 0x34, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x02, 0x00, 0x00};
|
||||||
0x65, 0x63, 0x34, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x21, 0x02, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: intensitytest.frag
|
// File: intensitytest.frag
|
||||||
const char toospicyFileName_12[] = "intensitytest.frag";
|
const char toospicyFileName_12[] = "intensitytest.frag";
|
||||||
@@ -199,286 +179,256 @@ const unsigned char toospicyPatchBuffer_12[] = {0x2c, 0xe4, 0xe3, 0x09, 0x56, 0x
|
|||||||
const char toospicyFileName_13[] = "Laplacian.frag";
|
const char toospicyFileName_13[] = "Laplacian.frag";
|
||||||
const size_t toospicyPatchSize_13 = 152;
|
const size_t toospicyPatchSize_13 = 152;
|
||||||
const unsigned char toospicyPatchBuffer_13[] = {
|
const unsigned char toospicyPatchBuffer_13[] = {
|
||||||
0x27, 0xee, 0x97, 0x8c, 0x91, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0x27, 0xee, 0x97, 0x8c, 0x91, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00,
|
0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0x35, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01,
|
0x02, 0x2e, 0x30, 0x02, 0x35, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00, 0x41,
|
||||||
0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x76, 0x65, 0x63, 0x33, 0x28,
|
0x00, 0x00, 0x00, 0x01, 0x0e, 0x76, 0x65, 0x63, 0x33, 0x28, 0x6c, 0x61, 0x70, 0x29, 0x2c, 0x76, 0x65, 0x63, 0x33, 0x02, 0xff, 0x02,
|
||||||
0x6c, 0x61, 0x70, 0x29, 0x2c, 0x76, 0x65, 0x63, 0x33, 0x02, 0xff, 0x02, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01,
|
0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30,
|
||||||
0x0e, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x02, 0x2f, 0x03, 0x00,
|
0x02, 0x2f, 0x03, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c,
|
||||||
0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c, 0x31, 0x2e, 0x30, 0x2c, 0x31,
|
0x31, 0x2e, 0x30, 0x02, 0x56, 0x03, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x2e, 0x30, 0x02, 0x56, 0x03, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x01, 0x06, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Monochrome.frag
|
// File: Monochrome.frag
|
||||||
const char toospicyFileName_14[] = "Monochrome.frag";
|
const char toospicyFileName_14[] = "Monochrome.frag";
|
||||||
const size_t toospicyPatchSize_14 = 330;
|
const size_t toospicyPatchSize_14 = 330;
|
||||||
const unsigned char toospicyPatchBuffer_14[] = {
|
const unsigned char toospicyPatchBuffer_14[] = {
|
||||||
0x60, 0xe0, 0xef, 0x32, 0x33, 0x03, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09, 0x4d,
|
0x60, 0xe0, 0xef, 0x32, 0x33, 0x03, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09, 0x4d, 0x4f, 0x44, 0x45,
|
||||||
0x4f, 0x44, 0x45, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45, 0x09, 0x30,
|
0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45, 0x09, 0x30, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64,
|
||||||
0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65,
|
0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43, 0x48, 0x52, 0x4f,
|
||||||
0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45,
|
0x4d, 0x45, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e,
|
||||||
0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41,
|
0x65, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x31, 0x29, 0x0d, 0x0a,
|
||||||
0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x31, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00,
|
0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00,
|
||||||
0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00,
|
0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x01, 0x3f, 0x68, 0x61, 0x6c, 0x66, 0x34,
|
||||||
0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x01, 0x3f, 0x68, 0x61, 0x6c,
|
0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e,
|
||||||
0x66, 0x34, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x3d, 0x20, 0x76, 0x65, 0x63, 0x34, 0x28, 0x30, 0x2e,
|
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x6e,
|
||||||
0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x20, 0x30, 0x2e, 0x30, 0x29, 0x3b, 0x0d,
|
0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x76, 0x65, 0x63, 0x33, 0x28, 0x02, 0x91, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x76, 0x65,
|
0x00, 0x01, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e,
|
||||||
0x63, 0x33, 0x28, 0x02, 0x91, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x5d, 0x29, 0x3b, 0x0d, 0x0a, 0x23,
|
0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x2a, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e,
|
||||||
0x69, 0x66, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e,
|
0x36, 0x2c, 0x30, 0x2e, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x09, 0x2f, 0x2a, 0x09, 0x53, 0x45, 0x50,
|
||||||
0x72, 0x67, 0x62, 0x2a, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x2c,
|
0x49, 0x41, 0x09, 0x2a, 0x2f, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30, 0x3b,
|
||||||
0x30, 0x2e, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x09, 0x2f, 0x2a, 0x09, 0x53, 0x45,
|
0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x02, 0xed, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x01, 0x03, 0x7d, 0x0d, 0x0a};
|
||||||
0x50, 0x49, 0x41, 0x09, 0x2a, 0x2f, 0x0d, 0x0a, 0x09, 0x6d, 0x6f, 0x6e, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d,
|
|
||||||
0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x02, 0xed, 0x02, 0x00, 0x00, 0x29, 0x00,
|
|
||||||
0x00, 0x00, 0x01, 0x03, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Monochrome.vert
|
// File: Monochrome.vert
|
||||||
const char toospicyFileName_15[] = "Monochrome.vert";
|
const char toospicyFileName_15[] = "Monochrome.vert";
|
||||||
const size_t toospicyPatchSize_15 = 121;
|
const size_t toospicyPatchSize_15 = 121;
|
||||||
const unsigned char toospicyPatchBuffer_15[] = {
|
const unsigned char toospicyPatchBuffer_15[] = {
|
||||||
0x78, 0x26, 0x8a, 0x51, 0x79, 0x00, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09,
|
0x78, 0x26, 0x8a, 0x51, 0x79, 0x00, 0x00, 0x00, 0x01, 0x66, 0x23, 0x69, 0x66, 0x6e, 0x64, 0x65, 0x66, 0x09, 0x4d, 0x4f, 0x44,
|
||||||
0x4d, 0x4f, 0x44, 0x45, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45,
|
0x45, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x44, 0x45, 0x09, 0x30, 0x0d, 0x0a, 0x23, 0x65,
|
||||||
0x09, 0x30, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66,
|
0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43,
|
||||||
0x69, 0x6e, 0x65, 0x09, 0x4d, 0x4f, 0x4e, 0x4f, 0x43, 0x48, 0x52, 0x4f, 0x4d, 0x45, 0x09, 0x09, 0x09, 0x28,
|
0x48, 0x52, 0x4f, 0x4d, 0x45, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64,
|
||||||
0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x30, 0x29, 0x0d, 0x0a, 0x23, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x09,
|
0x65, 0x66, 0x69, 0x6e, 0x65, 0x09, 0x53, 0x45, 0x50, 0x49, 0x41, 0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d,
|
||||||
0x53, 0x45, 0x50, 0x49, 0x41, 0x09, 0x09, 0x09, 0x09, 0x28, 0x4d, 0x4f, 0x44, 0x45, 0x3d, 0x3d, 0x31, 0x29,
|
0x3d, 0x31, 0x29, 0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00};
|
||||||
0x0d, 0x0a, 0x0d, 0x0a, 0x02, 0x00, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: nnstdshader.vert
|
// File: nnstdshader.vert
|
||||||
const char toospicyFileName_16[] = "nnstdshader.vert";
|
const char toospicyFileName_16[] = "nnstdshader.vert";
|
||||||
const size_t toospicyPatchSize_16 = 652;
|
const size_t toospicyPatchSize_16 = 652;
|
||||||
const unsigned char toospicyPatchBuffer_16[] = {
|
const unsigned char toospicyPatchBuffer_16[] = {
|
||||||
0x39, 0x15, 0xd4, 0xa8, 0x53, 0x16, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x01, 0x01, 0x00, 0x02, 0xaa,
|
0x39, 0x15, 0xd4, 0xa8, 0x53, 0x16, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x01, 0x01, 0x00, 0x02, 0xaa, 0x01, 0x01, 0x00,
|
||||||
0x01, 0x01, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x04, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16,
|
0x27, 0x00, 0x00, 0x00, 0x01, 0x04, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x39, 0x3e,
|
||||||
0x00, 0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09,
|
0x20, 0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50,
|
||||||
0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67,
|
0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
||||||
0x68, 0x74, 0x28, 0x30, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x20, 0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20,
|
0x0f, 0x20, 0x3e, 0x20, 0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16,
|
||||||
0x31, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00,
|
0x00, 0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67,
|
||||||
0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e,
|
0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x31, 0x29, 0x3b,
|
||||||
0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68,
|
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00,
|
||||||
0x74, 0x28, 0x31, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20,
|
0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x32, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28,
|
||||||
0x09, 0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x32,
|
0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x39, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||||
0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00,
|
0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67,
|
||||||
0x00, 0x01, 0x39, 0x3e, 0x20, 0x32, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e,
|
0x68, 0x74, 0x28, 0x32, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23,
|
||||||
0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74,
|
0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x33, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
||||||
0x28, 0x32, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09,
|
0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x01, 0x6c, 0x3e, 0x20, 0x33, 0x29, 0x20,
|
||||||
0x23, 0x69, 0x66, 0x02, 0xf2, 0x0d, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x20, 0x3e, 0x20, 0x33, 0x0d,
|
0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x02, 0x4a, 0x36, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a,
|
||||||
0x01, 0x6c, 0x3e, 0x20, 0x33, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x09, 0x6e, 0x6e, 0x67,
|
0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64,
|
||||||
0x6c, 0x43, 0x61, 0x6c, 0x63, 0x50, 0x61, 0x72, 0x61, 0x6c, 0x65, 0x6c, 0x6c, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28,
|
0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09,
|
||||||
0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x7d, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23,
|
0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x02, 0x3a, 0x37, 0x00, 0x00, 0x20, 0x00,
|
||||||
0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d,
|
0x00, 0x00, 0x01, 0x21, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x50,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09,
|
0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18, 0x00,
|
||||||
0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x09, 0x02, 0x3a, 0x37, 0x00,
|
0x00, 0x00, 0x01, 0x0a, 0x34, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x09, 0x02, 0x3a, 0x37, 0x00, 0x00, 0x1e, 0x00, 0x00,
|
||||||
0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x21, 0x20, 0x20, 0x20, 0x20, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67,
|
0x00, 0x01, 0x23, 0x20, 0x3e, 0x20, 0x31, 0x0d, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d,
|
||||||
0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x30,
|
0x50, 0x6f, 0x69, 0x6e, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18,
|
||||||
0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0x0a, 0x34, 0x29, 0x3b, 0x0d, 0x0a, 0x09,
|
0x00, 0x00, 0x00, 0x01, 0x09, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x02, 0x54, 0xc9, 0x00, 0x00, 0x15, 0x00, 0x00,
|
||||||
0x7d, 0x0d, 0x0a, 0x09, 0x02, 0x3a, 0x37, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x23, 0x20, 0x3e, 0x20, 0x31,
|
0x00, 0x01, 0x03, 0x23, 0x69, 0x66, 0x02, 0xef, 0x38, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x36, 0x0d, 0x0a, 0x09, 0x69, 0x66,
|
||||||
0x0d, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x50, 0x6f, 0x69, 0x6e,
|
0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x53, 0x70, 0x6f, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20,
|
||||||
0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x31, 0x29, 0x20, 0x02, 0xd2, 0x02, 0x01, 0x00, 0x18, 0x00,
|
0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x09, 0x09, 0x6e, 0x6e, 0x67, 0x6c, 0x43, 0x61, 0x6c, 0x63, 0x53, 0x70, 0x6f, 0x74, 0x4c, 0x69,
|
||||||
0x00, 0x00, 0x01, 0x09, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x02, 0x54, 0xc9, 0x00, 0x00, 0x15,
|
0x67, 0x68, 0x74, 0x28, 0x36, 0x02, 0xb0, 0x03, 0x01, 0x00, 0xa3, 0x12, 0x00, 0x00};
|
||||||
0x00, 0x00, 0x00, 0x01, 0x03, 0x23, 0x69, 0x66, 0x02, 0xef, 0x38, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x01, 0x36,
|
|
||||||
0x0d, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x28, 0x6e, 0x6e, 0x67, 0x6c, 0x75, 0x4e, 0x75, 0x6d, 0x53, 0x70, 0x6f, 0x74,
|
|
||||||
0x4c, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x29, 0x20, 0x7b, 0x0d, 0x0a, 0x09, 0x09, 0x6e, 0x6e, 0x67,
|
|
||||||
0x6c, 0x43, 0x61, 0x6c, 0x63, 0x53, 0x70, 0x6f, 0x74, 0x4c, 0x69, 0x67, 0x68, 0x74, 0x28, 0x36, 0x02, 0xb0, 0x03,
|
|
||||||
0x01, 0x00, 0xa3, 0x12, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: Posterization.frag
|
// File: Posterization.frag
|
||||||
const char toospicyFileName_17[] = "Posterization.frag";
|
const char toospicyFileName_17[] = "Posterization.frag";
|
||||||
const size_t toospicyPatchSize_17 = 59;
|
const size_t toospicyPatchSize_17 = 59;
|
||||||
const unsigned char toospicyPatchBuffer_17[] = {0xc1, 0xb7, 0x73, 0x37, 0xa9, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
|
const unsigned char toospicyPatchBuffer_17[] = {0xc1, 0xb7, 0x73, 0x37, 0xa9, 0x02, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01,
|
||||||
0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01,
|
0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00,
|
||||||
0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0,
|
0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05,
|
||||||
0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f,
|
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00};
|
||||||
0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: Sepia.frag
|
// File: Sepia.frag
|
||||||
const char toospicyFileName_18[] = "Sepia.frag";
|
const char toospicyFileName_18[] = "Sepia.frag";
|
||||||
const size_t toospicyPatchSize_18 = 320;
|
const size_t toospicyPatchSize_18 = 320;
|
||||||
const unsigned char toospicyPatchBuffer_18[] = {
|
const unsigned char toospicyPatchBuffer_18[] = {
|
||||||
0xe5, 0x2e, 0xad, 0xed, 0xa1, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0xe5, 0x2e, 0xad, 0xed, 0xa1, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x22, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64,
|
0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x22, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a,
|
||||||
0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20,
|
0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b,
|
||||||
0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x02, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01,
|
0x02, 0xf2, 0x01, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x61, 0x74, 0x65, 0x3b,
|
||||||
0x0b, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x61, 0x74, 0x65, 0x3b, 0x02, 0x44, 0x02, 0x00, 0x00, 0x18, 0x00,
|
0x02, 0x44, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x01, 0xdd, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x6f,
|
||||||
0x00, 0x00, 0x01, 0xdd, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x20, 0x6f, 0x72, 0x69, 0x67, 0x63,
|
0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x3d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x4f, 0x72, 0x69, 0x67, 0x50,
|
||||||
0x6f, 0x6c, 0x3d, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x4f, 0x72, 0x69, 0x67, 0x50, 0x69,
|
0x69, 0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68, 0x61, 0x6c,
|
||||||
0x63, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x68,
|
0x66, 0x34, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x70, 0x69,
|
||||||
0x61, 0x6c, 0x66, 0x34, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20,
|
0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x64, 0x6f, 0x74, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2e, 0x72,
|
||||||
0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x64, 0x6f, 0x74, 0x28, 0x6f,
|
0x67, 0x62, 0x2c, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x30, 0x2e, 0x32, 0x39, 0x39, 0x2c, 0x30, 0x2e, 0x35, 0x38, 0x37, 0x2c, 0x30,
|
||||||
0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2e, 0x72, 0x67, 0x62, 0x2c, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x30, 0x2e,
|
0x2e, 0x31, 0x34, 0x34, 0x29, 0x29, 0x2a, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x2c, 0x30,
|
||||||
0x32, 0x39, 0x39, 0x2c, 0x30, 0x2e, 0x35, 0x38, 0x37, 0x2c, 0x30, 0x2e, 0x31, 0x34, 0x34, 0x29, 0x29, 0x2a, 0x68,
|
0x2e, 0x33, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d, 0x31,
|
||||||
0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x36, 0x2c, 0x30, 0x2e, 0x33, 0x29, 0x3b, 0x0d,
|
0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f,
|
||||||
0x0a, 0x20, 0x20, 0x20, 0x20, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c, 0x2e, 0x61, 0x3d, 0x31, 0x2e, 0x30,
|
0x72, 0x3d, 0x6d, 0x69, 0x78, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2c, 0x73, 0x65, 0x70, 0x69, 0x61, 0x63, 0x6f, 0x6c,
|
||||||
0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c,
|
0x2c, 0x52, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x6f, 0x72, 0x3d, 0x6d, 0x69, 0x78, 0x28, 0x6f, 0x72, 0x69, 0x67, 0x63, 0x6f, 0x6c, 0x2c, 0x73, 0x65, 0x70, 0x69,
|
|
||||||
0x61, 0x63, 0x6f, 0x6c, 0x2c, 0x52, 0x61, 0x74, 0x65, 0x29, 0x3b, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Sepia.vert
|
// File: Sepia.vert
|
||||||
const char toospicyFileName_19[] = "Sepia.vert";
|
const char toospicyFileName_19[] = "Sepia.vert";
|
||||||
const size_t toospicyPatchSize_19 = 68;
|
const size_t toospicyPatchSize_19 = 68;
|
||||||
const unsigned char toospicyPatchBuffer_19[] = {
|
const unsigned char toospicyPatchBuffer_19[] = {0xd1, 0x30, 0x7b, 0xf2, 0x9a, 0x00, 0x00, 0x00, 0x01, 0x31, 0x76, 0x61, 0x72, 0x79,
|
||||||
0xd1, 0x30, 0x7b, 0xf2, 0x9a, 0x00, 0x00, 0x00, 0x01, 0x31, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67,
|
0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f,
|
||||||
0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a,
|
0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d,
|
||||||
0x0d, 0x0a, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x6d, 0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29,
|
0x61, 0x69, 0x6e, 0x28, 0x76, 0x6f, 0x69, 0x64, 0x29, 0x0d, 0x0a, 0x7b, 0x0d, 0x0a,
|
||||||
0x0d, 0x0a, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x02, 0x52, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00};
|
0x20, 0x20, 0x20, 0x02, 0x52, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00};
|
||||||
|
|
||||||
// File: Solarization.frag
|
// File: Solarization.frag
|
||||||
const char toospicyFileName_20[] = "Solarization.frag";
|
const char toospicyFileName_20[] = "Solarization.frag";
|
||||||
const size_t toospicyPatchSize_20 = 98;
|
const size_t toospicyPatchSize_20 = 98;
|
||||||
const unsigned char toospicyPatchBuffer_20[] = {
|
const unsigned char toospicyPatchBuffer_20[] = {
|
||||||
0x90, 0xdb, 0xc4, 0x2d, 0x22, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00,
|
0x90, 0xdb, 0xc4, 0x2d, 0x22, 0x03, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f,
|
||||||
0x01, 0x02, 0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f,
|
0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xd0, 0x01, 0x00, 0x00, 0x46,
|
||||||
0x02, 0xd0, 0x01, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02,
|
0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x1a, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x1a, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xa5, 0x02, 0x00, 0x00,
|
0x02, 0x2e, 0x30, 0x02, 0xa5, 0x02, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xd1, 0x02, 0x00,
|
||||||
0x2c, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xd1, 0x02, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00,
|
0x00, 0x2c, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xfd, 0x02, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00};
|
||||||
0x01, 0x02, 0x2e, 0x30, 0x02, 0xfd, 0x02, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: Test0.frag
|
// File: Test0.frag
|
||||||
const char toospicyFileName_21[] = "Test0.frag";
|
const char toospicyFileName_21[] = "Test0.frag";
|
||||||
const size_t toospicyPatchSize_21 = 907;
|
const size_t toospicyPatchSize_21 = 907;
|
||||||
const unsigned char toospicyPatchBuffer_21[] = {
|
const unsigned char toospicyPatchBuffer_21[] = {
|
||||||
0x82, 0x87, 0xe9, 0xd6, 0x17, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x77,
|
0x82, 0x87, 0xe9, 0xd6, 0x17, 0x05, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x01, 0x77, 0x66, 0x6c, 0x6f,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x47, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x47, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x42, 0x3b, 0x0d,
|
0x61, 0x74, 0x20, 0x45, 0x64, 0x67, 0x65, 0x42, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
||||||
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x54, 0x68, 0x72, 0x65,
|
0x61, 0x74, 0x20, 0x54, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6f, 0x6c, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x73, 0x68, 0x6f, 0x6c, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x61, 0x74, 0x20, 0x57, 0x69, 0x64, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd3, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd3, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x5e, 0x66, 0x6c, 0x6f,
|
0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d,
|
||||||
0x61, 0x74, 0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32,
|
0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x29,
|
||||||
0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65,
|
0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x3d, 0x66,
|
||||||
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72,
|
0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e,
|
||||||
0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x3d, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70,
|
0x30, 0x02, 0x6d, 0x01, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x53, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46,
|
||||||
0x74, 0x68, 0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x02, 0x6d, 0x01, 0x00,
|
0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x67, 0x3d, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x53, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61,
|
0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x67, 0x3d, 0x66, 0x6c, 0x6f, 0x6f, 0x72, 0x28, 0x44, 0x65, 0x70, 0x74,
|
0x2d, 0x3d, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x67, 0x3b, 0x44, 0x65, 0x70, 0x74, 0x68,
|
||||||
0x68, 0x2a, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x29, 0x2f, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x44,
|
0x2a, 0x3d, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x01, 0x31, 0x3b, 0x0d, 0x0a, 0x23,
|
||||||
0x65, 0x70, 0x74, 0x68, 0x2d, 0x3d, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e,
|
0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x43, 0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a,
|
||||||
0x67, 0x3b, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2a, 0x3d, 0x32, 0x35, 0x36, 0x2e, 0x30, 0x02, 0xdf, 0x01, 0x00, 0x00,
|
0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x34, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x76, 0x65,
|
||||||
0x2f, 0x00, 0x00, 0x00, 0x01, 0x31, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x09, 0x66, 0x6c,
|
0x63, 0x02, 0x3f, 0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x4e, 0x01, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65,
|
||||||
0x6f, 0x61, 0x74, 0x20, 0x43, 0x44, 0x65, 0x70, 0x74, 0x68, 0x3b, 0x0d, 0x0a, 0x09, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x29,
|
||||||
0x20, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x34, 0x5d, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x76, 0x65, 0x63, 0x02, 0x3f,
|
0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x30, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75,
|
||||||
0x02, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x03, 0x4e, 0x01, 0x00, 0x00, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65,
|
0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65,
|
||||||
0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2d, 0x32, 0x2e, 0x30, 0x2f, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78,
|
||||||
0x72, 0x64, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x30, 0x5d, 0x20, 0x3d,
|
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x31,
|
||||||
0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74,
|
0x5d, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74,
|
||||||
0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2d, 0x32,
|
0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2b, 0x32, 0x2e, 0x30, 0x2f,
|
||||||
0x2e, 0x30, 0x2f, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79,
|
0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d,
|
||||||
0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x31, 0x5d, 0x20, 0x3d, 0x20,
|
0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44,
|
||||||
0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68,
|
0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
||||||
0x2c, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2b, 0x32, 0x2e,
|
0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x2d, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65,
|
||||||
0x30, 0x2f, 0x57, 0x69, 0x64, 0x74, 0x68, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x29,
|
0x69, 0x67, 0x68, 0x74, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x33, 0x5d, 0x20, 0x3d,
|
||||||
0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x32, 0x5d, 0x20, 0x3d, 0x20, 0x74,
|
0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c, 0x76,
|
||||||
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c,
|
0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72,
|
||||||
0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78,
|
0x64, 0x2e, 0x79, 0x2b, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29, 0x29, 0x2e, 0x72, 0x3b, 0x02, 0xd3, 0x03,
|
||||||
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x2d, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29,
|
0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xf2, 0x03, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x6e, 0x20, 0x28,
|
||||||
0x29, 0x2e, 0x72, 0x3b, 0x0d, 0x0a, 0x09, 0x44, 0x65, 0x70, 0x74, 0x68, 0x5b, 0x33, 0x5d, 0x20, 0x3d, 0x20, 0x74,
|
0x65, 0x64, 0x67, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x29, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||||
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x32, 0x44, 0x28, 0x47, 0x61, 0x6d, 0x65, 0x44, 0x65, 0x70, 0x74, 0x68, 0x2c,
|
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67,
|
||||||
0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x78, 0x2c, 0x74, 0x65, 0x78,
|
0x62, 0x3d, 0x76, 0x65, 0x63, 0x33, 0x28, 0x45, 0x64, 0x67, 0x65, 0x52, 0x2c, 0x45, 0x64, 0x67, 0x65, 0x47, 0x2c, 0x45, 0x64, 0x67,
|
||||||
0x43, 0x6f, 0x6f, 0x72, 0x64, 0x2e, 0x79, 0x2b, 0x32, 0x2e, 0x30, 0x2f, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x29,
|
0x65, 0x42, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
||||||
0x29, 0x2e, 0x72, 0x3b, 0x02, 0xd3, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xf2, 0x03,
|
0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x02, 0x9d,
|
||||||
0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x01, 0x6e, 0x20, 0x28, 0x65, 0x64, 0x67, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x30,
|
0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x12, 0x3b, 0x0d, 0x0a, 0x09, 0x7d, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66,
|
||||||
0x29, 0x7b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
||||||
0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x3d, 0x76,
|
|
||||||
0x65, 0x63, 0x33, 0x28, 0x45, 0x64, 0x67, 0x65, 0x52, 0x2c, 0x45, 0x64, 0x67, 0x65, 0x47, 0x2c, 0x45, 0x64, 0x67,
|
|
||||||
0x65, 0x42, 0x29, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
|
|
||||||
0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x20, 0x3d,
|
|
||||||
0x20, 0x31, 0x2e, 0x30, 0x02, 0x9d, 0x04, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x01, 0x12, 0x3b, 0x0d, 0x0a, 0x09,
|
|
||||||
0x7d, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
// File: Test1.frag
|
// File: Test1.frag
|
||||||
const char toospicyFileName_22[] = "Test1.frag";
|
const char toospicyFileName_22[] = "Test1.frag";
|
||||||
const size_t toospicyPatchSize_22 = 544;
|
const size_t toospicyPatchSize_22 = 544;
|
||||||
const unsigned char toospicyPatchBuffer_22[] = {
|
const unsigned char toospicyPatchBuffer_22[] = {
|
||||||
0xde, 0x48, 0xcd, 0x78, 0x13, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0xde, 0x48, 0xcd, 0x78, 0x13, 0x08, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5a, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02,
|
0x5a, 0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x05, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0x8e, 0x01, 0x00, 0x00, 0x41, 0x00,
|
||||||
0x8e, 0x01, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xcf, 0x01, 0x00, 0x00, 0x82, 0x00,
|
0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02, 0xcf, 0x01, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x01, 0x90, 0x66, 0x6c, 0x6f, 0x61, 0x74,
|
||||||
0x00, 0x00, 0x01, 0x90, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x58, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f,
|
0x20, 0x58, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x59, 0x3b, 0x0d,
|
||||||
0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x59, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
|
||||||
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69,
|
||||||
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66,
|
0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x32, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
||||||
0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x52, 0x32, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66,
|
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6c, 0x61, 0x74, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d,
|
||||||
0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6c, 0x61, 0x74, 0x3b, 0x0d, 0x0a, 0x75, 0x6e,
|
0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x32, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72,
|
||||||
0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x20, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x32, 0x3b,
|
0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd9, 0x02, 0x00, 0x00, 0xce, 0x01, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xa6, 0x04,
|
||||||
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x02, 0xd9, 0x02, 0x00,
|
0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x01, 0x4b, 0x68, 0x61, 0x6c, 0x66, 0x20, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3d,
|
||||||
0x00, 0xce, 0x01, 0x00, 0x00, 0x01, 0x01, 0x2e, 0x02, 0xa6, 0x04, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x01, 0x4b,
|
0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x2e, 0x30,
|
||||||
0x68, 0x61, 0x6c, 0x66, 0x20, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x3d, 0x30, 0x2e, 0x30, 0x3b, 0x0d,
|
0x29, 0x7b, 0x0d, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x6e, 0x2e, 0x78, 0x20, 0x2a, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a,
|
||||||
0x0a, 0x09, 0x09, 0x69, 0x66, 0x28, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3e, 0x20, 0x31, 0x2e, 0x30, 0x29, 0x7b,
|
0x09, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x02, 0x33, 0x05, 0x00, 0x00,
|
||||||
0x0d, 0x0a, 0x09, 0x09, 0x20, 0x20, 0x6e, 0x2e, 0x78, 0x20, 0x2a, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x3b, 0x0d,
|
0x39, 0x00, 0x00, 0x00, 0x01, 0x23, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79, 0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x30,
|
||||||
0x0a, 0x09, 0x09, 0x09, 0x6e, 0x65, 0x77, 0x46, 0x6f, 0x63, 0x75, 0x73, 0x20, 0x3d, 0x20, 0x32, 0x2e, 0x30, 0x02,
|
0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79, 0x65, 0x2e, 0x7a, 0x20, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x02, 0x89, 0x05,
|
||||||
0x33, 0x05, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x01, 0x23, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79,
|
0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x03, 0x6e, 0x65, 0x77, 0x02, 0xb0, 0x05, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x01, 0x25,
|
||||||
0x65, 0x2e, 0x79, 0x20, 0x3d, 0x20, 0x30, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x65, 0x79, 0x65, 0x2e, 0x7a,
|
0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64,
|
||||||
0x20, 0x3d, 0x20, 0x2d, 0x31, 0x2e, 0x30, 0x02, 0x89, 0x05, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x01, 0x03, 0x6e,
|
0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x48, 0x06, 0x00, 0x00, 0x26, 0x00,
|
||||||
0x65, 0x77, 0x02, 0xb0, 0x05, 0x00, 0x00, 0x94, 0x00, 0x00, 0x00, 0x01, 0x25, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20,
|
0x00, 0x00, 0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x6f, 0x06, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00,
|
||||||
0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a,
|
0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0xb7, 0x06, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x01, 0x2d,
|
||||||
0x20, 0x20, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x48, 0x06, 0x00, 0x00, 0x26, 0x00,
|
0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32,
|
||||||
0x00, 0x00, 0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0x6f, 0x06, 0x00, 0x00, 0x47,
|
0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64,
|
||||||
0x00, 0x00, 0x00, 0x01, 0x09, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x02, 0xb7, 0x06, 0x00, 0x00,
|
0x32, 0x02, 0x7f, 0x07, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x11, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65,
|
||||||
0xbf, 0x00, 0x00, 0x00, 0x01, 0x2d, 0x76, 0x65, 0x63, 0x32, 0x20, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64,
|
0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32, 0x02, 0xa5, 0x07, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00};
|
||||||
0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32, 0x3b, 0x0d, 0x0a, 0x09, 0x09, 0x09, 0x6d, 0x6f, 0x64, 0x69,
|
|
||||||
0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x32, 0x02, 0x7f, 0x07, 0x00, 0x00, 0x1e,
|
|
||||||
0x00, 0x00, 0x00, 0x01, 0x11, 0x6d, 0x6f, 0x64, 0x69, 0x66, 0x69, 0x65, 0x64, 0x54, 0x65, 0x78, 0x43, 0x6f, 0x6f,
|
|
||||||
0x72, 0x64, 0x32, 0x02, 0xa5, 0x07, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00};
|
|
||||||
|
|
||||||
// File: YUVCompose.frag
|
// File: YUVCompose.frag
|
||||||
const char toospicyFileName_23[] = "YUVCompose.frag";
|
const char toospicyFileName_23[] = "YUVCompose.frag";
|
||||||
const size_t toospicyPatchSize_23 = 507;
|
const size_t toospicyPatchSize_23 = 507;
|
||||||
const unsigned char toospicyPatchBuffer_23[] = {
|
const unsigned char toospicyPatchBuffer_23[] = {
|
||||||
0xee, 0x1d, 0x3d, 0x9c, 0x54, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02,
|
0xee, 0x1d, 0x3d, 0x9c, 0x54, 0x04, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x5c, 0x01, 0x00, 0x00, 0x01, 0x02, 0x2f, 0x2f, 0x02,
|
||||||
0x2f, 0x2f, 0x02, 0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x49, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64,
|
0x5c, 0x01, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x01, 0x49, 0x2f, 0x2f, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a,
|
||||||
0x69, 0x66, 0x0d, 0x0a, 0x0d, 0x0a, 0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20,
|
0x76, 0x61, 0x72, 0x79, 0x69, 0x6e, 0x67, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b,
|
||||||
0x74, 0x65, 0x78, 0x43, 0x6f, 0x6f, 0x72, 0x64, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20,
|
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x59, 0x54,
|
||||||
0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44, 0x20, 0x59, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b,
|
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x02, 0x07, 0x02, 0x00, 0x00,
|
||||||
0x0d, 0x0a, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x02, 0x07, 0x02, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00,
|
0x16, 0x00, 0x00, 0x00, 0x01, 0x25, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32,
|
||||||
0x01, 0x25, 0x75, 0x6e, 0x69, 0x66, 0x6f, 0x72, 0x6d, 0x20, 0x73, 0x61, 0x6d, 0x70, 0x6c, 0x65, 0x72, 0x32, 0x44,
|
0x44, 0x20, 0x43, 0x62, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x09, 0x30, 0x02,
|
||||||
0x20, 0x43, 0x62, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x69, 0x66, 0x09,
|
0x33, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x01,
|
||||||
0x30, 0x02, 0x33, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x01, 0x02, 0x2e, 0x30, 0x02, 0xba, 0x02, 0x00, 0x00,
|
0x7a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x20, 0x59, 0x43, 0x62,
|
||||||
0x70, 0x00, 0x00, 0x00, 0x01, 0x7a, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20,
|
0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x0d, 0x0a, 0x28,
|
||||||
0x6d, 0x61, 0x74, 0x33, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69,
|
0x20, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x20, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x0d, 0x0a,
|
||||||
0x78, 0x20, 0x3d, 0x20, 0x6d, 0x61, 0x74, 0x33, 0x0d, 0x0a, 0x28, 0x20, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x20,
|
0x20, 0x20, 0x20, 0x20, 0x30, 0x2e, 0x30, 0x2c, 0x2d, 0x30, 0x2e, 0x33, 0x39, 0x32, 0x2c, 0x32, 0x2e, 0x30, 0x31, 0x37, 0x2c, 0x0d,
|
||||||
0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x31, 0x2e, 0x31, 0x36, 0x34, 0x2c, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x20, 0x30,
|
0x0a, 0x20, 0x20, 0x31, 0x2e, 0x35, 0x39, 0x36, 0x2c, 0x2d, 0x30, 0x2e, 0x38, 0x31, 0x33, 0x2c, 0x20, 0x20, 0x30, 0x2e, 0x30, 0x0d,
|
||||||
0x2e, 0x30, 0x2c, 0x2d, 0x30, 0x2e, 0x33, 0x39, 0x32, 0x2c, 0x32, 0x2e, 0x30, 0x31, 0x37, 0x2c, 0x0d, 0x0a, 0x20,
|
0x0a, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x02, 0x28, 0x03, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00,
|
||||||
0x20, 0x31, 0x2e, 0x35, 0x39, 0x36, 0x2c, 0x2d, 0x30, 0x2e, 0x38, 0x31, 0x33, 0x2c, 0x20, 0x20, 0x30, 0x2e, 0x30,
|
0x01, 0x2e, 0x23, 0x69, 0x66, 0x09, 0x30, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x41, 0x2d, 0x3d, 0x68, 0x61,
|
||||||
0x0d, 0x0a, 0x29, 0x3b, 0x0d, 0x0a, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x02, 0x28, 0x03, 0x00, 0x00,
|
0x6c, 0x66, 0x34, 0x28, 0x31, 0x36, 0x2e, 0x30, 0x2f, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35,
|
||||||
0xde, 0x00, 0x00, 0x00, 0x01, 0x2e, 0x23, 0x69, 0x66, 0x09, 0x30, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x59, 0x43, 0x62,
|
0x2c, 0x30, 0x29, 0x3b, 0x02, 0x2d, 0x04, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x01, 0x8c, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a,
|
||||||
0x43, 0x72, 0x41, 0x2d, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x34, 0x28, 0x31, 0x36, 0x2e, 0x30, 0x2f, 0x32, 0x35, 0x35,
|
0x20, 0x20, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x41, 0x2e, 0x72, 0x67, 0x62, 0x2d, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31,
|
||||||
0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x29, 0x3b, 0x02, 0x2d, 0x04, 0x00, 0x00,
|
0x36, 0x2e, 0x30, 0x2f, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20,
|
||||||
0x26, 0x00, 0x00, 0x00, 0x01, 0x8c, 0x23, 0x65, 0x6c, 0x73, 0x65, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x59, 0x43, 0x62,
|
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20, 0x3d, 0x20, 0x59,
|
||||||
0x43, 0x72, 0x41, 0x2e, 0x72, 0x67, 0x62, 0x2d, 0x3d, 0x68, 0x61, 0x6c, 0x66, 0x33, 0x28, 0x31, 0x36, 0x2e, 0x30,
|
0x43, 0x62, 0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x2a, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72,
|
||||||
0x2f, 0x32, 0x35, 0x35, 0x2e, 0x30, 0x2c, 0x30, 0x2e, 0x35, 0x2c, 0x30, 0x2e, 0x35, 0x29, 0x3b, 0x0d, 0x0a, 0x20,
|
0x41, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f,
|
||||||
0x20, 0x20, 0x67, 0x6c, 0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x72, 0x67, 0x62, 0x20,
|
0x72, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b, 0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x7d, 0x0d,
|
||||||
0x3d, 0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x32, 0x52, 0x47, 0x42, 0x4d, 0x61, 0x74, 0x72, 0x69, 0x78, 0x20, 0x2a,
|
0x0a};
|
||||||
0x20, 0x59, 0x43, 0x62, 0x43, 0x72, 0x41, 0x2e, 0x72, 0x67, 0x62, 0x3b, 0x0d, 0x0a, 0x20, 0x20, 0x20, 0x67, 0x6c,
|
|
||||||
0x5f, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x2e, 0x61, 0x20, 0x3d, 0x20, 0x31, 0x2e, 0x30, 0x3b,
|
|
||||||
0x0d, 0x0a, 0x23, 0x65, 0x6e, 0x64, 0x69, 0x66, 0x0d, 0x0a, 0x7d, 0x0d, 0x0a};
|
|
||||||
|
|
||||||
ShaderFilesToPatch tooSpicyShaderPatches[] = {
|
ShaderFilesToPatch tooSpicyShaderPatches[] = {{toospicyFileName_0, toospicyPatchSize_0, toospicyPatchBuffer_0, 0, ""},
|
||||||
{toospicyFileName_0, toospicyPatchSize_0, toospicyPatchBuffer_0, 0, ""},
|
{toospicyFileName_1, toospicyPatchSize_1, toospicyPatchBuffer_1, 0, ""},
|
||||||
{toospicyFileName_1, toospicyPatchSize_1, toospicyPatchBuffer_1, 0, ""},
|
{toospicyFileName_2, toospicyPatchSize_2, toospicyPatchBuffer_2, 0, ""},
|
||||||
{toospicyFileName_2, toospicyPatchSize_2, toospicyPatchBuffer_2, 0, ""},
|
{toospicyFileName_3, toospicyPatchSize_3, toospicyPatchBuffer_3, 0, ""},
|
||||||
{toospicyFileName_3, toospicyPatchSize_3, toospicyPatchBuffer_3, 0, ""},
|
{toospicyFileName_4, toospicyPatchSize_4, toospicyPatchBuffer_4, 0, ""},
|
||||||
{toospicyFileName_4, toospicyPatchSize_4, toospicyPatchBuffer_4, 0, ""},
|
{toospicyFileName_5, toospicyPatchSize_5, toospicyPatchBuffer_5, 0, ""},
|
||||||
{toospicyFileName_5, toospicyPatchSize_5, toospicyPatchBuffer_5, 0, ""},
|
{toospicyFileName_6, toospicyPatchSize_6, toospicyPatchBuffer_6, 0, ""},
|
||||||
{toospicyFileName_6, toospicyPatchSize_6, toospicyPatchBuffer_6, 0, ""},
|
{toospicyFileName_7, toospicyPatchSize_7, toospicyPatchBuffer_7, 0, ""},
|
||||||
{toospicyFileName_7, toospicyPatchSize_7, toospicyPatchBuffer_7, 0, ""},
|
{toospicyFileName_8, toospicyPatchSize_8, toospicyPatchBuffer_8, 0, ""},
|
||||||
{toospicyFileName_8, toospicyPatchSize_8, toospicyPatchBuffer_8, 0, ""},
|
{toospicyFileName_9, toospicyPatchSize_9, toospicyPatchBuffer_9, 0, ""},
|
||||||
{toospicyFileName_9, toospicyPatchSize_9, toospicyPatchBuffer_9, 0, ""},
|
{toospicyFileName_10, toospicyPatchSize_10, toospicyPatchBuffer_10, 0, ""},
|
||||||
{toospicyFileName_10, toospicyPatchSize_10, toospicyPatchBuffer_10, 0, ""},
|
{toospicyFileName_11, toospicyPatchSize_11, toospicyPatchBuffer_11, 0, ""},
|
||||||
{toospicyFileName_11, toospicyPatchSize_11, toospicyPatchBuffer_11, 0, ""},
|
{toospicyFileName_12, toospicyPatchSize_12, toospicyPatchBuffer_12, 0, ""},
|
||||||
{toospicyFileName_12, toospicyPatchSize_12, toospicyPatchBuffer_12, 0, ""},
|
{toospicyFileName_13, toospicyPatchSize_13, toospicyPatchBuffer_13, 0, ""},
|
||||||
{toospicyFileName_13, toospicyPatchSize_13, toospicyPatchBuffer_13, 0, ""},
|
{toospicyFileName_14, toospicyPatchSize_14, toospicyPatchBuffer_14, 0, ""},
|
||||||
{toospicyFileName_14, toospicyPatchSize_14, toospicyPatchBuffer_14, 0, ""},
|
{toospicyFileName_15, toospicyPatchSize_15, toospicyPatchBuffer_15, 0, ""},
|
||||||
{toospicyFileName_15, toospicyPatchSize_15, toospicyPatchBuffer_15, 0, ""},
|
{toospicyFileName_16, toospicyPatchSize_16, toospicyPatchBuffer_16, 0, ""},
|
||||||
{toospicyFileName_16, toospicyPatchSize_16, toospicyPatchBuffer_16, 0, ""},
|
{toospicyFileName_17, toospicyPatchSize_17, toospicyPatchBuffer_17, 0, ""},
|
||||||
{toospicyFileName_17, toospicyPatchSize_17, toospicyPatchBuffer_17, 0, ""},
|
{toospicyFileName_18, toospicyPatchSize_18, toospicyPatchBuffer_18, 0, ""},
|
||||||
{toospicyFileName_18, toospicyPatchSize_18, toospicyPatchBuffer_18, 0, ""},
|
{toospicyFileName_19, toospicyPatchSize_19, toospicyPatchBuffer_19, 0, ""},
|
||||||
{toospicyFileName_19, toospicyPatchSize_19, toospicyPatchBuffer_19, 0, ""},
|
{toospicyFileName_20, toospicyPatchSize_20, toospicyPatchBuffer_20, 0, ""},
|
||||||
{toospicyFileName_20, toospicyPatchSize_20, toospicyPatchBuffer_20, 0, ""},
|
{toospicyFileName_21, toospicyPatchSize_21, toospicyPatchBuffer_21, 0, ""},
|
||||||
{toospicyFileName_21, toospicyPatchSize_21, toospicyPatchBuffer_21, 0, ""},
|
{toospicyFileName_22, toospicyPatchSize_22, toospicyPatchBuffer_22, 0, ""},
|
||||||
{toospicyFileName_22, toospicyPatchSize_22, toospicyPatchBuffer_22, 0, ""},
|
{toospicyFileName_23, toospicyPatchSize_23, toospicyPatchBuffer_23, 0, ""}};
|
||||||
{toospicyFileName_23, toospicyPatchSize_23, toospicyPatchBuffer_23, 0, ""}};
|
|
||||||
|
|
||||||
int tooSpicyShaderPatchesCount = sizeof(tooSpicyShaderPatches) / sizeof(ShaderFilesToPatch);
|
int tooSpicyShaderPatchesCount = sizeof(tooSpicyShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef ABC_H
|
|
||||||
#define ABC_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// Fragment ABC
|
// Fragment ABC
|
||||||
@@ -63,5 +61,3 @@ SearchReplace abcVsMesa[] = {{"OPTION NV_vertex_program3;", "#OPTION NV_vertex_p
|
|||||||
{"skinning_end:", " "}};
|
{"skinning_end:", " "}};
|
||||||
|
|
||||||
int abcVsMesaCount = sizeof(abcVsMesa) / sizeof(SearchReplace);
|
int abcVsMesaCount = sizeof(abcVsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef GSEVO_H
|
|
||||||
#define GSEVO_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ElfShaderOffsets gsevoElfShaderOffsets[] = {
|
ElfShaderOffsets gsevoElfShaderOffsets[] = {
|
||||||
@@ -1194,5 +1191,3 @@ ShaderFilesToPatch gsevoNvidiaShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int gsevoShaderPatchesCount = 4;
|
int gsevoShaderPatchesCount = 4;
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef HARLEY_H
|
|
||||||
#define HARLEY_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: 16box.frag
|
// File: 16box.frag
|
||||||
@@ -1191,5 +1189,3 @@ ShaderFilesToPatch harleyShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int harleyShaderPatchesCount = sizeof(harleyShaderPatches) / sizeof(ShaderFilesToPatch);
|
int harleyShaderPatchesCount = sizeof(harleyShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,4 @@
|
|||||||
#ifndef HOD4_H
|
#pragma once
|
||||||
#define HOD4_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: DoF.dat1
|
// File: DoF.dat1
|
||||||
@@ -324,5 +322,3 @@ ShaderFilesToPatch hod4ShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int hod4ShaderPatchesCount = sizeof(hod4ShaderPatches) / sizeof(ShaderFilesToPatch);
|
int hod4ShaderPatchesCount = sizeof(hod4ShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef HOD4SP_H
|
|
||||||
#define HOD4SP_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include "hod4.h"
|
#include "hod4.h"
|
||||||
|
|
||||||
@@ -163,5 +160,3 @@ ShaderFilesToPatch hod4spShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int hod4spShaderPatchesCount = sizeof(hod4spShaderPatches) / sizeof(ShaderFilesToPatch);
|
int hod4spShaderPatchesCount = sizeof(hod4spShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef HODEX_H
|
|
||||||
#define HODEX_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: average.frag
|
// File: average.frag
|
||||||
@@ -286,5 +283,3 @@ ShaderFilesToPatch hodexShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int hodexShaderPatchesCount = sizeof(hodexShaderPatches) / sizeof(ShaderFilesToPatch);
|
int hodexShaderPatchesCount = sizeof(hodexShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef HUMMER_H
|
|
||||||
#define HUMMER_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
int hummerExtremeShaderFileIndex;
|
int hummerExtremeShaderFileIndex;
|
||||||
@@ -43,5 +40,4 @@ SearchReplace hummerShaderReplaceFlicker[] = {
|
|||||||
{"#pragma optionNV(fastmath on)", "#pragma optionNV(fastmath off)"},
|
{"#pragma optionNV(fastmath on)", "#pragma optionNV(fastmath off)"},
|
||||||
{"#pragma optionNV(fastprecision on)", "#pragma optionNV(fastprecision off)"}};
|
{"#pragma optionNV(fastprecision on)", "#pragma optionNV(fastprecision off)"}};
|
||||||
|
|
||||||
int hummerShaderReplaceFlickerCount = sizeof(hummerShaderReplaceFlicker) / sizeof(SearchReplace);
|
int hummerShaderReplaceFlickerCount = sizeof(hummerShaderReplaceFlicker) / sizeof(SearchReplace);
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef ID_H
|
|
||||||
#define ID_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ShaderFilesToMod idShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
ShaderFilesToMod idShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
||||||
@@ -63,5 +60,3 @@ SearchReplace id5ShaderReplaceSetForSmoke[] = {
|
|||||||
"0.5h);\nh4OutputColor.a = 0.2h;\n#else\nh4OutputColor.a = h4Color_ColorMap.a;\n#endif"}};
|
"0.5h);\nh4OutputColor.a = 0.2h;\n#else\nh4OutputColor.a = h4Color_ColorMap.a;\n#endif"}};
|
||||||
|
|
||||||
int id5ShaderReplaceSetForSmokeCount = sizeof(id5ShaderReplaceSetForSmoke) / sizeof(SearchReplace);
|
int id5ShaderReplaceSetForSmokeCount = sizeof(id5ShaderReplaceSetForSmoke) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef LGJ_H
|
|
||||||
#define LGJ_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ShaderFilesToMod lgjShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
ShaderFilesToMod lgjShaderFilesToMod[] = {{"/shader/Cg/inc/es_shd_base.cg", 0, ""},
|
||||||
@@ -26,5 +23,3 @@ SearchReplace lgjCompiledShadersPatch[] = {
|
|||||||
{"TEX R0.x, R0, texture[0], SHADOW2D;", "TEX R0.x, R0, texture[0], 2D;"}};
|
{"TEX R0.x, R0, texture[0], SHADOW2D;", "TEX R0.x, R0, texture[0], 2D;"}};
|
||||||
|
|
||||||
int lgjCompiledShadersPatchCount = sizeof(lgjCompiledShadersPatch) / sizeof(SearchReplace);
|
int lgjCompiledShadersPatchCount = sizeof(lgjCompiledShadersPatch) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef MJ4_H
|
|
||||||
#define MJ$_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// Fragment
|
// Fragment
|
||||||
@@ -315,5 +312,3 @@ SearchReplace mj4VsMesa[] = {{"OPTION NV_vertex_program3;", "#OPTION NV_vertex_p
|
|||||||
{"SEQC", "#SEQC "}};
|
{"SEQC", "#SEQC "}};
|
||||||
|
|
||||||
int mj4VsMesaCount = sizeof(mj4VsMesa) / sizeof(SearchReplace);
|
int mj4VsMesaCount = sizeof(mj4VsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef OR2_H
|
|
||||||
#define OR2_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
SearchReplace orFsMesa[] = {
|
SearchReplace orFsMesa[] = {
|
||||||
@@ -123,5 +120,3 @@ SearchReplace orVsAti[] = {{"!!VP2.0\nBB1:\n",
|
|||||||
{"v10", "vertex.attrib[10]"}};
|
{"v10", "vertex.attrib[10]"}};
|
||||||
|
|
||||||
int orVsAtiCount = sizeof(orVsAti) / sizeof(SearchReplace);
|
int orVsAtiCount = sizeof(orVsAti) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef PRIMEVAL_H
|
|
||||||
#define PRIMEVAL_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: nnstdshader.frag
|
// File: nnstdshader.frag
|
||||||
@@ -90,5 +87,3 @@ ShaderFilesToPatch phShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int phShaderPatchesCount = sizeof(phShaderPatches) / sizeof(ShaderFilesToPatch);
|
int phShaderPatchesCount = sizeof(phShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef RAMBO_H
|
|
||||||
#define RAMBO_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// File: 16box.frag
|
// File: 16box.frag
|
||||||
@@ -1661,5 +1658,3 @@ ShaderFilesToPatch ramboNvidiaShaderPatches[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
int ramboNvidiaShaderPatchesCount = sizeof(ramboNvidiaShaderPatches) / sizeof(ShaderFilesToPatch);
|
int ramboNvidiaShaderPatchesCount = sizeof(ramboNvidiaShaderPatches) / sizeof(ShaderFilesToPatch);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,5 +1,3 @@
|
|||||||
#ifndef RTUNED_H
|
|
||||||
#define RTUNED_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
// Fragment
|
// Fragment
|
||||||
@@ -155,5 +153,3 @@ SearchReplace rtunedVsMesa[] = {
|
|||||||
{"DP3_SAT diff.w, normal_w, tmp;", "DP3 diff.w, normal_w, tmp;MAX diff.w, diff.w, 0.0;MIN diff.w, diff.w, 1.0;"}};
|
{"DP3_SAT diff.w, normal_w, tmp;", "DP3 diff.w, normal_w, tmp;MAX diff.w, diff.w, 0.0;MIN diff.w, diff.w, 1.0;"}};
|
||||||
|
|
||||||
int rtunedVsMesaCount = sizeof(rtunedVsMesa) / sizeof(SearchReplace);
|
int rtunedVsMesaCount = sizeof(rtunedVsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include "2spicy.h"
|
|
||||||
#include "abc.h"
|
|
||||||
#include "gsevo.h"
|
|
||||||
#include "harley.h"
|
|
||||||
#include "hod4.h"
|
|
||||||
#include "hod4sp.h"
|
|
||||||
#include "hodex.h"
|
|
||||||
#include "hummer.h"
|
|
||||||
#include "id.h"
|
|
||||||
#include "lgj.h"
|
|
||||||
#include "mj4.h"
|
|
||||||
#include "or2.h"
|
|
||||||
#include "primeval.h"
|
|
||||||
#include "rambo.h"
|
|
||||||
#include "rtuned.h"
|
|
||||||
#include "srtv.h"
|
|
||||||
#include "vf5.h"
|
|
||||||
#include "vt3.h"
|
|
||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef SRTV_H
|
|
||||||
#define SRTV_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ElfShaderOffsets srtvElfShaderOffsets[] = {
|
ElfShaderOffsets srtvElfShaderOffsets[] = {
|
||||||
@@ -168,5 +165,3 @@ dec_retio_list_1[4] = nngluUserUniform[KL_USER_UNIFORM_INDEX_DIRT1].z;\r\n\t\t\t
|
|||||||
dec_retio_list_1[5] = nngluUserUniform[KL_USER_UNIFORM_INDEX_DIRT1].w;\r\n"}};
|
dec_retio_list_1[5] = nngluUserUniform[KL_USER_UNIFORM_INDEX_DIRT1].w;\r\n"}};
|
||||||
|
|
||||||
int srtvVsMesaCount = sizeof(srtvVsMesa) / sizeof(SearchReplace);
|
int srtvVsMesaCount = sizeof(srtvVsMesa) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,7 +1,4 @@
|
|||||||
#ifndef VF5_H
|
|
||||||
#define VF5_H
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
#include <stdbool.h>
|
|
||||||
|
|
||||||
// Fragment
|
// Fragment
|
||||||
SearchReplace vf5FsMesa[] = {
|
SearchReplace vf5FsMesa[] = {
|
||||||
@@ -400,5 +397,3 @@ Vf5StagesList vf5StageList[] = {{"are", "Arena", true},
|
|||||||
{"yuk", "Snow Mountain", false}};
|
{"yuk", "Snow Mountain", false}};
|
||||||
|
|
||||||
int vf5StageListCount = sizeof(vf5StageList) / sizeof(Vf5StagesList);
|
int vf5StageListCount = sizeof(vf5StageList) / sizeof(Vf5StagesList);
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -1,6 +1,3 @@
|
|||||||
#ifndef VT3_H
|
|
||||||
#define VT3_H
|
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
ShaderFilesToMod vt3ShaderFilesToMod[] = {{"/shader/baka.fx", 0, ""}, {"/shader/main_p.fx", 0, ""},
|
ShaderFilesToMod vt3ShaderFilesToMod[] = {{"/shader/baka.fx", 0, ""}, {"/shader/main_p.fx", 0, ""},
|
||||||
@@ -21,5 +18,3 @@ SearchReplace vt3ShaderReplaceSet2[] = {{"POSITION0", "ATTR0"}, {"COLOR", "ATT
|
|||||||
{"BLENDWEIGHT", "ATTR1"}, {"BLENDINDICES", "ATTR7"}};
|
{"BLENDWEIGHT", "ATTR1"}, {"BLENDINDICES", "ATTR7"}};
|
||||||
|
|
||||||
int vt3ShaderReplaceCount2 = sizeof(vt3ShaderReplaceSet2) / sizeof(SearchReplace);
|
int vt3ShaderReplaceCount2 = sizeof(vt3ShaderReplaceSet2) / sizeof(SearchReplace);
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -702,14 +702,14 @@ static int stbi__sse2_available()
|
|||||||
|
|
||||||
static int stbi__sse2_available()
|
static int stbi__sse2_available()
|
||||||
{
|
{
|
||||||
#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later
|
// #if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__) >= 408 // GCC 4.8 or later
|
||||||
// GCC 4.8+ has a nice way to do this
|
// // GCC 4.8+ has a nice way to do this
|
||||||
return __builtin_cpu_supports("sse2");
|
// return __builtin_cpu_supports("sse2");
|
||||||
#else
|
// #else
|
||||||
// portable way to do this, preferably without using GCC inline ASM?
|
// portable way to do this, preferably without using GCC inline ASM?
|
||||||
// just bail for now.
|
// just bail for now.
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
// #endif
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -0,0 +1,85 @@
|
|||||||
|
#include <SDL2/SDL_events.h>
|
||||||
|
#include <X11/X.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
char phSendBuf[10];
|
||||||
|
bool phBufferFilled = false;
|
||||||
|
int phCommand = 1;
|
||||||
|
int phCommandByte = 0;
|
||||||
|
uint16_t coordX;
|
||||||
|
uint16_t coordY;
|
||||||
|
#define TOUCH_START 0x81
|
||||||
|
#define TOUCH_TOUCHING 0x82
|
||||||
|
#define TOUCH_END 0x84
|
||||||
|
|
||||||
|
void phCoordinates(int x, int y, int w, int h, int button)
|
||||||
|
{
|
||||||
|
coordX = (float)x / ((float)w * 0.0002441406);
|
||||||
|
coordY = (float)y / ((float)h * 0.0002441406);
|
||||||
|
memset(phSendBuf, 0, sizeof(phSendBuf));
|
||||||
|
|
||||||
|
if (button == SDL_MOUSEBUTTONDOWN || button == ButtonPress)
|
||||||
|
{
|
||||||
|
phSendBuf[2] = TOUCH_START;
|
||||||
|
phCommand = 1;
|
||||||
|
}
|
||||||
|
else if (button == SDL_MOUSEBUTTONUP || button == ButtonRelease)
|
||||||
|
{
|
||||||
|
phSendBuf[2] = TOUCH_END;
|
||||||
|
phCommand = 3;
|
||||||
|
}
|
||||||
|
else if (button == SDL_MOUSEMOTION || button == MotionNotify)
|
||||||
|
{
|
||||||
|
phSendBuf[2] = TOUCH_TOUCHING;
|
||||||
|
phCommand = 2;
|
||||||
|
}
|
||||||
|
phSendBuf[0] = 0x55;
|
||||||
|
phSendBuf[1] = 0x54;
|
||||||
|
phSendBuf[3] = (char)(coordX & 0xFF);
|
||||||
|
phSendBuf[4] = (char)((coordX >> 8) & 0xff);
|
||||||
|
phSendBuf[5] = (char)(coordY & 0xFF);
|
||||||
|
phSendBuf[6] = (char)((coordY >> 8) & 0xff);
|
||||||
|
|
||||||
|
phBufferFilled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t phCalcChecksum()
|
||||||
|
{
|
||||||
|
int8_t checksum = -0x56;
|
||||||
|
for (int x = 0; x < 9;x++)
|
||||||
|
{
|
||||||
|
checksum += phSendBuf[x];
|
||||||
|
}
|
||||||
|
return (uint8_t)(checksum & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
ssize_t phRead(int fd, void *buf, size_t count)
|
||||||
|
{
|
||||||
|
if(!phBufferFilled)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
|
||||||
|
if(phCommandByte == 9)
|
||||||
|
{
|
||||||
|
switch (phCommand)
|
||||||
|
{
|
||||||
|
case 1:
|
||||||
|
phCommand = 2;
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
phSendBuf[2] = TOUCH_TOUCHING;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
phBufferFilled = false;
|
||||||
|
}
|
||||||
|
phSendBuf[9] = phCalcChecksum();
|
||||||
|
}
|
||||||
|
memcpy(buf, &phSendBuf[phCommandByte], sizeof(char));
|
||||||
|
phCommandByte++;
|
||||||
|
if (phCommandByte == 10)
|
||||||
|
phCommandByte = 0;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
void phCoordinates(int x, int y, int w, int h, int button);
|
||||||
|
ssize_t phRead(int fd, void *buf, size_t count);
|
||||||
@@ -1,8 +1,3 @@
|
|||||||
#ifndef VERSION_H
|
|
||||||
#define VERSION_H
|
|
||||||
|
|
||||||
// Common file to hold the version information
|
// Common file to hold the version information
|
||||||
#define MAJOR_VERSION 2
|
#define MAJOR_VERSION 2
|
||||||
#define MINOR_VERSION 0
|
#define MINOR_VERSION 0
|
||||||
|
|
||||||
#endif // VERSION_H
|
|
||||||
+25
-47
@@ -19,6 +19,7 @@
|
|||||||
#include "securityboard.h"
|
#include "securityboard.h"
|
||||||
#include "fps_limiter.h"
|
#include "fps_limiter.h"
|
||||||
#include "sdlcalls.h"
|
#include "sdlcalls.h"
|
||||||
|
#include "customcursor.h"
|
||||||
|
|
||||||
extern bool SDLWindowCreated;
|
extern bool SDLWindowCreated;
|
||||||
extern bool gettingGPUVendor;
|
extern bool gettingGPUVendor;
|
||||||
@@ -26,11 +27,14 @@ extern bool GLUTGame;
|
|||||||
|
|
||||||
bool creatingWindow = false;
|
bool creatingWindow = false;
|
||||||
|
|
||||||
Window win;
|
Window window;
|
||||||
|
|
||||||
extern Display *x11Display;
|
extern Display *x11Display;
|
||||||
extern Window x11Window;
|
extern Window x11Window;
|
||||||
|
|
||||||
|
extern void *customCursor;
|
||||||
|
extern void *phTouchCursor;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stop the house of the dead games turning keyboard repeating off.
|
* Stop the house of the dead games turning keyboard repeating off.
|
||||||
*/
|
*/
|
||||||
@@ -42,12 +46,17 @@ int XAutoRepeatOff(Display *display)
|
|||||||
Display *XOpenDisplay(const char *display_name)
|
Display *XOpenDisplay(const char *display_name)
|
||||||
{
|
{
|
||||||
Display *(*_XOpenDisplay)(const char *display_name) = dlsym(RTLD_NEXT, "XOpenDisplay");
|
Display *(*_XOpenDisplay)(const char *display_name) = dlsym(RTLD_NEXT, "XOpenDisplay");
|
||||||
if (SDLWindowCreated || gettingGPUVendor || GLUTGame || getConfig()->noSDL)
|
|
||||||
return _XOpenDisplay(display_name);
|
|
||||||
|
|
||||||
creatingWindow = true;
|
if (SDLWindowCreated || gettingGPUVendor || getConfig()->noSDL)
|
||||||
initSDL(0, 0);
|
{
|
||||||
creatingWindow = false;
|
x11Display = _XOpenDisplay(display_name);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
creatingWindow = true;
|
||||||
|
initSDL(0, 0);
|
||||||
|
creatingWindow = false;
|
||||||
|
}
|
||||||
return x11Display;
|
return x11Display;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,19 +70,16 @@ Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int
|
|||||||
|
|
||||||
if ((gettingGPUVendor || creatingWindow) || (GLUTGame && getConfig()->noSDL == 0))
|
if ((gettingGPUVendor || creatingWindow) || (GLUTGame && getConfig()->noSDL == 0))
|
||||||
{
|
{
|
||||||
Window window = _XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual,
|
window = _XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual, valueMask, attributes);
|
||||||
valueMask, attributes);
|
|
||||||
return window;
|
|
||||||
}
|
}
|
||||||
|
else if (getConfig()->noSDL)
|
||||||
if (getConfig()->noSDL)
|
|
||||||
{
|
{
|
||||||
width = getConfig()->width;
|
width = getConfig()->width;
|
||||||
height = getConfig()->height;
|
height = getConfig()->height;
|
||||||
|
|
||||||
attributes->event_mask = attributes->event_mask | KeyPressMask | KeyReleaseMask | PointerMotionMask;
|
attributes->event_mask = attributes->event_mask | KeyPressMask | KeyReleaseMask | PointerMotionMask;
|
||||||
|
|
||||||
Window window = _XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual, valueMask, attributes);
|
window = _XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual, valueMask, attributes);
|
||||||
printf(" X11 RESOLUTION: %dx%d\n\n", width, height);
|
printf(" X11 RESOLUTION: %dx%d\n\n", width, height);
|
||||||
|
|
||||||
if (getConfig()->fullscreen)
|
if (getConfig()->fullscreen)
|
||||||
@@ -82,13 +88,17 @@ Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int
|
|||||||
Atom wm_fullscreen = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", true);
|
Atom wm_fullscreen = XInternAtom(display, "_NET_WM_STATE_FULLSCREEN", true);
|
||||||
XChangeProperty(display, window, wm_state, XA_ATOM, 32, PropModeReplace, (unsigned char *)&wm_fullscreen, 1);
|
XChangeProperty(display, window, wm_state, XA_ATOM, 32, PropModeReplace, (unsigned char *)&wm_fullscreen, 1);
|
||||||
}
|
}
|
||||||
win = window;
|
x11Window = window;
|
||||||
|
loadCursors();
|
||||||
|
setCursor(customCursor);
|
||||||
|
if (getConfig()->hideCursor)
|
||||||
|
hideCursor();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
win = x11Window;
|
window = x11Window;
|
||||||
}
|
}
|
||||||
return win;
|
return window;
|
||||||
}
|
}
|
||||||
|
|
||||||
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,
|
||||||
@@ -203,38 +213,6 @@ int XF86VidModeGetAllModeLines(Display *display, int screen, int *modecount_retu
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Cursor XCreatePixmapCursor(Display *display, Pixmap source, Pixmap mask, XColor *fg, XColor *bg, unsigned int x,
|
|
||||||
// unsigned int y)
|
|
||||||
// {
|
|
||||||
// int (*_XCreatePixmapCursor)(Display *display, Pixmap source, Pixmap mask, XColor *fg, XColor *bg, unsigned int x,
|
|
||||||
// unsigned int y) = dlsym(RTLD_NEXT, "XCreatePixmapCursor");
|
|
||||||
// if (SDLGame)
|
|
||||||
// return 0;
|
|
||||||
// return _XCreatePixmapCursor(display, source, mask, fg, bg, x, y);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// int XFreePixmap(Display *display, Pixmap pixmap)
|
|
||||||
// {
|
|
||||||
// int (*_XFreePixmap)(Display *display, Pixmap pixmap) = dlsym(RTLD_NEXT, "XFreePixmap");
|
|
||||||
// if (SDLGame)
|
|
||||||
// return 0;
|
|
||||||
// return _XFreePixmap(display, pixmap);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Pixmap XCreateBitmapFromData(Display *display, Drawable drawable, const char *data, unsigned int x, unsigned int y)
|
|
||||||
// {
|
|
||||||
// Pixmap (*_XCreateBitmapFromData)(Display *display, Drawable drawable, const char *data, unsigned int x,
|
|
||||||
// unsigned int y) = dlsym(RTLD_NEXT, "XCreateBitmapFromData");
|
|
||||||
// if (SDLGame)
|
|
||||||
// return 0;
|
|
||||||
// return _XCreateBitmapFromData(display, drawable, data, x, y);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// int XDefineCursor(Display *display, Window w, Cursor cursor)
|
|
||||||
// {
|
|
||||||
// return 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
typedef unsigned int uint;
|
typedef unsigned int uint;
|
||||||
|
|
||||||
void glGenFencesNV(int n, uint *fences)
|
void glGenFencesNV(int n, uint *fences)
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
#ifndef X11_H
|
|
||||||
#define X11_H
|
|
||||||
|
|
||||||
#endif
|
|
||||||
Reference in New Issue
Block a user