Compare commits

...
9 Commits
Author SHA1 Message Date
dkeruza ba51502fdb Fixed baseboard.c 2025-05-31 21:54:27 -04:00
dkeruza aedad4dcdf resolution.c bad 2025-05-31 21:34:16 -04:00
dkeruza 374ecd6e84 Merge pull request #110 from dkeruza-neo/master
A few fixes and additions.
2025-05-31 20:49:49 -04:00
dkeruza-neo f5c8c8c0f0 A couple additions and fixes. 2025-05-31 21:45:19 -03:00
dkeruza-neo 4d07faa251 freedesktop.org down. Changed url for libGLU. 2025-04-26 01:25:19 -03:00
dkeruza-neo 5558718f29 Various fixes, clean and window managing. 2025-04-26 01:10:23 -03:00
dkeruza-neo e9e62a3bd1 Get tag version from changelog. 2025-04-17 10:27:46 -03:00
dkeruza-neo 293b4e8c25 Test versioning. 2025-04-16 23:23:16 -03:00
dkeruza-neo 92eb48691d Test Build number 2025-04-15 22:54:32 -03:00
10 changed files with 160 additions and 55 deletions
+49 -8
View File
@@ -16,6 +16,7 @@ on:
- '**.md' - '**.md'
- '.github/ISSUE_TEMPLATE/*' - '.github/ISSUE_TEMPLATE/*'
- '.docs/changelog' - '.docs/changelog'
- '.github/workflows/*'
jobs: jobs:
linux-build: linux-build:
@@ -32,29 +33,69 @@ jobs:
name: 📤 Create Release name: 📤 Create Release
needs: [linux-build, linux-flatpak, linux-appimage] needs: [linux-build, linux-flatpak, linux-appimage]
runs-on: ubuntu-22.04 runs-on: ubuntu-22.04
if: github.ref == 'refs/heads/master' if: github.event_name == 'push' && github.ref == 'refs/heads/master'
steps: steps:
# Step 1: Checkout the code to access Git history and tags
- name: Checkout code
uses: actions/checkout@v4
with:
# Fetch all history and tags, necessary for git tag command
fetch-depth: 0
# Step 2: Download artifacts from previous build jobs
- name: Download Artifacts - name: Download Artifacts
uses: actions/download-artifact@v4 uses: actions/download-artifact@v4
with: with:
path: ./artifacts/ path: ./artifacts/
# Optional: Display downloaded artifacts for debugging
- name: Display Downloaded Artifacts - name: Display Downloaded Artifacts
run: find ./artifacts/ run: find ./artifacts/
- name: Add 161 to github.run_number # Step 3: Extract the latest version from changelog.md
- name: Extract Version from Changelog
id: get_version
run: | run: |
NEW_RUN_NUMBER=$(( ${{ github.run_number }} + 161 )) # Define the path to the changelog file (adjust if it's not at the root)
echo "NEW_RUN_NUMBER=$NEW_RUN_NUMBER" >> $GITHUB_ENV CHANGELOG_FILE="./docs/changelog"
- name: Create Preview Release echo "Attempting to extract version from $CHANGELOG_FILE..."
if: github.ref == 'refs/heads/master'
# Check if the changelog file exists
if [[ ! -f "$CHANGELOG_FILE" ]]; then
echo "Error: Changelog file '$CHANGELOG_FILE' not found."
exit 1
fi
VERSION=$(awk '/^## \[/ { match($0, /\[([^]]+)\]/, arr); print arr[1]; exit }' "$CHANGELOG_FILE")
# Check if a version was actually extracted
if [[ -z "$VERSION" ]]; then
echo "Error: Could not find version in '$CHANGELOG_FILE'. Expected format like '## [X.Y.Z]' near the top."
exit 1
fi
echo "Found version: $VERSION"
# Set environment variables for the release step
# RELEASE_TAG often includes a 'v' prefix, RELEASE_VERSION is the plain version
echo "RELEASE_VERSION=$VERSION" >> $GITHUB_ENV
echo "RELEASE_TAG=v$VERSION" >> $GITHUB_ENV # Add 'v' prefix for the tag
echo "Using tag: v$VERSION"
# Step 4: Create the release using the calculated tag
- name: Create Release
uses: "marvinpinto/action-automatic-releases@latest" uses: "marvinpinto/action-automatic-releases@latest"
with: with:
repo_token: "${{ secrets.GITHUB_TOKEN }}" repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: v${{ env.NEW_RUN_NUMBER }} # Use the environment variable set in the previous step
# automatic_release_tag: ${{ env.NEXT_TAG }}
automatic_release_tag: ${{ env.RELEASE_TAG }}
# Keep prerelease as false unless you want preview releases
prerelease: false prerelease: false
title: "Build v${{ env.NEW_RUN_NUMBER }}" # Update the title to use the new tag
# title: "Build ${{ env.NEXT_TAG }}"
title: "Build ${{ env.RELEASE_TAG }}"
files: | files: |
./artifacts/linux-flatpak/lindbergh-loader.flatpak ./artifacts/linux-flatpak/lindbergh-loader.flatpak
./artifacts/linux-build/build.tar.gz ./artifacts/linux-build/build.tar.gz
+1
View File
@@ -1,3 +1,4 @@
.cache
bld bld
build/ build/
test/ test/
+18
View File
@@ -2,6 +2,24 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## [2.0.14]
### Added
- Bobby's birthday checking!
- FPS target to float.
### Fixed
- a bub in config.c where MJ4_ENABLED_ALL_THE_TIME was using the wrong variable.
## [2.0.13]
### Added
- Clear window when the game is loading to prevent ghosting in SDL
- Prevent the created windows to resize/maximize.
- Version in github now matches the version in the changelog.
### Fixed
- Fixed a bug in Let's Go Jungle Special Resolution Patch.
- Cleaned unnecessary global variables in resolution.c
- Fixed a bug in that prevented the loader to start when the current folder contained spaces and lindbergh.so was there.
## [2.0.12] ## [2.0.12]
### Added ### Added
- AppImage support. - AppImage support.
@@ -72,7 +72,7 @@ modules:
x86_64: *i386-build-options x86_64: *i386-build-options
sources: sources:
- type: archive - type: archive
url: https://mesa.freedesktop.org/archive/glu/glu-9.0.2.tar.xz url: https://archive.mesa3d.org/glu/glu-9.0.2.tar.xz
sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4 sha256: 6e7280ff585c6a1d9dfcdf2fca489251634b3377bfc33c29e4002466a38d02d4
# Build 32-bit freeglut # Build 32-bit freeglut
+3 -3
View File
@@ -1238,7 +1238,7 @@ int readConfig(FILE *configFile, EmulatorConfig *config)
config->fpsLimiter = atoi(getNextToken(NULL, " ", &saveptr)); config->fpsLimiter = atoi(getNextToken(NULL, " ", &saveptr));
else if (strcmp(command, "FPS_TARGET") == 0) else if (strcmp(command, "FPS_TARGET") == 0)
config->fpsTarget = atoi(getNextToken(NULL, " ", &saveptr)); config->fpsTarget = atof(getNextToken(NULL, " ", &saveptr));
else if (strcmp(command, "LGJ_RENDER_WITH_MESA") == 0) else if (strcmp(command, "LGJ_RENDER_WITH_MESA") == 0)
config->lgjRenderWithMesa = atoi(getNextToken(NULL, " ", &saveptr)); config->lgjRenderWithMesa = atoi(getNextToken(NULL, " ", &saveptr));
@@ -1274,7 +1274,7 @@ int readConfig(FILE *configFile, EmulatorConfig *config)
config->phTouchCursorHeight = atoi(getNextToken(NULL, " ", &saveptr)); config->phTouchCursorHeight = atoi(getNextToken(NULL, " ", &saveptr));
else if (strcmp(command, "MJ4_ENABLED_ALL_THE_TIME") == 0) else if (strcmp(command, "MJ4_ENABLED_ALL_THE_TIME") == 0)
config->phMode = atoi(getNextToken(NULL, " ", &saveptr)); config->mj4EnabledAtT = atoi(getNextToken(NULL, " ", &saveptr));
else if (strcmp(command, "OR2_IP") == 0) else if (strcmp(command, "OR2_IP") == 0)
strcpy(config->or2IP, getNextToken(NULL, " ", &saveptr)); strcpy(config->or2IP, getNextToken(NULL, " ", &saveptr));
@@ -1567,7 +1567,7 @@ int initConfig(const char* configFilePath)
config.jvsIOType = SEGA_TYPE_3; config.jvsIOType = SEGA_TYPE_3;
config.GPUVendor = AUTO_DETECT_GPU; config.GPUVendor = AUTO_DETECT_GPU;
config.fpsLimiter = 0; config.fpsLimiter = 0;
config.fpsTarget = 60; config.fpsTarget = 60.0f;
config.noSDL = 0; config.noSDL = 0;
config.phMode = 2; config.phMode = 2;
config.disableBuiltinFont = 0; config.disableBuiltinFont = 0;
+1 -1
View File
@@ -261,7 +261,7 @@ typedef struct
int hummerFlickerFix; int hummerFlickerFix;
int keepAspectRatio; int keepAspectRatio;
int fpsLimiter; int fpsLimiter;
int fpsTarget; float fpsTarget;
int lgjRenderWithMesa; int lgjRenderWithMesa;
int noSDL; int noSDL;
int phMode; int phMode;
+3 -2
View File
@@ -240,14 +240,15 @@ char *findPreloadLibrary(const char *originalDir, const char *gameDir)
const char *folderCandidates[] = {"/app/lib32", appImageLib, originalDir, "/usr/lib/i386-linux-gnu", "/usr/lib/i686-linux-gnu", const char *folderCandidates[] = {"/app/lib32", appImageLib, originalDir, "/usr/lib/i386-linux-gnu", "/usr/lib/i686-linux-gnu",
"/usr/lib32", "/usr/lib", NULL}; "/usr/lib32", "/usr/lib", NULL};
if (fileExists(PRELOAD_FILE_NAME))
return PRELOAD_FILE_NAME;
for (int i = 0; i < sizeof(folderCandidates) / sizeof(folderCandidates[0]); i++) for (int i = 0; i < sizeof(folderCandidates) / sizeof(folderCandidates[0]); i++)
{ {
snprintf(result, MAX_PATH_LENGTH, "%s/%s", folderCandidates[i], PRELOAD_FILE_NAME); snprintf(result, MAX_PATH_LENGTH, "%s/%s", folderCandidates[i], PRELOAD_FILE_NAME);
if (fileExists(result)) if (fileExists(result))
return result; return result;
} }
if (fileExists(PRELOAD_FILE_NAME))
return PRELOAD_FILE_NAME;
return NULL; return NULL;
} }
+47 -39
View File
@@ -48,11 +48,6 @@ float newReducedWidthABC, newReducedHeightABC;
float newHalfWidthABC, newHalfHeightABC; float newHalfWidthABC, newHalfHeightABC;
float newWidthRangeABC, newHeightRangeABC; float newWidthRangeABC, newHeightRangeABC;
double new410ABC, new330ABC, new280ABC, new200ABC; double new410ABC, new330ABC, new280ABC, new200ABC;
uint32_t *newWidthRangePtr_CEI_ABC, *newHeightRangePtr_CEI_ABC;
uint32_t *newWidthPtrABC, *newHeightPtrABC;
uint32_t *newReducedWidthPtrABC, *newReducedHeightPtrABC;
uint32_t *newHalfWidthPtrABC, *newHalfHeightPtrABC;
uint32_t *new410PtrABC, *new330PtrABC, *new280PtrABC, *new200PtrABC;
float angleABC; float angleABC;
float newVT3, newVT3HW, newVT3HH; float newVT3, newVT3HW, newVT3HH;
@@ -68,6 +63,9 @@ int idTextShift = 0;
float id4NewCaptionY; float id4NewCaptionY;
float idShiftX = 0.0; float idShiftX = 0.0;
float isShiftY = 0.0; float isShiftY = 0.0;
float newHeightLGJ, newWidth2LGJ, newWidthHLGJ, newWidthSLGJ;
bool myEnableScaling = false; bool myEnableScaling = false;
int hummerRespatch() int hummerRespatch()
@@ -185,12 +183,14 @@ void glViewport(GLint x, GLint y, GLsizei width, GLsizei height)
case OUTRUN_2_SP_SDX_REVA_TEST: case OUTRUN_2_SP_SDX_REVA_TEST:
case OUTRUN_2_SP_SDX_REVA_TEST2: case OUTRUN_2_SP_SDX_REVA_TEST2:
{ {
if (gWidth != 800 && gHeight != 480)
{
if ((width >= 800) && (width != 1024))
{
width = gWidth; width = gWidth;
height = gHeight; height = gHeight;
}
}
} }
break; break;
@@ -292,23 +292,26 @@ void glTexImage2D(unsigned int target, int level, int internalformat, int width,
void (*_glTexImage2D)(unsigned int target, int level, int internalformat, int width, int height, int border, unsigned int format, void (*_glTexImage2D)(unsigned int target, int level, int internalformat, int width, int height, int border, unsigned int format,
unsigned int type, const void *pixels) = dlsym(RTLD_NEXT, "glTexImage2D"); unsigned int type, const void *pixels) = dlsym(RTLD_NEXT, "glTexImage2D");
if (gWidth != 800 && gHeight != 480)
{
switch (gId) switch (gId)
{ {
case OUTRUN_2_SP_SDX: case OUTRUN_2_SP_SDX:
case OUTRUN_2_SP_SDX_REVA: case OUTRUN_2_SP_SDX_REVA:
{ {
void *addr = __builtin_return_address(0); void *addr = __builtin_return_address(0);
if ((width >= 800) && (width != 1024) && (addr != (void *)0x80d78d5) && (addr != (void *)0x080d7941))
{
width = gWidth; width = gWidth;
height = gHeight; height = gHeight;
}
} }
break; break;
default: default:
break; break;
} }
_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels); }
_glTexImage2D(target, level, internalformat, width, height, border, format, type, pixels);
} }
void glTexParameteri(unsigned int target, unsigned int pname, int param) void glTexParameteri(unsigned int target, unsigned int pname, int param)
@@ -1057,15 +1060,15 @@ void patchABCMarkers(uint32_t addrCtrlEnemyInfo, uint32_t addrCtrlPlayerRivalFon
new280ABC = (gWidth / 2.0) - 40.0; // 280 new280ABC = (gWidth / 2.0) - 40.0; // 280
new200ABC = (gHeight / 2.0) - 40.0; // 200 new200ABC = (gHeight / 2.0) - 40.0; // 200
newWidthPtrABC = (uint32_t *)&newWidthABC; uint32_t *newWidthPtrABC = (uint32_t *)&newWidthABC;
newHeightPtrABC = (uint32_t *)&newHeightABC; uint32_t *newHeightPtrABC = (uint32_t *)&newHeightABC;
setVariable(addrCtrlPlayerRivalFont + 0x15b, (size_t)newWidthPtrABC); // 640 setVariable(addrCtrlPlayerRivalFont + 0x15b, (size_t)newWidthPtrABC); // 640
setVariable(addrCtrlPlayerRivalFont + 0x163, (size_t)newHeightPtrABC); // 480 setVariable(addrCtrlPlayerRivalFont + 0x163, (size_t)newHeightPtrABC); // 480
setVariable(addrCtrlEnemyPursuit2d + 0x80, (size_t)newWidthPtrABC); // 640 setVariable(addrCtrlEnemyPursuit2d + 0x80, (size_t)newWidthPtrABC); // 640
setVariable(addrCtrlEnemyPursuit2d + 0x88, (size_t)newHeightPtrABC); // 480 setVariable(addrCtrlEnemyPursuit2d + 0x88, (size_t)newHeightPtrABC); // 480
newReducedWidthPtrABC = (uint32_t *)&newReducedWidthABC; uint32_t *newReducedWidthPtrABC = (uint32_t *)&newReducedWidthABC;
newReducedHeightPtrABC = (uint32_t *)&newReducedHeightABC; uint32_t *newReducedHeightPtrABC = (uint32_t *)&newReducedHeightABC;
setVariable(addrCtrlPlayerRivalFont + 0x272, (size_t)newReducedWidthPtrABC); // 600 setVariable(addrCtrlPlayerRivalFont + 0x272, (size_t)newReducedWidthPtrABC); // 600
setVariable(addrCtrlPlayerRivalFont + 0x29f, (size_t)newReducedHeightPtrABC); // 440 setVariable(addrCtrlPlayerRivalFont + 0x29f, (size_t)newReducedHeightPtrABC); // 440
setVariable(addrCtrlPlayerRivalFont + 0x8ff, *(uint32_t *)&newReducedHeightABC); // 440 setVariable(addrCtrlPlayerRivalFont + 0x8ff, *(uint32_t *)&newReducedHeightABC); // 440
@@ -1076,8 +1079,8 @@ void patchABCMarkers(uint32_t addrCtrlEnemyInfo, uint32_t addrCtrlPlayerRivalFon
setVariable(addrCtrlEnemyPursuit2d + 0x7b3, *(uint32_t *)&newReducedHeightABC); // 440 setVariable(addrCtrlEnemyPursuit2d + 0x7b3, *(uint32_t *)&newReducedHeightABC); // 440
setVariable(addrCtrlEnemyPursuit2d + 0x812, *(uint32_t *)&newReducedHeightABC); // 440 setVariable(addrCtrlEnemyPursuit2d + 0x812, *(uint32_t *)&newReducedHeightABC); // 440
newHalfWidthPtrABC = (uint32_t *)&newHalfWidthABC; uint32_t *newHalfWidthPtrABC = (uint32_t *)&newHalfWidthABC;
newHalfHeightPtrABC = (uint32_t *)&newHalfHeightABC; uint32_t *newHalfHeightPtrABC = (uint32_t *)&newHalfHeightABC;
setVariable(addrCtrlPlayerRivalFont + 0x346, (size_t)newHalfWidthPtrABC); // 320 setVariable(addrCtrlPlayerRivalFont + 0x346, (size_t)newHalfWidthPtrABC); // 320
setVariable(addrCtrlPlayerRivalFont + 0x34e, (size_t)newHalfHeightPtrABC); // 240 setVariable(addrCtrlPlayerRivalFont + 0x34e, (size_t)newHalfHeightPtrABC); // 240
setVariable(addrCtrlPlayerRivalFont + 0x4cb, (size_t)newHalfWidthPtrABC); // 320 setVariable(addrCtrlPlayerRivalFont + 0x4cb, (size_t)newHalfWidthPtrABC); // 320
@@ -1103,10 +1106,10 @@ void patchABCMarkers(uint32_t addrCtrlEnemyInfo, uint32_t addrCtrlPlayerRivalFon
setVariable(addrCtrlEnemyPursuit2d + 0x4ea, *(uint32_t *)&newWidthRangeABC); // 730 setVariable(addrCtrlEnemyPursuit2d + 0x4ea, *(uint32_t *)&newWidthRangeABC); // 730
setVariable(addrCtrlEnemyPursuit2d + 0x77b, *(uint32_t *)&newHeightRangeABC); // 570 setVariable(addrCtrlEnemyPursuit2d + 0x77b, *(uint32_t *)&newHeightRangeABC); // 570
new410PtrABC = (uint32_t *)&new410ABC; uint32_t *new410PtrABC = (uint32_t *)&new410ABC;
new330PtrABC = (uint32_t *)&new330ABC; uint32_t *new330PtrABC = (uint32_t *)&new330ABC;
new280PtrABC = (uint32_t *)&new280ABC; uint32_t *new280PtrABC = (uint32_t *)&new280ABC;
new200PtrABC = (uint32_t *)&new200ABC; uint32_t *new200PtrABC = (uint32_t *)&new200ABC;
setVariable(addrCtrlPlayerRivalFont + 0x40e, (size_t)new410PtrABC); // 410 setVariable(addrCtrlPlayerRivalFont + 0x40e, (size_t)new410PtrABC); // 410
setVariable(addrCtrlPlayerRivalFont + 0x44a, (size_t)new330PtrABC); // 330 setVariable(addrCtrlPlayerRivalFont + 0x44a, (size_t)new330PtrABC); // 330
setVariable(addrCtrlPlayerRivalFont + 0x5de, (size_t)new280PtrABC); // 280 setVariable(addrCtrlPlayerRivalFont + 0x5de, (size_t)new280PtrABC); // 280
@@ -2431,23 +2434,18 @@ int initResolutionPatches()
setVariable(0x080d6ea0, gWidth); // 800 setVariable(0x080d6ea0, gWidth); // 800
setVariable(0x080d6eaa, gHeight); // 600 setVariable(0x080d6eaa, gHeight); // 600
patchMemory(0x08303c27, "01"); // FSAA
setVariable(0x080cf6ac, gWidth); // 800 newHeightLGJ = (float)gHeight;
setVariable(0x080cf6b9, gHeight); // 600
patchMemory(0x08303c27, "01"); // FSAA
float newWidthLGJ = (float)gWidth;
float newHeightLGJ = (float)gHeight;
uint32_t *newWidthPtrLGJ = (uint32_t *)&newWidthLGJ;
uint32_t *newHeightPtrLGJ = (uint32_t *)&newHeightLGJ; uint32_t *newHeightPtrLGJ = (uint32_t *)&newHeightLGJ;
float newWidth2LGJ = (float)gWidth * 2.0; newWidth2LGJ = (float)gWidth * 2.0;
uint32_t *newWidth2PtrLGJ = (uint32_t *)&newWidth2LGJ; uint32_t *newWidth2PtrLGJ = (uint32_t *)&newWidth2LGJ;
unsigned int address = 0x080cb730; unsigned int address = 0x080cb730;
float newWidthHLGJ = (float)gWidth / 2.0; newWidthHLGJ = (float)gWidth / 2.0;
uint32_t *newWidthHPtrLGJ = (uint32_t *)&newWidthHLGJ; uint32_t *newWidthHPtrLGJ = (uint32_t *)&newWidthHLGJ;
float newWidthSLGJ = 1360.0 / (float)gWidth; newWidthSLGJ = 1360.0 / (float)gWidth;
uint32_t *newWidthSPtrLGJ = (uint32_t *)&newWidthSLGJ; uint32_t *newWidthSPtrLGJ = (uint32_t *)&newWidthSLGJ;
unsigned int addressC = 0x080cb3be; unsigned int addressC = 0x080cb3be;
@@ -2481,15 +2479,19 @@ int initResolutionPatches()
break; break;
case OUTRUN_2_SP_SDX: case OUTRUN_2_SP_SDX:
{ {
if (gWidth <= 800 && gHeight <= 480)
break;
// If resolution is not the native of the game this patch kind of fix the Sun when the LensGlare effect is
// shown.
if ((gWidth > 800) && (gHeight > 480))
{
patchMemory(0x080e8e72, "9090909090"); // removes a call to a light function patchMemory(0x080e8e72, "9090909090"); // removes a call to a light function
patchMemory(0x080e8e83, "9090909090"); // removes a call to a light function patchMemory(0x080e8e83, "9090909090"); // removes a call to a light function
if (!getConfig()->outrunLensGlareEnabled) if (!getConfig()->outrunLensGlareEnabled)
{ {
detourFunction(0x080e8b34, stubReturn); // Completely disables the lens glare effect detourFunction(0x080e8b34, stubReturn); // Completely disables the lens glare effect
} }
}
setVariable(0x080b913a, 0x44200000); setVariable(0x080b913a, 0x44200000);
setVariable(0x081dae28, 0x44200000); setVariable(0x081dae28, 0x44200000);
setVariable(0x081dae30, 0x44200000); setVariable(0x081dae30, 0x44200000);
@@ -2503,14 +2505,19 @@ int initResolutionPatches()
break; break;
case OUTRUN_2_SP_SDX_REVA: case OUTRUN_2_SP_SDX_REVA:
{ {
if (gWidth <= 800 && gHeight <= 480)
break;
// If resolution is not the native of the game this patch kind of fix the Sun when the LensGlare effect is
// shown.
if ((gWidth > 800) && (gHeight > 480))
{
patchMemory(0x080e8e06, "9090909090"); // removes a call to a light function patchMemory(0x080e8e06, "9090909090"); // removes a call to a light function
patchMemory(0x080e8e17, "9090909090"); // removes a call to a light function patchMemory(0x080e8e17, "9090909090"); // removes a call to a light function
if (!getConfig()->outrunLensGlareEnabled) if (!getConfig()->outrunLensGlareEnabled)
{ {
detourFunction(0x080e8ac8, stubReturn); // Completely disables the lens glare effect detourFunction(0x080e8ac8, stubReturn); // Completely disables the lens glare effect
} }
}
setVariable(0x080b913a, 0x44200000); setVariable(0x080b913a, 0x44200000);
setVariable(0x081dada8, 0x44200000); setVariable(0x081dada8, 0x44200000);
setVariable(0x081dadb0, 0x44200000); setVariable(0x081dadb0, 0x44200000);
@@ -2536,7 +2543,8 @@ int initResolutionPatches()
case OUTRUN_2_SP_SDX_REVA_TEST: case OUTRUN_2_SP_SDX_REVA_TEST:
case OUTRUN_2_SP_SDX_REVA_TEST2: case OUTRUN_2_SP_SDX_REVA_TEST2:
{ {
if (gWidth <= 800 && gHeight <= 480)
break;
setVariable(0x0804a490, gWidth); setVariable(0x0804a490, gWidth);
setVariable(0x0804a4ad, gHeight); setVariable(0x0804a4ad, gHeight);
} }
+11 -1
View File
@@ -119,7 +119,7 @@ void initSDL(int *argcp, char **argv)
SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1); SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 1);
} }
uint32_t windowFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE; uint32_t windowFlags = SDL_WINDOW_OPENGL;
strcat(SDLgameTitle, getGameName()); strcat(SDLgameTitle, getGameName());
@@ -156,6 +156,16 @@ void initSDL(int *argcp, char **argv)
fprintf(stderr, "OpenGL context could not be created! SDL_Error: %s\n", SDL_GetError()); fprintf(stderr, "OpenGL context could not be created! SDL_Error: %s\n", SDL_GetError());
exit(1); exit(1);
} }
glClearColor(0.1f, 0.1f, 0.1f, 1.0f); // Your bg color
// Force initial clear
glClear(GL_COLOR_BUFFER_BIT);
SDL_GL_SwapWindow(SDLwindow);
// Now show the window
SDL_ShowWindow(SDLwindow);
printf(" SDL RESOLUTION: %dx%d\n\n", getConfig()->width, getConfig()->height); printf(" SDL RESOLUTION: %dx%d\n\n", getConfig()->width, getConfig()->height);
if (getConfig()->fullscreen) if (getConfig()->fullscreen)
+26
View File
@@ -60,6 +60,20 @@ Display *XOpenDisplay(const char *display_name)
return x11Display; return x11Display;
} }
void setWindowProperties(Display *display, Window window)
{
XSizeHints *hints = XAllocSizeHints();
hints->flags = PMinSize | PMaxSize;
hints->min_width = hints->max_width = getConfig()->width;
hints->min_height = hints->max_height = getConfig()->height;
XSetWMNormalHints(display, window, hints);
XFree(hints);
Atom hintsAtom = XInternAtom(display, "_MOTIF_WM_HINTS", False);
XMapWindow(display, window);
XFlush(display);
}
Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int border_width, Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int width, unsigned int height, unsigned int border_width,
int depth, unsigned int class, Visual *visual, unsigned long valueMask, XSetWindowAttributes *attributes) int depth, unsigned int class, Visual *visual, unsigned long valueMask, XSetWindowAttributes *attributes)
{ {
@@ -98,9 +112,21 @@ Window XCreateWindow(Display *display, Window parent, int x, int y, unsigned int
{ {
window = x11Window; window = x11Window;
} }
// Eliminate the maximize window button and no more resizing
if (!gettingGPUVendor && !creatingWindow)
setWindowProperties(display, window);
return window; return window;
} }
// Here we prevent the games to change the window properties
void XSetWMProperties(Display *display, Window w, XTextProperty *window_name, XTextProperty *icon_name, char **argv, int argc,
XSizeHints *normal_hints, XWMHints *wm_hints, XClassHint *class_hints)
{
return;
}
int XGrabPointer(Display *display, Window grab_window, Bool owner_events, unsigned int event_mask, int pointer_mode, int XGrabPointer(Display *display, Window grab_window, Bool owner_events, unsigned int event_mask, int pointer_mode,
int keyboard_mode, Window confine_to, Cursor cursor, Time time) int keyboard_mode, Window confine_to, Cursor cursor, Time time)
{ {