Commit Graph

27763 Commits

Author SHA1 Message Date
Zephyron
fd5923753f Revert "fix: use local style.qss in colorful theme instead of relative path"
This reverts commit 82f8f09c45.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-19 13:44:39 +10:00
Zephyron
82f8f09c45 fix: use local style.qss in colorful theme instead of relative path
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-16 11:01:45 +10:00
Zephyron
a1b317a15e fix: add Module 56 error support and improve error handling
- Add Module56 to ErrorModule enum for error code 2056-2306
- Add Module 56 error handling in fatal error reporting
- Define Module 56 error codes in ldn_results.h
- Improve error reporting for unknown modules

This allows the emulator to properly handle error code 2056-2306
reported by Minecraft and other games, preventing undefined
behavior when encountering unknown module errors.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-13 20:14:04 +10:00
Zephyron
19faff40cd fix: socket assertion crashes and add Nex service stub
- Replace socket option assertion failures with proper error returns
- Add WSAENOPROTOOPT/ENOPROTOOPT error handling
- Fix LINGER and option value size validation
- Add Network::Errno::OTHER translation
- Implement basic Nex service stub for error code 2306-0520

Fixes crashes in Minecraft and other games when encountering unsupported
socket operations or attempting to use Nintendo's online services.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-13 19:30:40 +10:00
Zephyron
ba9dead3ee Stub VOTE_vtg implementation with warning log 2025-11-12 19:16:12 +10:00
Zephyron
16f815a7b9 Improve mouse wheel scrolling in configuration dialogs
Enable mouse wheel scrolling throughout scroll areas instead of
requiring hover over scrollbars. Add event filter to forward wheel
events to scrollbars. Fix Input tab scrolling by only consuming
wheel events in ConfigureInputPlayer when actively mapping inputs.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-12 16:41:57 +10:00
Zephyron
d3ae46a353 Fix network settings crash on Android
Register AIRPLANE_MODE setting in settingsItems map and add missing
string resources to prevent crashes when opening network options.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-12 16:15:44 +10:00
Zephyron
0b52871d9e Merge pull request 'feat: Add PC setup wizard with platform-specific paths' (#43) from feature/pc-setup-wizard into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/43
2025-11-12 06:12:37 +00:00
Zephyron
6d1a4be09b feat: Add PC setup wizard with platform-specific paths
Implement first-run setup wizard for PC with DuckStation-style UI.
Includes installation type selection, keys/firmware installation,
game directory configuration, and platform-aware path detection
for Windows, Linux, and macOS.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-12 16:10:15 +10:00
Zephyron
a4e70c51d9 Add PGO indicator to main window title and about dialogue
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-12 15:09:28 +10:00
Zephyron
4491abcdce chore: bump version to 0.11.0
Update version strings in about dialog and window title.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
0.11.0
2025-11-11 22:35:49 +10:00
Zephyron
69f3225fa8 fix: correct Little Nightmares 3 TitleID check for PC to LR recovery
The TitleID check was broken due to using || operator which evaluated
to 1 instead of a title ID value, preventing the recovery mechanism
from working.

- Fix title_ids.h: Replace incorrect || expression with proper
  LittleNightmares3Base constant (0x010066101A55A000)
- Update physical_core.cpp: Use GetBaseTitleID() to match both
  base and update title ID variants

This now correctly identifies Little Nightmares 3 and enables the
recovery mechanism that sets PC to LR when detecting null pointer
execution loops.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-11 20:05:07 +10:00
Zephyron
57e6141d4a Fix QJsonValue conversion ambiguity in game_list_worker.cpp
Explicitly cast modification_time to qint64 to resolve Linux build
error where std::int64_t conversion to QJsonValue is ambiguous.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-11 19:11:15 +10:00
Zephyron
e91b22511f Merge pull request 'Add Firmware 20.0.0-21.0.0 IPC support and stubs' (#37) from feature/firmware-20-21-support into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/37
2025-11-11 08:53:20 +00:00
Zephyron
d59eb9a1a8 Add Firmware 20.0.0-21.0.0 IPC support and stubs
This commit implements comprehensive firmware 20.0.0 through 21.0.0
support for Citron, including:

- Updated firmware version constants to 21.0.0 in api_version.h
- Updated HID service firmware version string to 21.0.0
- Added IPC command stubs for firmware 20.0.0+ in:
  * ISystemSettingsServer (commands 263, 264, 282, 283, 289, 300, 301, 306, 307)
  * IFirmwareDebugSettingsServer (command 24)
  * IApplicationFunctions (command 330)
  * IOlscServiceForSystemService (command 914)
  * IRemoteStorageController (commands 28, 901)
  * IService (migration) (commands 2250, 2260)
  * IAudioController (command 10200)

- Created new service interfaces with proper stubs:
  * IContinuousRecorder (grcsrv) - command 5 [20.2.0+] with 0x20-byte input
  * IDownloadContext (news) - command 4 [20.0.0+]
  * INotifyService (pdm:ntfy) - commands 100, 101 [20.0.0+] returning outinterfaces

- Added all new source files to CMakeLists.txt build system
- Fixed logging tag usage (Service_Migration instead of Service_MIG)
- Added required CMIF serialization headers for proper template instantiation

All stubs return success explicitly, eliminating the need for auto-stubbing.
All implementations follow Switchbrew documentation as closely as possible.

Based on Switchbrew documentation:
- https://switchbrew.org/wiki/21.0.0
- https://switchbrew.org/wiki/20.5.0
- https://switchbrew.org/wiki/20.4.0
- https://switchbrew.org/wiki/20.3.0
- https://switchbrew.org/wiki/20.2.0
- https://switchbrew.org/wiki/20.1.5
- https://switchbrew.org/wiki/20.1.1
- https://switchbrew.org/wiki/20.1.0
- https://switchbrew.org/wiki/20.0.1
- https://switchbrew.org/wiki/20.0.0

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-11 18:52:10 +10:00
Zephyron
1127d30fd8 Fix: Restrict PC return recovery to Little Nightmares 3 with adjusted threshold
Only applies to Little Nightmares 3 (title ID: 010066101A55A800).

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-10 20:55:54 +10:00
Zephyron
85a41cba46 Fix: Make PC return recovery title-specific for Little Nightmares 3
The PC < 0x1000 recovery mechanism introduced in commit fbb4f5c0
was causing issues for other games. This change restricts the recovery
to only apply when the title ID matches Little Nightmares 3.

- Add LittleNightmares3 title ID constant to title_ids.h
- Check program ID before applying PC return recovery in physical_core.cpp
- Recovery now only triggers for Little Nightmares 3 (010066101A55A800)
  to avoid affecting other games

Fixes issues caused by the general PC return recovery in other titles.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-10 20:00:55 +10:00
Zephyron
d78c598927 ui: Add modern toolbar to game list with view controls and sorting
Add a toolbar to the game list with:
- List/Grid view toggle buttons with icons and rounded corners
- Icon size slider for adjusting game icon sizes in real-time
- A-Z sort button that toggles between ascending/descending order
- Rounded corners styling throughout for a modern appearance

Key improvements:
- Fix games vanishing when adjusting slider during filtered search by
  updating icons in-place instead of recreating the model
- Preserve scroll position and selection when updating icon sizes
- Reuse filtered model instead of deleting/recreating to prevent view flicker
- Ensure consistent rounded icon rendering at exact target sizes
- Sync sort button state with Name column header sort order
- Preserve active filters when repopulating the game list

The toolbar uses themed icons with Qt standard icon fallbacks for
cross-platform compatibility.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-10 19:54:57 +10:00
Zephyron
9a64d5d072 perf: Add game metadata caching to speed up library loading
Implement a comprehensive caching system for game title metadata to
significantly improve game list loading performance for large libraries.

- Add CachedGameMetadata structure to store program ID, file type,
  size, title, icon, and modification time
- Implement LoadGameMetadataCache() and SaveGameMetadataCache() to
  persist cache to disk as JSON
- Integrate cache into ScanFileSystem() to skip expensive ReadIcon()
  and ReadTitle() operations when cached data is available
- Add automatic cache invalidation based on file modification time
- Cache respects existing UISettings::values.cache_game_list setting

The cache is stored in the game_list directory and automatically
invalidates entries when files are modified, ensuring data accuracy
while providing substantial performance improvements for subsequent
library scans.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-10 18:14:33 +10:00
Zephyron
0b0720671c Merge pull request 'fix: Multiplayer network fixes and airplane mode' (#35) from fix/multiplayer-network-improvements into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/35
2025-11-10 07:19:29 +00:00
Zephyron
be5c2f772c fix: Multiplayer network fixes and airplane mode
- Auto-select network interface for direct connect/host room
- Always recreate ENet client on join for fresh bindings
- Add airplane mode toggle (Desktop & Android)
- Fix JWT verification with empty verify_uid
- Improve content-type handling for JWT endpoints

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-10 17:16:45 +10:00
Zephyron
2943eebc9c Merge pull request 'feat(ui): add per-game cheat management tab with bulk toggle controls' (#30) from feature/cheat-toggle-ui into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/30
2025-11-07 09:18:17 +00:00
Zephyron
09f8c3a643 feat(ui): add per-game cheat management tab with bulk toggle controls
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-07 19:17:07 +10:00
Zephyron
5e1a136aa8 Merge pull request 'feat: implement multiplayer networking improvements for reduced latency' (#27) from feature/multiplayer-networking-improvements into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/27
2025-11-05 08:52:46 +00:00
Zephyron
5117ff3702 feat: implement multiplayer networking improvements for reduced latency
Major networking enhancements to improve multiplayer performance and
reduce desync issues in games like Mario Kart 8 Deluxe:

Network Performance:
- Add socket connection pooling in BSD service to reduce overhead
- Implement unreliable packet delivery for latency-sensitive game data
- Add packet reliability control for both ProxyPacket and LDNPacket
- Use ENET_PACKET_FLAG_UNSEQUENCED for small UDP packets (<1200 bytes)

Monitoring & Debugging:
- Add PacketStatistics struct to track sent/received/dropped packets
- Enhanced logging for proxy packet handling and socket lifecycle
- Periodic stats logging every 100 packets for diagnostics

Configuration:
- Update lobby_api_url and web_api_url to https://api.ynet-fun.xyz
- Add lobby API URL configuration support

Socket Management:
- Implement SocketPoolKey for efficient socket reuse
- Store domain/type/protocol info in FileDescriptor
- Max pool size limit (8 sockets per type) to prevent memory bloat
- Return closed sockets to pool when room is still connected

Protocol Updates:
- Add 'reliable' field to ProxyPacket and LDNPacket structures
- Update room.cpp packet handlers to respect reliability flags
- Maintain backward compatibility with default reliable=true

These changes significantly reduce packet latency for real-time game
traffic while maintaining reliability for control packets.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-05 18:52:06 +10:00
Zephyron
ee124b44e3 Merge pull request 'feat: add Snapdragon 8 Elite support and implement shader features' (#25) from feature/snapdragon-8-elite-support-and-shader-improvements into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/25
2025-11-04 10:43:32 +00:00
Zephyron
652a6a56ef feat: add Snapdragon 8 Elite support and implement shader features
- Add device detection for Snapdragon 8 Elite (device ID 0x43052c01)
- Disable shader float controls and 64-bit integer atomics on Qualcomm
  proprietary drivers to work around driver limitations
- Enable native BGR format support on S8 Elite (similar to S8 Gen 2)
- Implement VOTE_vtg instruction for vertex/tessellation/geometry shaders
  with proper single-thread semantics
- Replace stub warnings with detailed comments for FCSM_TR flow test and
  SR_WSCALEFACTOR special registers to document expected behavior

These changes improve compatibility with Qualcomm Snapdragon 8 Elite
devices and reduce spurious warnings by documenting shader features
that are correctly handled as conservative defaults.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-04 20:41:13 +10:00
Zephyron
4211689683 fix(set): stub ISettingsServer function 12 to fix AVGN 8-bit crash
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-04 17:43:52 +10:00
Collecting
b8021fa7e7 fix: Make Multiplayer Room Work even out of Game
Annoyed a few people that the Overlay was non-functional unless they were in-game. Now it works when not in-game.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-04 00:42:18 +00:00
Collecting
28a512eed0 revert/vcpkg
Tried adding ARM64 required stuff to see if it'd help but alas.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 21:16:57 +00:00
Collecting
c271b4f734 Update vcpkg.json
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 20:55:12 +00:00
Collecting
91369fb82d fix/arm64
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 20:48:54 +00:00
Collecting
2416632c32 revert/variable-fix
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 20:48:23 +00:00
Collecting
3ebed49194 fix/arm64
Last time i'm touching

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 20:23:26 +00:00
Collecting
4e9e0f9e65 fix/arm64
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 19:34:34 +00:00
Collecting
9571c14274 fix/arm64
Hopefully, otherwise I need to branch and figure this out.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 19:05:32 +00:00
Collecting
d52dd29233 fix/arm64
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 18:33:21 +00:00
Collecting
c85d9cfd57 fix/arm-64
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 18:25:00 +00:00
Collecting
a3a9d004a6 fix: ARM64 Support
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 17:08:01 +00:00
Collecting
38f8b04c04 add: ARM64 support for Windows
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 13:37:12 +00:00
Zephyron
a5024bb218 kernel: Use CheckMemoryStateContiguous in UnmapCodeMemory
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-11-03 16:19:46 +10:00
Collecting
e097974a66 fix: Race Condition when Updating UI/OS Theme
Testing and fiddling with our recent overhaul for changing OS/UI themes and updating on the fly resulting in a segmentation fault that also would not allow you to re-open the emulator unless changing back to the theme previously known by Citron, which obviously we don't want. Grabbed the core dump.

The backtrace pointed to a race condition in GMainWindow::UpdateUITheme, where a QTextStream was reading from a Qt resource stylesheet (.qss) that was being simultaneously reloaded by the theme change event. This led to an attempt to read from a dangling pointer.

This change resolves the issue by reading the entire stylesheet into memory in a single, atomic operation using f.readAll(). This prevents the underlying resource from becoming invalid during the read. The resulting QByteArray is explicitly converted to a QString via QString::fromUtf8 to satisfy Qt 6's stricter type requirements.

Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 03:05:28 +00:00
Collecting
424e4060bb Merge pull request 'fix(updater): Add General Tab Re-enable Checkbox For Updates If Previously Disabled For Start-up' (#20) from fix/re-enable-updater into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/20
2025-11-03 00:55:32 +00:00
Collecting
73094cdcdb fix/re-enable-updates
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 00:54:08 +00:00
Collecting
56ec56aa37 fix/re-enable-updates
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 00:53:37 +00:00
Collecting
846ae25af9 Merge pull request 'feat(updater): Add 'Don't check on startup' to update notification' (#19) from fix/auto-updater-check into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/19
2025-11-03 00:17:37 +00:00
Collecting
d1d93b7629 fix/check-for-updates
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 00:15:42 +00:00
Collecting
6aa483a9d2 fix/check-for-updates
Signed-off-by: Collecting <collecting@noreply.localhost>
2025-11-03 00:14:47 +00:00
Zephyron
8c2865fe0f Update README.md
Signed-off-by: Zephyron <zephyron@noreply.localhost>
2025-11-02 05:59:22 +00:00
Collecting
94287b27cd Merge pull request 'fix: Adjust & Update Theming for Specific Files from Previous Commit' (#17) from fix/add-updated-files-themes into main
Reviewed-on: https://git.citron-emu.org/Citron/Emulator/pulls/17
2025-11-02 05:19:24 +00:00