Compare commits

...

10 Commits

15 changed files with 294 additions and 240 deletions
+14
View File
@@ -8,6 +8,20 @@ type: Bug
- [ ] I have checked the [Issues](https://github.com/hedge-dev/UnleashedRecomp/issues) page to see if my problem has already been reported - [ ] I have checked the [Issues](https://github.com/hedge-dev/UnleashedRecomp/issues) page to see if my problem has already been reported
- [ ] I have confirmed that this bug does not occur in the original game running on original Xbox 360 hardware - [ ] I have confirmed that this bug does not occur in the original game running on original Xbox 360 hardware
#### If you have DLC installed, please specify which ones you have.
- [ ] Apotos & Shamar Adventure Pack
- [ ] Chun-nan Adventure Pack
- [ ] Empire City & Adabat Adventure Pack
- [ ] Holoska Adventure Pack
- [ ] Mazuri Adventure Pack
- [ ] Spagonia Adventure Pack
#### If you have mods enabled, please specify which ones you have.
Provide a list of your enabled mods in Hedge Mod Manager here. You will not receive support for issues *caused* by mods.
#### If you have codes enabled, please specify which ones you have.
Provide a list of your enabled codes in Hedge Mod Manager here.
### Describe the Bug ### Describe the Bug
A clear and concise description of what the bug is. A clear and concise description of what the bug is.
-61
View File
@@ -1,61 +0,0 @@
name: Build Project (Flatpak)
on:
workflow_dispatch:
env:
FLATPAK_ID: io.github.hedge_dev.unleashedrecomp
FREEDESKTOP_VERSION: 23.08
LLVM_VERSION: 18
jobs:
build-flatpak:
name: Build Flatpak
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.ORG_TOKEN }}
- name: Checkout Private Repository
uses: actions/checkout@v4
with:
repository: ${{ secrets.ASSET_REPO }}
token: ${{ secrets.ASSET_REPO_TOKEN }}
path: ./private
- name: Install Dependencies
run: |-
sudo apt update
sudo apt install -y flatpak-builder ccache
- name: Setup ccache
uses: actions/cache@v4
with:
path: /tmp/ccache
key: ccache-${{ runner.os }}
- name: Prepare Project
run: cp ./private/* ./UnleashedRecompLib/private
- name: Prepare Flatpak
run: |
flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak --user install -y flathub org.freedesktop.Sdk//${{ env.FREEDESKTOP_VERSION }}
flatpak --user install -y flathub org.freedesktop.Sdk.Extension.llvm${{ env.LLVM_VERSION }}//${{ env.FREEDESKTOP_VERSION }}
- name: Build Flatpak
run: |
echo "commit_message=$(git log -1 --pretty=%s)" >> $GITHUB_ENV
export CCACHE_DIR=/tmp/ccache
flatpak-builder --user --force-clean --install-deps-from=flathub --repo=repo --ccache builddir ./flatpak/${{ env.FLATPAK_ID }}.json
flatpak build-bundle repo ./${{ env.FLATPAK_ID }}.flatpak ${{ env.FLATPAK_ID }} --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Flatpak
path: ./${{ env.FLATPAK_ID }}.flatpak
-73
View File
@@ -1,73 +0,0 @@
name: Build Project (Linux)
on:
workflow_dispatch:
env:
LLVM_VERSION: 18
CMAKE_PRESET: linux-release
jobs:
build:
name: Build Linux
runs-on: ubuntu-24.04
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.ORG_TOKEN }}
- name: Checkout Private Repository
uses: actions/checkout@v4
with:
repository: ${{ secrets.ASSET_REPO }}
token: ${{ secrets.ASSET_REPO_TOKEN }}
path: ./private
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ccache-${{ runner.os }}
- name: Cache vcpkg
uses: actions/cache@v4
with:
path: |
./thirdparty/vcpkg/downloads
./thirdparty/vcpkg/packages
key: vcpkg-${{ runner.os }}-${{ hashFiles('vcpkg.json') }}
restore-keys: |
vcpkg-${{ runner.os }}-
- name: Install Dependencies
run: |-
sudo apt update
sudo apt install -y ninja-build llvm-${{ env.LLVM_VERSION }}-dev libgtk-3-dev
- name: Cache ccache Directory
uses: actions/cache@v4
with:
path: /tmp/ccache
key: ccache-${{ runner.os }}
- name: Prepare Project
run: cp ./private/* ./UnleashedRecompLib/private
- name: Configure Project
env:
CCACHE_DIR: /tmp/ccache
run: cmake . --preset ${{ env.CMAKE_PRESET }} -DSDL2MIXER_VORBIS=VORBISFILE -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache
- name: Build Project
env:
CCACHE_DIR: /tmp/ccache
run: cmake --build ./out/build/${{ env.CMAKE_PRESET }} --target UnleashedRecomp
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Linux
path: ./out/build/${{ env.CMAKE_PRESET }}/UnleashedRecomp/UnleashedRecomp
-79
View File
@@ -1,79 +0,0 @@
name: Build Project (Windows)
on:
workflow_dispatch:
env:
CMAKE_PRESET: x64-Clang-Release
jobs:
build:
name: Build Windows
runs-on: windows-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
token: ${{ secrets.ORG_TOKEN }}
- name: Checkout private repository
uses: actions/checkout@v4
with:
repository: ${{ secrets.ASSET_REPO }}
token: ${{ secrets.ASSET_REPO_TOKEN }}
path: .\private
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ccache-${{ runner.os }}
- name: Cache vcpkg
uses: actions/cache@v4
with:
path: |
./thirdparty/vcpkg/downloads
./thirdparty/vcpkg/packages
key: vcpkg-${{ runner.os }}-${{ hashFiles('vcpkg.json') }}
restore-keys: |
vcpkg-${{ runner.os }}-
- name: Install dependencies
run: |
choco install ninja
Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue
- name: Configure Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
- name: Prepare Project
run: |
$commitMessage = git log -1 --pretty=%s
Add-Content -Path $env:GITHUB_ENV -Value "commit_message=$commitMessage"
copy .\private\* .\UnleashedRecompLib\private
- name: Configure Project
run: cmake . --preset ${{ env.CMAKE_PRESET }} -DSDL2MIXER_VORBIS=VORBISFILE -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache
- name: Build Project
run: cmake --build .\out\build\${{ env.CMAKE_PRESET }} --target UnleashedRecomp
- name: Pack Release
run: |
New-Item -ItemType Directory -Path .\release
New-Item -ItemType Directory -Path .\release\D3D12
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\D3D12\D3D12Core.dll" -Destination ".\release\D3D12\D3D12Core.dll"
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\dxcompiler.dll" -Destination ".\release\dxcompiler.dll"
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\dxil.dll" -Destination ".\release\dxil.dll"
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\UnleashedRecomp.exe" -Destination ".\release\UnleashedRecomp.exe"
Compress-Archive -Path .\release\* -DestinationPath .\UnleashedRecomp-Windows.zip
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Windows
path: .\UnleashedRecomp-Windows.zip
+20
View File
@@ -0,0 +1,20 @@
name: validate-external
on:
pull_request_target:
types: [opened, synchronize]
jobs:
authorize:
if: github.repository != github.event.pull_request.head.repo.full_name
environment:
${{ github.event_name == 'pull_request_target' &&
github.event.pull_request.head.repo.full_name != github.repository &&
'external' || 'internal' }}
runs-on: ubuntu-24.04
steps:
- run: echo ✓
build:
needs: authorize
uses: ./.github/workflows/validate.yml
secrets:
ASSET_REPO: ${{ secrets.ASSET_REPO }}
ASSET_REPO_TOKEN: ${{ secrets.ASSET_REPO_TOKEN }}
+12
View File
@@ -0,0 +1,12 @@
name: validate-internal
on:
push:
branches:
- main
pull_request:
types: [opened, synchronize]
jobs:
build:
if: github.event_name == 'push' || github.repository == github.event.pull_request.head.repo.full_name
uses: ./.github/workflows/validate.yml
secrets: inherit
+201
View File
@@ -0,0 +1,201 @@
name: validate
on:
workflow_call:
secrets:
ASSET_REPO:
required: true
ASSET_REPO_TOKEN:
required: true
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
build-linux:
name: Build Linux
runs-on: ubuntu-24.04
env:
LLVM_VERSION: 18
CMAKE_PRESET: linux-release
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Checkout Private Repository
uses: actions/checkout@v4
with:
repository: ${{ secrets.ASSET_REPO }}
token: ${{ secrets.ASSET_REPO_TOKEN }}
path: ./private
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ccache-${{ runner.os }}
- name: Cache vcpkg
uses: actions/cache@v4
with:
path: |
./thirdparty/vcpkg/downloads
./thirdparty/vcpkg/packages
key: vcpkg-${{ runner.os }}-${{ hashFiles('vcpkg.json') }}
restore-keys: |
vcpkg-${{ runner.os }}-
- name: Install Dependencies (Linux)
run: |-
sudo apt update
sudo apt install -y ninja-build llvm-${{ env.LLVM_VERSION }}-dev libgtk-3-dev
- name: Cache ccache Directory
uses: actions/cache@v4
with:
path: /tmp/ccache
key: ccache-${{ runner.os }}
- name: Prepare Project
run: cp ./private/* ./UnleashedRecompLib/private
- name: Configure Project
env:
CCACHE_DIR: /tmp/ccache
run: cmake . --preset ${{ env.CMAKE_PRESET }} -DSDL2MIXER_VORBIS=VORBISFILE -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache
- name: Build Project
env:
CCACHE_DIR: /tmp/ccache
run: cmake --build ./out/build/${{ env.CMAKE_PRESET }} --target UnleashedRecomp
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Linux
path: ./out/build/${{ env.CMAKE_PRESET }}/UnleashedRecomp/UnleashedRecomp
build-windows:
name: Build Windows
runs-on: windows-latest
env:
CMAKE_PRESET: x64-Clang-Release
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Checkout private repository
uses: actions/checkout@v4
with:
repository: ${{ secrets.ASSET_REPO }}
token: ${{ secrets.ASSET_REPO_TOKEN }}
path: .\private
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ccache-${{ runner.os }}
- name: Cache vcpkg
uses: actions/cache@v4
with:
path: |
./thirdparty/vcpkg/downloads
./thirdparty/vcpkg/packages
key: vcpkg-${{ runner.os }}-${{ hashFiles('vcpkg.json') }}
restore-keys: |
vcpkg-${{ runner.os }}-
- name: Install dependencies
run: |
choco install ninja
Remove-Item -Path "C:\ProgramData\Chocolatey\bin\ccache.exe" -Force -ErrorAction SilentlyContinue
- name: Configure Developer Command Prompt
uses: ilammy/msvc-dev-cmd@v1
- name: Prepare Project
run: |
$commitMessage = git log -1 --pretty=%s
Add-Content -Path $env:GITHUB_ENV -Value "commit_message=$commitMessage"
copy .\private\* .\UnleashedRecompLib\private
- name: Configure Project
run: cmake . --preset ${{ env.CMAKE_PRESET }} -DSDL2MIXER_VORBIS=VORBISFILE -DCMAKE_CXX_COMPILER_LAUNCHER=ccache -DCMAKE_C_COMPILER_LAUNCHER=ccache
- name: Build Project
run: cmake --build .\out\build\${{ env.CMAKE_PRESET }} --target UnleashedRecomp
- name: Pack Release
run: |
New-Item -ItemType Directory -Path .\release
New-Item -ItemType Directory -Path .\release\D3D12
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\D3D12\D3D12Core.dll" -Destination ".\release\D3D12\D3D12Core.dll"
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\dxcompiler.dll" -Destination ".\release\dxcompiler.dll"
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\dxil.dll" -Destination ".\release\dxil.dll"
Move-Item -Path ".\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\UnleashedRecomp.exe" -Destination ".\release\UnleashedRecomp.exe"
Compress-Archive -Path .\release\* -DestinationPath .\UnleashedRecomp-Windows.zip
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Windows
path: .\UnleashedRecomp-Windows.zip
build-flatpak:
name: Build Flatpak
runs-on: ubuntu-24.04
env:
FLATPAK_ID: io.github.hedge_dev.unleashedrecomp
FREEDESKTOP_VERSION: 23.08
LLVM_VERSION: 18
steps:
- name: Checkout Repository
uses: actions/checkout@v4
with:
submodules: recursive
- name: Checkout Private Repository
uses: actions/checkout@v4
with:
repository: ${{ secrets.ASSET_REPO }}
token: ${{ secrets.ASSET_REPO_TOKEN }}
path: ./private
- name: Install Dependencies
run: |-
sudo apt update
sudo apt install -y flatpak-builder ccache
- name: Setup ccache
uses: actions/cache@v4
with:
path: /tmp/ccache
key: ccache-${{ runner.os }}
- name: Prepare Project
run: cp ./private/* ./UnleashedRecompLib/private
- name: Prepare Flatpak
run: |
flatpak --user remote-add --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo
flatpak --user install -y flathub org.freedesktop.Sdk//${{ env.FREEDESKTOP_VERSION }}
flatpak --user install -y flathub org.freedesktop.Sdk.Extension.llvm${{ env.LLVM_VERSION }}//${{ env.FREEDESKTOP_VERSION }}
- name: Build Flatpak
run: |
echo "commit_message=$(git log -1 --pretty=%s)" >> $GITHUB_ENV
export CCACHE_DIR=/tmp/ccache
flatpak-builder --user --force-clean --install-deps-from=flathub --repo=repo --ccache builddir ./flatpak/${{ env.FLATPAK_ID }}.json
flatpak build-bundle repo ./${{ env.FLATPAK_ID }}.flatpak ${{ env.FLATPAK_ID }} --runtime-repo=https://flathub.org/repo/flathub.flatpakrepo
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Flatpak
path: ./${{ env.FLATPAK_ID }}.flatpak
+3 -1
View File
@@ -29,9 +29,11 @@ Unleashed Recompiled is an unofficial PC port of the Xbox 360 version of Sonic U
- Intel: Sandy Bridge (Intel Core 2nd Generation) - Intel: Sandy Bridge (Intel Core 2nd Generation)
- AMD: Bulldozer (AMD FX series) - AMD: Bulldozer (AMD FX series)
- GPU with support for Direct3D 12.0 (Shader Model 6) or Vulkan 1.2: - GPU with support for Direct3D 12.0 (Shader Model 6) or Vulkan 1.2:
- NVIDIA: GeForce GT 630 - NVIDIA: GeForce GT 630 (Kepler)
- AMD: Radeon HD 7750 (2012, not the RX 7000) - AMD: Radeon HD 7750 (2012, not the RX 7000)
- Intel: HD Graphics 510 (Skylake) - Intel: HD Graphics 510 (Skylake)
- Memory:
- 8 GB minimum
- Operating System: - Operating System:
- Windows 10 (version 1909) - Windows 10 (version 1909)
- A modern Linux distro such as Ubuntu 22.04 LTS - A modern Linux distro such as Ubuntu 22.04 LTS
+17 -14
View File
@@ -285,7 +285,7 @@ static bool g_vulkan = false;
static constexpr bool g_vulkan = true; static constexpr bool g_vulkan = true;
#endif #endif
static bool g_mesaTriangleStripWorkaround = false; static bool g_triangleStripWorkaround = false;
static constexpr bool g_hardwareResolve = true; static constexpr bool g_hardwareResolve = true;
static constexpr bool g_hardwareDepthResolve = true; static constexpr bool g_hardwareDepthResolve = true;
@@ -1702,13 +1702,9 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver)
g_vulkan = (interfaceFunction == CreateVulkanInterfaceWrapper); g_vulkan = (interfaceFunction == CreateVulkanInterfaceWrapper);
#endif #endif
// Enable triangle strip workaround if we are on AMD, as there is a bug where
if (interfaceFunction == CreateVulkanInterfaceWrapper) // restart indices cause triangles to be culled incorrectly. Converting them to degenerate triangles fixes it.
{ g_triangleStripWorkaround = (deviceDescription.vendor == RenderDeviceVendor::AMD);
// Enable triangle strip workaround if we are on the Mesa RADV driver, as it currently has a bug where
// restart indices cause triangles to be culled incorrectly. Converting them to degenerate triangles fixes it.
g_mesaTriangleStripWorkaround = deviceDescription.name.find(" (RADV ") != std::string::npos;
}
break; break;
} }
@@ -2329,7 +2325,7 @@ static void DrawProfiler()
ImGui::Text("Present Wait: %s", g_capabilities.presentWait ? "Supported" : "Unsupported"); ImGui::Text("Present Wait: %s", g_capabilities.presentWait ? "Supported" : "Unsupported");
ImGui::Text("Triangle Fan: %s", g_capabilities.triangleFan ? "Supported" : "Unsupported"); ImGui::Text("Triangle Fan: %s", g_capabilities.triangleFan ? "Supported" : "Unsupported");
ImGui::Text("Dynamic Depth Bias: %s", g_capabilities.dynamicDepthBias ? "Supported" : "Unsupported"); ImGui::Text("Dynamic Depth Bias: %s", g_capabilities.dynamicDepthBias ? "Supported" : "Unsupported");
ImGui::Text("Triangle Strip Workaround: %s", g_mesaTriangleStripWorkaround ? "Enabled" : "Disabled"); ImGui::Text("Triangle Strip Workaround: %s", g_triangleStripWorkaround ? "Enabled" : "Disabled");
ImGui::NewLine(); ImGui::NewLine();
ImGui::Text("API: %s", g_vulkan ? "Vulkan" : "D3D12"); ImGui::Text("API: %s", g_vulkan ? "Vulkan" : "D3D12");
@@ -6833,6 +6829,13 @@ void GetDatabaseDataMidAsmHook(PPCRegister& r1, PPCRegister& r4)
if (isParticleModel) if (isParticleModel)
return; return;
// Adabat water is broken in original game, which they tried to fix by partially including the files in the update,
// which then finally fixed for real in the DLC. This confuses the async PSO compiler and causes a hang if the DLC is missing.
// We'll just ignore it.
bool isAdabatWater = strcmp(databaseData->m_TypeAndName.c_str() + 2, "evl_sea_obj_st_waterCircle") == 0;
if (isAdabatWater)
return;
} }
databaseData->m_Flags |= eDatabaseDataFlags_CompilingPipelines; databaseData->m_Flags |= eDatabaseDataFlags_CompilingPipelines;
@@ -7421,8 +7424,8 @@ bool FxShadowMapMidAsmHook(PPCRegister& r4, PPCRegister& r5, PPCRegister& r6, PP
} }
} }
// There is a driver bug on Mesa where restart indices cause incorrect culling and prevent some triangles from being rendered. // There is a bug on AMD where restart indices cause incorrect culling and prevent some triangles from being rendered.
// Restart indices can be converted to degenerate triangles as a workaround until this issue gets fixed. // This seems to happen on both Windows AMD drivers and Mesa. Converting restart indices to degenerate triangles fixes it.
static void ConvertToDegenerateTriangles(uint16_t* indices, uint32_t indexCount, uint16_t*& newIndices, uint32_t& newIndexCount) static void ConvertToDegenerateTriangles(uint16_t* indices, uint32_t indexCount, uint16_t*& newIndices, uint32_t& newIndexCount)
{ {
newIndices = reinterpret_cast<uint16_t*>(g_userHeap.Alloc(indexCount * sizeof(uint16_t) * 3)); newIndices = reinterpret_cast<uint16_t*>(g_userHeap.Alloc(indexCount * sizeof(uint16_t) * 3));
@@ -7475,7 +7478,7 @@ PPC_FUNC(sub_82E44AF8)
uint16_t* newIndicesToFree = nullptr; uint16_t* newIndicesToFree = nullptr;
auto databaseData = reinterpret_cast<Hedgehog::Database::CDatabaseData*>(base + ctx.r3.u32); auto databaseData = reinterpret_cast<Hedgehog::Database::CDatabaseData*>(base + ctx.r3.u32);
if (g_mesaTriangleStripWorkaround && !databaseData->IsMadeOne()) if (g_triangleStripWorkaround && !databaseData->IsMadeOne())
{ {
auto meshResource = reinterpret_cast<MeshResource*>(base + ctx.r4.u32); auto meshResource = reinterpret_cast<MeshResource*>(base + ctx.r4.u32);
@@ -7538,7 +7541,7 @@ PPC_FUNC(sub_82E3AFC8)
uint16_t* newIndices = nullptr; uint16_t* newIndices = nullptr;
auto databaseData = reinterpret_cast<Hedgehog::Database::CDatabaseData*>(base + ctx.r3.u32); auto databaseData = reinterpret_cast<Hedgehog::Database::CDatabaseData*>(base + ctx.r3.u32);
if (g_mesaTriangleStripWorkaround && !databaseData->IsMadeOne()) if (g_triangleStripWorkaround && !databaseData->IsMadeOne())
{ {
auto lightAndIndexBufferResource = reinterpret_cast<LightAndIndexBufferResourceV1*>(base + ctx.r4.u32); auto lightAndIndexBufferResource = reinterpret_cast<LightAndIndexBufferResourceV1*>(base + ctx.r4.u32);
@@ -7577,7 +7580,7 @@ PPC_FUNC(sub_82E3B1C0)
uint16_t* newIndices = nullptr; uint16_t* newIndices = nullptr;
auto databaseData = reinterpret_cast<Hedgehog::Database::CDatabaseData*>(base + ctx.r3.u32); auto databaseData = reinterpret_cast<Hedgehog::Database::CDatabaseData*>(base + ctx.r3.u32);
if (g_mesaTriangleStripWorkaround && !databaseData->IsMadeOne()) if (g_triangleStripWorkaround && !databaseData->IsMadeOne())
{ {
auto lightAndIndexBufferResource = reinterpret_cast<LightAndIndexBufferResourceV5*>(base + ctx.r4.u32); auto lightAndIndexBufferResource = reinterpret_cast<LightAndIndexBufferResourceV5*>(base + ctx.r4.u32);
+2 -1
View File
@@ -5321,6 +5321,7 @@ const uint64_t GameHashes[] = {
10073206724900292034ULL, 10073206724900292034ULL,
13849076872517480735ULL, 13849076872517480735ULL,
18429668117940514005ULL, 18429668117940514005ULL,
14872142036681345494ULL,
7440489770734063325ULL, 7440489770734063325ULL,
1423900708842059394ULL, 1423900708842059394ULL,
7094898889553293067ULL, 7094898889553293067ULL,
@@ -8340,7 +8341,7 @@ const std::pair<const char *, uint32_t> GameFiles[] = {
{ "Town_SouthEastAsia_Night.arl", 2 }, { "Town_SouthEastAsia_Night.arl", 2 },
{ "WorldMap.ar.00", 2 }, { "WorldMap.ar.00", 2 },
{ "WorldMap.arl", 2 }, { "WorldMap.arl", 2 },
{ "default.xex", 3 }, { "default.xex", 4 },
{ "movie/CHN.sfd", 1 }, { "movie/CHN.sfd", 1 },
{ "movie/HedgehogEngine_logo.sfd", 1 }, { "movie/HedgehogEngine_logo.sfd", 1 },
{ "movie/Inspire/ex00_movie.sfd", 1 }, { "movie/Inspire/ex00_movie.sfd", 1 },
+2 -1
View File
@@ -10,6 +10,7 @@ const uint64_t UpdateHashes[] = {
6914273463875662709ULL, 6914273463875662709ULL,
15542186142639918255ULL, 15542186142639918255ULL,
17773094197787397017ULL, 17773094197787397017ULL,
4145621795357905881ULL,
5694064368761413534ULL, 5694064368761413534ULL,
10660633045276223515ULL, 10660633045276223515ULL,
6259845327508088719ULL, 6259845327508088719ULL,
@@ -48,7 +49,7 @@ const uint64_t UpdateHashes[] = {
}; };
const std::pair<const char *, uint32_t> UpdateFiles[] = { const std::pair<const char *, uint32_t> UpdateFiles[] = {
{ "default.xexp", 3 }, { "default.xexp", 4 },
{ "work/ActD_MykonosAct1/Base.set.xml", 1 }, { "work/ActD_MykonosAct1/Base.set.xml", 1 },
{ "work/ActD_NY/Mission_NYCity_S20_10.set.xml", 1 }, { "work/ActD_NY/Mission_NYCity_S20_10.set.xml", 1 },
{ "work/ActD_SubEU_01/Set2.set.xml", 1 }, { "work/ActD_SubEU_01/Set2.set.xml", 1 },
+4 -2
View File
@@ -95,9 +95,11 @@ void PostUnleashMidAsmHook(PPCRegister& r30)
g_isUnleashCancelled = false; g_isUnleashCancelled = false;
} }
void SetXButtonHomingMidAsmHook(PPCRegister& r30) void SetXButtonHomingMidAsmHook(PPCRegister& r1)
{ {
r30.u32 = !Config::HomingAttackOnJump; auto pXButtonHoming = (bool*)(g_memory.base + r1.u32 + 0x63);
*pXButtonHoming = !Config::HomingAttackOnJump;
} }
// SWA::Player::CEvilSonicContext // SWA::Player::CEvilSonicContext
+1 -1
View File
@@ -1,4 +1,4 @@
VERSION_MILESTONE="" VERSION_MILESTONE=""
VERSION_MAJOR=1 VERSION_MAJOR=1
VERSION_MINOR=0 VERSION_MINOR=0
VERSION_REVISION=0 VERSION_REVISION=1
+16 -5
View File
@@ -1165,28 +1165,39 @@ static void DrawConfigOption(int32_t rowIndex, float yOffset, ConfigDef<T>* conf
size = Scale(20.0f); size = Scale(20.0f);
textSize = g_newRodinFont->CalcTextSizeA(size, FLT_MAX, 0.0f, valueText.data()); textSize = g_newRodinFont->CalcTextSizeA(size, FLT_MAX, 0.0f, valueText.data());
min.x += ((max.x - min.x) - textSize.x) / 2.0f; auto textSquashRatio = 1.0f;
min.y += ((max.y - min.y) - textSize.y) / 2.0f;
if (textSize.x > max.x - min.x)
textSquashRatio = (max.x - min.x) / textSize.x - 0.1f;
auto textX = min.x + ((max.x - min.x) - (textSize.x * textSquashRatio)) / 2.0f;
auto textY = min.y + ((max.y - min.y) - textSize.y) / 2.0f;
SetGradient SetGradient
( (
min, { textX, textY },
{ min.x + textSize.x, min.y + textSize.y }, { textX + textSize.x, textY + textSize.y },
IM_COL32(192, 255, 0, 255), IM_COL32(192, 255, 0, 255),
IM_COL32(128, 170, 0, 255) IM_COL32(128, 170, 0, 255)
); );
SetScale({ textSquashRatio, 1.0f });
SetOrigin({ textX, textY });
DrawTextWithOutline DrawTextWithOutline
( (
g_newRodinFont, g_newRodinFont,
size, size,
min, { textX, textY },
IM_COL32(255, 255, 255, 255 * alpha), IM_COL32(255, 255, 255, 255 * alpha),
valueText.data(), valueText.data(),
4, 4,
IM_COL32(0, 0, 0, 255 * alpha) IM_COL32(0, 0, 0, 255 * alpha)
); );
SetScale({ 1.0f, 1.0f });
SetOrigin({ 0.0f, 0.0f });
ResetGradient(); ResetGradient();
} }
+2 -2
View File
@@ -199,8 +199,8 @@ return_on_false = true
[[midasm_hook]] [[midasm_hook]]
name = "SetXButtonHomingMidAsmHook" name = "SetXButtonHomingMidAsmHook"
address = 0x8237AC88 address = 0x8237AC90
registers = ["r30"] registers = ["r1"]
# Down force HFR fix # Down force HFR fix
[[midasm_hook]] [[midasm_hook]]