Skip to content

Releases: SolaneHub/Expedition33_RPC

v2.0.7

Choose a tag to compare

@github-actions github-actions released this 18 Oct 23:54

Fixed & Hardened

  • Catalog Key Symmetry & Translation Restoration (assets/game_data.json, tests/detection/test_game_data.py):
    • Restored 90 missing localized checkpoint alias keys across all 19 non-Italian catalogs, guaranteeing 100% key symmetry and allowing foreign clients to cleanly resolve Italian in-game flags to their localized equivalents.
    • Eliminated special-case language exclusions in test assertions (if lang != "it":), enforcing strict bidirectional catalog symmetry.
  • Cross-Platform Bridge Discovery (integrations.bridge_installer):
    • Fixed path separator handling on non-Windows environments using pathlib.Path joins, preventing malformed paths with literal backslashes.
    • Added Linux and Steam Deck standard Steam library discovery roots (~/.local/share/Steam, ~/.steam/steam, ~/.var/app/...).
  • COM STA Initialization for Directory Picker (ui.tray_app):
    • Wrapped SHBrowseForFolderW with OleInitialize and OleUninitialize in _prompt_folder_selection, preventing COM initialization failures with BIF_NEWDIALOGSTYLE.
  • Standalone Execution Bootstrapping (main.py):
    • Restored src directory insertion into sys.path in main.py, enabling direct execution without prior virtualenv editable package installation.
  • Save Games Path Test Coverage (tests/detection/test_compat_paths.py):
    • Added full test coverage for get_save_games_paths across Windows, Proton, Wine, and custom overrides.

Verification & Security

SHA-256 Checksums

169ab2e101b170cd5cc0b6bee82c9526cde7a5ab98929e64009100400bcf547f  Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3  bridge.zip

VirusTotal Analysis Reports

v2.0.6

Choose a tag to compare

@github-actions github-actions released this 18 Oct 23:39

Added

  • Cross-Platform Save Directory Resolution (detection.compat_paths, detection.save_reader):
    • Implemented get_save_games_paths() and resolve_user_data_path() supporting Proton, Wine, SteamOS, and Linux compat paths (STEAM_COMPAT_DATA_PATH, WINEPREFIX, and standard Steam library roots).
    • Integrated dynamic user data path resolution into SaveFileReader for robust multi-environment save parsing.
  • Dynamic Process & Main Menu Catalog Access (detection.game_data):
    • Added get_target_process_names() and get_main_menu_tokens() dynamically reading custom overrides from game_data.json with safe built-in fallbacks.

Fixed & Hardened

  • Safe Bridge Extraction & Path Normalization (integrations.bridge_installer):
    • Added zip-slip directory traversal guards (is_relative_to) during Lua bridge archive decompression.
    • Switched file extraction to memory-safe shutil.copyfileobj streaming and fixed drive-root path formatting across candidate search directories.
    • Enhanced error diagnostics with explicit permission feedback if the game process is locking files.
  • Memory-Mapped Save Point Inspection (detection.save_reader):
    • Migrated EXPEDITION_*.sav parsing to read-only memory-mapping (mmap.mmap), eliminating complete file loading into memory while searching for LastUsedSavePoint.
    • Added defensive guards against zero-byte corrupted save files.
  • Accurate Tower Trial Matcher (detection.normalization, detection.detector):
    • Replaced substring matching with set-based alphanumeric token comparison in resolve_tower_trial, eliminating false positive collisions between normal enemies and trial bosses.
    • Refined Endless Tower detection in GameDetector to ignore false hits on zones such as "workshop".
  • Discord Presence Fingerprint Completeness (integrations.discord_rpc):
    • Extended presence cache fingerprint to track large_text, small_image, small_text, party_id, and party_size, ensuring presence updates immediately when secondary metadata changes.
  • Native Win32 Directory Picker (ui.tray_app):
    • Replaced Tkinter file dialog with native Win32 SHBrowseForFolderW dialog via ctypes, eliminating GUI freezes and window management overhead.
  • Thread-Safe Settings Persistence (core.settings):
    • Protected SettingsService state modifications with reentrant lock (threading.RLock) and isolated temporary file writing using process and thread identifiers.
  • Win32 Shared File Reading (core.platform):
    • Ensured reliable OS file descriptor closure via closefd=True during shared text reading.

