Compare commits

...

10 Commits

Author SHA1 Message Date
PTKay 3bd5aa94b4 Disable console in RelWithDebInfo configuration 2025-03-06 09:44:35 +00:00
Hyper df5e48f528 Increase FPS slider max to 241 (#1082) 2025-03-06 06:33:13 +00:00
Jérémy Francart c07a754f4f Add hidden DisableDPadAsAnalogInput option (#604)
This commit adds a configuration entry in the 'Codes' section named DisableDPadAsAnalogInput allowing someone to enable or disable the movement of Sonic / the world map cursor using the directional pad buttons.
2025-03-06 05:59:22 +00:00
NextinHKRY 8a80db141d code: Add Disable Boost Filter code (#999) 2025-03-06 05:46:45 +00:00
Michael 48458cb903 Update README.md (#1050)
- Added a tip regarding supported media players with Music Attenuation
- Added onto the mod support note, referring to the HMM wiki regarding the mod format
2025-03-05 23:16:04 +00:00
Nilton Perim Neto 1c225184a1 Updated build instructions for Linux (#914)
* Update BUILDING.md

updated building to describe for Arch to make the groundwork for making an AUR repo

* Update BUILDING.md

* Update BUILDING.md

* Removed vcpkg

removed vcpkg from the Arch command since its not needed

---------

Co-authored-by: Hyper <34012267+hyperbx@users.noreply.github.com>
2025-03-05 23:15:51 +00:00
JaceCear 6ef7789b17 Fix typo in German translation (#980) 2025-03-05 23:08:40 +00:00
Skyth (Asilkan) 756d001d35 Disable hardware resolve on Intel GPUs. (#853) 2025-03-06 01:53:36 +03:00
Isaac Marovitz 0866be0c3d Build all presets (#979)
* Build all presets

Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>

* Add preset to file name

Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>

* Upload PDB

Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>

Fix

Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>

* Cache by preset

Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>

---------

Signed-off-by: Isaac Marovitz <isaacryu@icloud.com>
2025-03-05 20:37:52 +03:00
got4n 4705ffddc2 Fixing typo in French translation. (#545)
"a échoué" is more correct than "a échouée"
2025-03-04 07:22:36 +00:00
12 changed files with 91 additions and 27 deletions
+20 -7
View File
@@ -14,9 +14,12 @@ jobs:
build-linux:
name: Build Linux
runs-on: ubuntu-24.04
strategy:
matrix:
preset: ["linux-debug", "linux-release", "linux-relwithdebinfo"]
env:
LLVM_VERSION: 18
CMAKE_PRESET: linux-release
CMAKE_PRESET: ${{ matrix.preset }}
steps:
- name: Checkout Repository
@@ -34,7 +37,7 @@ jobs:
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ccache-${{ runner.os }}
key: ccache-${{ runner.os }}-${{ matrix.preset }}
- name: Cache vcpkg
uses: actions/cache@v4
@@ -55,7 +58,7 @@ jobs:
uses: actions/cache@v4
with:
path: /tmp/ccache
key: ccache-${{ runner.os }}
key: ccache-${{ runner.os }}-${{ matrix.preset }}
- name: Prepare Project
run: cp ./private/* ./UnleashedRecompLib/private
@@ -73,13 +76,16 @@ jobs:
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Linux
name: UnleashedRecomp-Linux-${{ env.CMAKE_PRESET }}
path: ./out/build/${{ env.CMAKE_PRESET }}/UnleashedRecomp/UnleashedRecomp
build-windows:
name: Build Windows
runs-on: windows-latest
strategy:
matrix:
preset: ["x64-Clang-Debug", "x64-Clang-Release", "x64-Clang-RelWithDebInfo"]
env:
CMAKE_PRESET: x64-Clang-Release
CMAKE_PRESET: ${{ matrix.preset }}
steps:
- name: Checkout repository
@@ -97,7 +103,7 @@ jobs:
- name: Setup ccache
uses: hendrikmuhs/ccache-action@v1.2
with:
key: ccache-${{ runner.os }}
key: ccache-${{ runner.os }}-${{ matrix.preset }}
- name: Cache vcpkg
uses: actions/cache@v4
@@ -144,8 +150,15 @@ jobs:
- name: Upload Artifact
uses: actions/upload-artifact@v4
with:
name: UnleashedRecomp-Windows
name: UnleashedRecomp-Windows-${{ env.CMAKE_PRESET }}
path: .\UnleashedRecomp-Windows.zip
- name: Upload PDB
uses: actions/upload-artifact@v4
if: ${{ matrix.preset != 'x64-Clang-Release' }}
with:
name: UnleashedRecomp-Windows-${{ env.CMAKE_PRESET }}-PDB
path: .\out\build\${{ env.CMAKE_PRESET }}\UnleashedRecomp\UnleashedRecomp.pdb
build-flatpak:
name: Build Flatpak
runs-on: ubuntu-24.04
+5
View File
@@ -182,6 +182,9 @@ Many options have been integrated to address some common quality of life improve
- The day/night transformation cutscene in towns can use either the Xbox 360 or PlayStation 3 version, with the Xbox version artificially extending loading times for the full video play out, whilst the PlayStation version ends as soon as it's done loading.
- Music Attenuation is a feature that was originally present in the Xbox 360 version of the game, where it'd automatically mute the background music if the console's media player was in use. This feature has been implemented using information provided by the [Windows Media Control](https://learn.microsoft.com/en-us/uwp/api/windows.media.control?view=winrt-26100) APIs in [WinRT](https://en.wikipedia.org/wiki/Windows_Runtime). Applications that interface with Windows 10/11 to display media controls are supported.
> [!TIP]
> You may refer to Music Presence's [list of supported media players](https://github.com/ungive/discord-music-presence/blob/master/documentation/supported-media-players.md) for players that work with Music Attenuation out of the box.
> [!NOTE]
> Please note that Music Attenuation is not currently available on Linux. Support for this feature may be added in a future update.
@@ -206,6 +209,8 @@ Modded files for the Xbox 360 version of the game are compatible with Unleashed
> [!NOTE]
> Code modding is currently not possible and is [planned for a future update](#code-modding). As a workaround for the time being, some codes have been directly embedded into the game and can be accessed through Hedge Mod Manager's Codes tab.
>
> For information on the mod format, check out Hedge Mod Manager's [Basic Mod File Structure](https://github.com/thesupersonic16/HedgeModManager/wiki/Basic-Mod-File-Structure) wiki page.
## Update Roadmap
+1 -1
View File
@@ -293,7 +293,7 @@ if (WIN32)
add_executable(UnleashedRecomp ${UNLEASHED_RECOMP_CXX_SOURCES} "${CMAKE_BINARY_DIR}/res.rc")
# Hide console for release configurations.
if (${CMAKE_BUILD_TYPE} MATCHES "Release")
if (${CMAKE_BUILD_TYPE} MATCHES "Release" OR ${CMAKE_BUILD_TYPE} MATCHES "RelWithDebInfo")
target_link_options(UnleashedRecomp PRIVATE "/SUBSYSTEM:WINDOWS" "/ENTRY:mainCRTStartup")
endif()
else()
+8 -2
View File
@@ -287,8 +287,8 @@ static constexpr bool g_vulkan = true;
static bool g_triangleStripWorkaround = false;
static constexpr bool g_hardwareResolve = true;
static constexpr bool g_hardwareDepthResolve = true;
static bool g_hardwareResolve = true;
static bool g_hardwareDepthResolve = true;
static std::unique_ptr<RenderInterface> g_interface;
static std::unique_ptr<RenderDevice> g_device;
@@ -1698,6 +1698,10 @@ bool Video::CreateHostDevice(const char *sdlVideoDriver)
continue;
}
}
// Hardware resolve seems to be completely bugged on Intel D3D12 drivers.
g_hardwareResolve = (deviceDescription.vendor != RenderDeviceVendor::INTEL);
g_hardwareDepthResolve = (deviceDescription.vendor != RenderDeviceVendor::INTEL);
}
g_vulkan = (interfaceFunction == CreateVulkanInterfaceWrapper);
@@ -2326,6 +2330,8 @@ static void DrawProfiler()
ImGui::Text("Triangle Fan: %s", g_capabilities.triangleFan ? "Supported" : "Unsupported");
ImGui::Text("Dynamic Depth Bias: %s", g_capabilities.dynamicDepthBias ? "Supported" : "Unsupported");
ImGui::Text("Triangle Strip Workaround: %s", g_triangleStripWorkaround ? "Enabled" : "Disabled");
ImGui::Text("Hardware Resolve: %s", g_hardwareResolve ? "Enabled" : "Disabled");
ImGui::Text("Hardware Depth Resolve: %s", g_hardwareDepthResolve ? "Enabled" : "Disabled");
ImGui::NewLine();
ImGui::Text("API: %s", g_vulkan ? "Vulkan" : "D3D12");
+3 -3
View File
@@ -562,9 +562,9 @@ CONFIG_DEFINE_ENUM_LOCALE(EAspectRatio)
ELanguage::German,
{
{ EAspectRatio::Auto, { "AUTO", "Auto: Das Seitenverhältnis passt sich automatisch der Fenstergröße an." } },
{ EAspectRatio::Wide, { "16:9", "16:9: Stellt das Spiel in einem Breitbildschirm-Vormat dar." } },
{ EAspectRatio::Narrow, { "4:3", "4:3: Stellt das Spiel in einem Mittel-Vormat dar." } },
{ EAspectRatio::OriginalNarrow, { "ORIGINAL 4:3", "Original 4:3: Stellt das Spiel in einem Mittel-Vormat dar, was der ursprünglichen Implementation originalgetreut bleibt." } }
{ EAspectRatio::Wide, { "16:9", "16:9: Stellt das Spiel in einem Breitbildschirm-Format dar." } },
{ EAspectRatio::Narrow, { "4:3", "4:3: Stellt das Spiel in einem Mittel-Format dar." } },
{ EAspectRatio::OriginalNarrow, { "ORIGINAL 4:3", "Original 4:3: Stellt das Spiel in einem Mittel-Format dar, was der ursprünglichen Implementation originalgetreut bleibt." } }
}
},
{
+1 -1
View File
@@ -378,7 +378,7 @@ std::unordered_map<std::string_view, std::unordered_map<ELanguage, std::string>>
{ ELanguage::English, "Installation failed.\n\nError: " },
{ ELanguage::Japanese, "インストールに[失敗:しっぱい]しました\n\nエラー: " },
{ ELanguage::German, "Installation fehlgeschlagen.\n\nFehler: " },
{ ELanguage::French, "L'installation a échouée.\n\nErreur : " },
{ ELanguage::French, "L'installation a échoué.\n\nErreur : " },
{ ELanguage::Spanish, "La instalación falló.\n\nError: " },
{ ELanguage::Italian, "Installazione fallita.\n\nErrore: " }
}
+29 -11
View File
@@ -212,6 +212,9 @@ g_sdlEventListenerForInputPatches;
static bool IsDPadThreshold(const SWA::SPadState* pPadState)
{
if (Config::DisableDPadAsAnalogInput)
return false;
return pPadState->IsDown(SWA::eKeyState_DpadUp) ||
pPadState->IsDown(SWA::eKeyState_DpadDown) ||
pPadState->IsDown(SWA::eKeyState_DpadLeft) ||
@@ -237,6 +240,9 @@ static bool IsCursorThreshold(double deadzone = 0, bool isBelowThreshold = false
static void SetDPadAnalogDirectionX(PPCRegister& pPadState, PPCRegister& x, bool invert, float max = 1.0f)
{
if (Config::DisableDPadAsAnalogInput)
return;
auto pGuestPadState = (SWA::SPadState*)g_memory.Translate(pPadState.u32);
if (pGuestPadState->IsDown(SWA::eKeyState_DpadLeft))
@@ -248,6 +254,9 @@ static void SetDPadAnalogDirectionX(PPCRegister& pPadState, PPCRegister& x, bool
static void SetDPadAnalogDirectionY(PPCRegister& pPadState, PPCRegister& y, bool invert, float max = 1.0f)
{
if (Config::DisableDPadAsAnalogInput)
return;
auto pGuestPadState = (SWA::SPadState*)g_memory.Translate(pPadState.u32);
if (pGuestPadState->IsDown(SWA::eKeyState_DpadUp))
@@ -283,6 +292,9 @@ void PostureDPadSupportYMidAsmHook(PPCRegister& pPadState, PPCRegister& y)
void PostureSpaceHurrierDPadSupportXMidAsmHook(PPCRegister& pPadState, PPCVRegister& vector)
{
if (Config::DisableDPadAsAnalogInput)
return;
auto pGuestPadState = (SWA::SPadState*)g_memory.Translate(pPadState.u32);
if (pGuestPadState->IsDown(SWA::eKeyState_DpadLeft))
@@ -294,6 +306,9 @@ void PostureSpaceHurrierDPadSupportXMidAsmHook(PPCRegister& pPadState, PPCVRegis
void PostureSpaceHurrierDPadSupportYMidAsmHook(PPCRegister& pPadState, PPCVRegister& vector)
{
if (Config::DisableDPadAsAnalogInput)
return;
auto pGuestPadState = (SWA::SPadState*)g_memory.Translate(pPadState.u32);
if (pGuestPadState->IsDown(SWA::eKeyState_DpadUp))
@@ -403,17 +418,20 @@ PPC_FUNC(sub_8256C938)
pWorldMapCursor->m_LeftStickVertical = rPadState.LeftStickVertical;
pWorldMapCursor->m_LeftStickHorizontal = rPadState.LeftStickHorizontal;
if (rPadState.IsDown(SWA::eKeyState_DpadUp))
pWorldMapCursor->m_LeftStickVertical = 1.0f;
if (rPadState.IsDown(SWA::eKeyState_DpadDown))
pWorldMapCursor->m_LeftStickVertical = -1.0f;
if (rPadState.IsDown(SWA::eKeyState_DpadLeft))
pWorldMapCursor->m_LeftStickHorizontal = -1.0f;
if (rPadState.IsDown(SWA::eKeyState_DpadRight))
pWorldMapCursor->m_LeftStickHorizontal = 1.0f;
if (!Config::DisableDPadAsAnalogInput)
{
if (rPadState.IsDown(SWA::eKeyState_DpadUp))
pWorldMapCursor->m_LeftStickVertical = 1.0f;
if (rPadState.IsDown(SWA::eKeyState_DpadDown))
pWorldMapCursor->m_LeftStickVertical = -1.0f;
if (rPadState.IsDown(SWA::eKeyState_DpadLeft))
pWorldMapCursor->m_LeftStickHorizontal = -1.0f;
if (rPadState.IsDown(SWA::eKeyState_DpadRight))
pWorldMapCursor->m_LeftStickHorizontal = 1.0f;
}
if (sqrtl((pWorldMapCursor->m_LeftStickHorizontal * pWorldMapCursor->m_LeftStickHorizontal) +
(pWorldMapCursor->m_LeftStickVertical * pWorldMapCursor->m_LeftStickVertical)) > WORLD_MAP_ROTATE_DEADZONE)
+10
View File
@@ -146,3 +146,13 @@ PPC_FUNC(sub_824C1E60)
__imp__sub_824C1E60(ctx, base);
}
// Remove boost filter
void DisableBoostFilterMidAsmHook(PPCRegister& r11)
{
if (Config::DisableBoostFilter)
{
if (r11.u32 == 1)
r11.u32 = 0;
}
}
+1 -1
View File
@@ -95,7 +95,7 @@ enum class ETripleBuffering : uint32_t
};
static constexpr int32_t FPS_MIN = 15;
static constexpr int32_t FPS_MAX = 240;
static constexpr int32_t FPS_MAX = 241;
enum class EAntiAliasing : uint32_t
{
+2
View File
@@ -77,6 +77,7 @@ CONFIG_DEFINE_ENUM_LOCALISED("Video", EUIAlignmentMode, UIAlignmentMode, EUIAlig
CONFIG_DEFINE_HIDDEN("Codes", bool, AllowCancellingUnleash, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableAutoSaveWarning, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableBoostFilter, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDLCIcon, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDWMRoundedCorners, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, EnableEventCollisionDebugView, false);
@@ -92,5 +93,6 @@ CONFIG_DEFINE_HIDDEN("Codes", bool, SkipIntroLogos, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, UseArrowsForTimeOfDayTransition, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, UseOfficialTitleOnTitleBar, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableLowResolutionFontOnCustomUI, false);
CONFIG_DEFINE_HIDDEN("Codes", bool, DisableDPadAsAnalogInput, false);
CONFIG_DEFINE("Update", time_t, LastChecked, 0);
+5
View File
@@ -1093,3 +1093,8 @@ registers = ["r31", "r29", "r28"]
name = "ObjGrindDashPanelAllocMidAsmHook"
address = 0x82614948
registers = ["r3"]
[[midasm_hook]]
name = "DisableBoostFilterMidAsmHook"
address = 0x82B48C9C
registers = ["r11"]
+6 -1
View File
@@ -37,10 +37,15 @@ In the installer, you must select the following **Workloads** and **Individual c
- C++ CMake tools for Windows
### Linux
The following command will install the required dependencies on a distro that uses `apt` (such as Ubuntu), but you can find the equivalent packages for your preferred distro.
The following command will install the required dependencies on a distro that uses `apt` (such as Debian-based distros).
```bash
sudo apt install autoconf automake libtool pkg-config curl cmake ninja-build clang clang-tools libgtk-3-dev
```
The following command will install the required dependencies on a distro that uses `pacman` (such as Arch-based distros).
```bash
sudo pacman -S base-devel ninja lld clang gtk3
```
You can also find the equivalent packages for your preferred distro.
> [!NOTE]
> This list may not be comprehensive for your particular distro and you may be required to install additional packages, should an error occur during configuration.