Changed & Optimized

  • Catalog Normalization & Size Optimization (assets/game_data.json):
    • Deduplicated punctuation and whitespace variations across all 20 language catalogs, slashing file size by ~40% (~18,500 lines cleaned) without loss of semantic coverage.
  • Optimized VirusTotal Upload Streaming (.github/scripts/virustotal_scan.py):
    • Optimized multipart payload assembly via preallocated bytearray and memoryview slice reads.
    • Standardized JSON report format with structured file verification stats and generated timestamps.
  • Test Suite Expansion & CI Speedup:
    • Added unit test suites for VirusTotal scan reporting, save reader mmap/empty file handling, bridge installer zip-slip protection, detector tower edge cases, and normalization token matching.
    • Separated fast unit tests fail-fast from integration tests in GitHub Actions CI.

Verification & Security

SHA-256 Checksums

8f5dec31f6d10dde801c90714f4ee1e51a94518b29d975441d60edb1bb7d6f55  Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3  bridge.zip

VirusTotal Analysis Reports

v2.0.5

Choose a tag to compare

@github-actions github-actions released this 18 Oct 20:04

Fixed

  • Discord Wire Protocol 128 UTF-8 Bytes Boundary Clamping (ui.presentation):
    • Fixed truncate_presence_field to strictly clamp at the 128 byte UTF-8 wire protocol limit instead of character count.
    • Implemented safe byte-boundary decoding with errors="ignore", preventing packet rejections and IPC socket crashes when displaying multibyte languages (Chinese, Russian, Japanese, Korean, Arabic, emojis).
    • Added dedicated test coverage in tests/ui/test_presentation.py.

Changed & Optimized

  • Non-blocking Asynchronous Lua Bridge Auto-Installation (core.orchestrator):
    • Offloaded bridge.zip unzipping and filesystem modifications to a background daemon thread with guard flags and a 30s cooldown.
    • Eliminated telemetry polling loop jitter (0.5–2s freeze) and Discord socket heartbeat timeouts on game launch.
  • Clean Event Subscription Pattern (core.orchestrator, ui.tray_app):
    • Replaced runtime monkey-patching of orchestrator.on_update_available with formal subscribe_update_available() observer pattern returning an idempotent unsubscribe callback.
  • Simplified Settings Persistence Architecture (core.settings):
    • Replaced complex locking and nanosecond temp files with a streamlined typed Settings dataclass and atomic .replace() operations, with in-memory rollback on filesystem errors.

Verification & Security

SHA-256 Checksums

9eaf9330d6b953fff56270469aeae7624c9d9095fa724b98e0c4f889f7370489  Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3  bridge.zip

VirusTotal Analysis Reports

v2.0.4

Choose a tag to compare

@github-actions github-actions released this 18 Oct 10:34

Added

  • Persistent Checkpoint Save Reader Fallback (detection.save_reader):
    • Restored and modernized SaveFileReader (Python 3.12+, zero external dependencies) to dynamically read the active player save (EXPEDITION_*.sav).
    • Extracts LastUsedSavePoint and validates semantic zone matching, restoring checkpoint presence display in parentheses (e.g. Verso's Drafts (Candy Land)) even when the in-game save menu is closed.
    • Implemented cached binary inspection with filesystem mtime checking for zero overhead.

Fixed

  • Eliminated Engine Game Thread Freezes & Micro-Stutters:
    • Fixed severe periodic stutter (0.5–1.0s every 4 seconds) caused by UE4SS Lua bridge debug routines iterating FindAllOf("UserWidget") across 100,000+ UObjects and all streaming levels on the engine Game Thread.
    • Streamlined main.lua to O(1) level identification via UGameplayStatics::GetCurrentLevelName(), eliminating all level iteration and blocking disk I/O.
    • Updated bundled src/expedition33_rpc/assets/bridge.zip.

Verification & Security

SHA-256 Checksums

6d16c7e81a6e3258b0b799445eb43cf116ebdc626b5d7efdfe8218147061aef3  Expedition33_RPC.exe
527c18ec51b26892461b9ba64d0327bf62d2ccd1660862a855f7d69208cc09c3  bridge.zip

VirusTotal Analysis Reports

v2.0.3

Choose a tag to compare

@github-actions github-actions released this 14 Oct 19:29

Fixed

  • Settings Persistence Optimization & Responsiveness:
    • Implemented thread-safe in-memory caching and reentrant locking (RLock) in SettingsService, eliminating redundant disk reads during setting queries and toggles.
    • Adopted direct binary stream write with EAFP parent directory recreation, cutting hot-path UI toggle latency from ~12.6ms down to ~0.26ms.
    • Hardened multi-process temporary filename generation with os.getpid(), unique thread IDs, and high-precision timestamps to prevent collisions.
    • Added filesystem modification timestamp (st_mtime) tracking to automatically detect and merge external configuration file changes.
    • Suppressed debug standard output in tray menu actions to avoid terminal I/O latency regressions in headless test runners.

Verification & Security

SHA-256 Checksums

74ae0dfffcb8f397f3adbac06cd425f0b763fe0256381782c69e34b21349a9d8  Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7  bridge.zip

VirusTotal Analysis Reports

v2.0.2

Choose a tag to compare

@github-actions github-actions released this 14 Oct 16:14

Changed

  • Optimized Lazy Telemetry Catalog Loading:
    • Guarded game_data.__getattr__ with strict _LAZY_ATTRIBUTES whitelist before reading JSON catalogs, preventing premature 1.26MB file reads during Python module inspection.
    • Eliminated top-level catalog imports from normalization.py and presentation.py in favor of deferred module-attribute access.
  • Franciscan Architectural Refactoring & Pruning:
    • Extracted smoke test logic from core/app.py into dedicated core/smoke.py and registered PyInstaller hidden import.
    • Pruned unused ghost hash maps, redundant sentinels (_UnsetType), duplicate parameters, and unused platform lock wrappers.
    • Streamlined AppOrchestrator state change subscriber dispatching to ensure decoupled and concurrent multi-listener delivery.

Fixed

  • Process Lifecycle & Steam AppID Compatibility:
    • Decoupled process lifecycle validation from strict AppID dependency, preventing false disconnects on alternative distribution paths.
    • Hardened bridge provider injection in GameDetector to allow deterministic opt-out via bridge_provider=None using sentinel defaults.

Verification & Security

SHA-256 Checksums

6cadebb40797ffb42ff0f310497cd3c1bff2c5ba9345ac3c739d66c3fc3ee152  Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7  bridge.zip

VirusTotal Analysis Reports

v2.0.1

Choose a tag to compare

@github-actions github-actions released this 14 Oct 08:37

Fixed

  • Folder Selection Dialog Lifecycle & Process Isolation:
    • Isolated folder selection (_prompt_folder_selection) into a dedicated worker thread with its own clean Single-Threaded Apartment (STA) and Win32 message pump, eliminating deadlocks with pystray's system tray window message loop.
    • Bound native directory dialogs explicitly to the Tk root window (parent=root), ensuring proper window ownership hierarchy under Windows DWM.
    • Implemented guaranteed cleanup in finally: blocks with root.attributes("-topmost", False), root.update_idletasks(), root.update(), and root.destroy(), ensuring the dialog window closes and disappears immediately upon clicking Cancel or the window close (X) button without leaving frozen ghost windows.
    • Added comprehensive lifecycle and cancellation unit tests for folder selection.

Verification & Security

SHA-256 Checksums

c3f537314a951947630545e7225cbe4e60b6c49b9b3d017e7cb212a4cdabdc3f  Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7  bridge.zip

VirusTotal Analysis Reports

v2.0.0

Choose a tag to compare

@github-actions github-actions released this 14 Oct 00:00

Added

  • Decoupled Presence Engine (core.presence):
    • Introduced immutable PresencePayload Data Transfer Object (DTO) encapsulating all Discord rich presence state fields (state, details, large_image, large_text, small_image, small_text, start_timestamp, pid).
    • Completely decoupled DiscordRPCManager from the UI layer (ExpeditionTrayApp) and domain models: the presence client exclusively consumes PresencePayload, enabling pure headless operation and isolated unit testing.
  • Native Platform Abstraction Layer (core.platform):
    • Consolidated all operating system interactions into a unified platform module (core.platform):
      • PlatformMutex: Named Win32 Mutex on Windows with automatic POSIX advisory file lock (fcntl.flock) fallback on Linux/macOS.
      • FileLock: Robust cross-platform non-blocking file locking for atomic configuration updates.
      • PlatformRegistry: Safe abstraction over Windows Registry (winreg) with no-op fallbacks for POSIX platforms.
    • Completely eliminated direct low-level Win32 ctypes and winreg imports from application business logic.
  • Interactive Telemetry Simulation Harness (tools/simulate_telemetry.py):
    • Added standalone developer CLI tool for simulating game lifecycles, combat transitions, Endless Tower trials, and location changes in real-time or automated batch mode.
    • Added automated simulation regression tests (tests/detection/test_simulate_telemetry.py and tests/e2e/test_process_lifecycle.py), expanding test suite to 175 automated tests.

Changed

  • Zero Static Type Suppressions & 100% Pyright Strict Safety:
    • Eradicated all 12 static type suppressions (type: ignore) across production and test code.
    • Full codebase strict type compliance validated under Python 3.12+ and Pyright with 0 errors and 0 warnings.
  • Detection Kernel Purification & LRU Caching:
    • Standardized domain combat and exploration states around canonical Exploring domain tokens.
    • Replaced complex lazy data structures with standard Python functools.lru_cache and direct protocol bindings (BridgeProviderProtocol).
    • Implemented adaptive idle polling in detector to minimize background CPU usage when the game is not running.
  • Package Entrypoint Lazy Exports:
    • Modernized src/expedition33_rpc/__init__.py with PEP 562 module-level __getattr__ and __dir__, ensuring fast startup times by deferring heavyweight imports until accessed.

Verification & Security

SHA-256 Checksums

43f0e593e5612ad31bbae3eee3c247805f3c865d41e55d2b73017866d2b2523a  Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7  bridge.zip

VirusTotal Analysis Reports

v1.9.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 23:45

Added

  • Universal 20-Language Localization:
    • Extracted and normalized official in-game strings across all 20 officially supported languages directly from Unreal Engine .locres binary catalogs: English (en), Italian (it), French (fr), German (de), Spanish (es), Latin American Spanish (es-419), Japanese (ja), Korean (ko), Polish (pl), Brazilian Portuguese (pt-BR), Russian (ru), Simplified Chinese (zh-Hans), Traditional Chinese (zh-Hant), and more.
    • Guaranteed 100% key symmetry across all 765 checkpoint tags and 48 exploration zones in all 20 languages.
    • Fully mapped all 33 Endless Tower stages and trials from game data table ST_BattleTowerStages with localized stage and trial titles across all languages.
    • Localized Discord Rich Presence details and state presentation templates across all 20 languages.
  • SSOT Asset Catalog Architecture & Code Style Standards:
    • Consolidated presentation templates, localized strings, and domain dictionaries into src/expedition33_rpc/assets/game_data.json as the Single Source of Truth (SSOT).
    • Integrated Prettier formatting (.prettierrc.json, .prettierignore) and added automated Prettier validation in GitHub Actions CI.
  • Concurrency & IPC Hardening (FILE_SHARE_DELETE):
    • Enforced Win32 FILE_SHARE_DELETE sharing flags on Windows file handles when reading bridge telemetry files, eliminating race condition locks during concurrent file writes by the game's Lua thread.
  • Lua Bridge Integrity & Syntax Validation:
    • Embedded updated authentic UI token names inside the bundled bridge.zip asset.
    • Added automated Lua tokenizer and AST syntax validator harness (tests/harness/lua_validator.py) to prevent bridge script regressions during build time.

Changed

  • Dependency Injection & Callback Modernization:
    • Completed explicit Protocol-based Dependency Injection across AppOrchestrator, GameDetector, and UI layers.
    • Streamlined orchestrator communication from generic multi-consumer pub/sub buses to direct, typed 1-to-1 event callbacks.
    • Expanded automated test suite to 148 unit, integration, and E2E tests.

Verification & Security

SHA-256 Checksums

7a54eb7ff0a1c04f1cc7c2aba14c366167f51e31cae5b0b8f4733ed42af9afc2  Expedition33_RPC.exe
a0d04701a34331d045ae91fb7d003129ad859ec8e1d3bd6c4364c20665530ee7  bridge.zip

VirusTotal Analysis Reports

v1.8.0

Choose a tag to compare

@github-actions github-actions released this 13 Oct 23:45

Added

  • Multi-Target Process Unification (Steam & Game Pass WinGDK):
    • Added seamless simultaneous detection support for both Steam (SandFall-Win64-Shipping.exe) and PC Game Pass / Microsoft Store (SandFall-WinGDK-Shipping.exe) game editions.
    • Unified detection target configuration to target_process_names with dynamic process image resolution.
  • Immutable Process Context (GameProcessInfo):
    • Encapsulated PID, executable name, and resolved binary paths within immutable GameProcessInfo and GameState domain structures.
    • Bound Discord Rich Presence directly to the detected executable PID for both Steam and WinGDK targets, guaranteeing accurate Discord activity association.
  • Discord IPC Protocol Framing (DiscordFrameCodec):
    • Extracted binary length-prefix framing and JSON payload encoding into dedicated, unit-tested DiscordFrameCodec, eliminating nested wrapper abstractions.
  • Structural Protocol Typing:
    • Introduced clean typing.Protocol definitions for ProcessLike, BridgeInstallerProtocol, and StartupProtocol.
  • Precompiled Hash Lookup Acceleration:
    • Optimized checkpoint tag lookups using precompiled $O(1)$ dictionary lookups instead of repetitive regular expression scans.

Changed

  • Ultra-Fast Test Suite Execution:
    • Accelerated full test suite runtimes to under 2.2 seconds by replacing wall-clock sleep loops with deterministic iterations, lowering test HTTP server polling intervals to 0.01s, and injecting virtual time_provider clocks into telemetry providers.
  • Facade Encapsulation in AppOrchestrator:
    • Replaced ceremonial wrapper services with clean atomic facade methods (install_bridge_to, subscribe_update_available).
    • Added thread-safe state synchronization and re-entrant update subscription handling.

Fixed

  • PyInstaller Bundled UI Smoke Test in CI:
    • Hardened GitHub Actions release workflow with automated headless smoke testing of PyInstaller executable binaries, ensuring correct bundling of Tkinter, PIL, pystray, and platform dependencies.

Verification & Security

SHA-256 Checksums

13a3bdb1a276e95a3fd31cfcc14ae4256fd5d0368b9d9b2d694415e8bd639407  Expedition33_RPC.exe
3ba413bb69a8cffd93ecccea82526132957b69a699532c2a4a8d52470d45d2c6  bridge.zip

VirusTotal Analysis Reports