Skip to content

About

Rich Discord Presence for Clair Obscur: Expedition 33 with real-time combat detection, 115 Expedition Flags, and Endless Tower progression.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Clair Obscur: Expedition 33 - Discord Rich Presence

Clair Obscur: Expedition 33 — Discord Rich Presence

An autonomous, lightweight Windows companion bringing rich, real-time dynamic presence for Clair Obscur: Expedition 33 directly to your Discord profile.

Release Python Platform Code Style: Ruff Type Checked: Pyright License: MIT with Attribution VirusTotal: Transparent Audit

Download Executable
Total Downloads

Showcase • Key Features • Presence Matrix • Quick Start • Tray Controls • Architecture • Security • Issues & Feedback • License


🎬 Discord Status Showcase

Exploration & Combat Endless Tower Trials Anti-Spoiler Shield
Exploration & Battle Endless Tower Anti-Spoiler Shield
Live dynamic transition from zone exploration (Spring Meadows) to turn-based battle (Fighting: Lancelier). Real-time stage and trial progression (Stage 1, Trial 1) with multi-enemy encounter targeting. Instant one-click tray shield masking locations (Hidden Location) and encounters (In Combat).

✨ Key Features

  • Continuous Autonomous Detection: Runs quietly in the system tray and establishes a Discord Rich Presence session the moment the game begins running (SandFall-Win64-Shipping.exe or SandFall-WinGDK-Shipping.exe), cleanly disconnecting when the game closes.
  • Decoupled Presence Engine: Clean architectural separation between UI, presence formatting, and Discord IPC via immutable PresencePayload Data Transfer Objects (DTO), enabling headless presence management and deterministic testing.
  • Native Platform Abstraction Layer (core.platform): Robust cross-platform primitives (PlatformMutex, FileLock, PlatformRegistry) providing native Win32 named mutexes on Windows and POSIX advisory flock on Unix, eliminating low-level ctypes and winreg calls from business logic.
  • Multi-Target Process Unification: First-class simultaneous support for both Steam (SandFall-Win64-Shipping.exe) and PC Game Pass / Microsoft Store (SandFall-WinGDK-Shipping.exe) game editions with dynamic process resolution.
  • Universal 20-Language Localization: Full native presence support across all 20 officially supported game languages extracted 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.
  • 100% Checkpoint & Trial Symmetry: All 765 official checkpoint tags and all 33 Endless Tower stages & trials are fully mapped with localized titles across all 20 languages.
  • Single Source of Truth (SSOT) Asset Catalog: Centralized localization templates and domain data into assets/game_data.json, formatted with Prettier.
  • Zero Static Type Suppressions: 100% strict type safety under Python 3.12+ and Pyright with zero type: ignore comments across the entire codebase.
  • Pure Real-Time Telemetry Pipeline: A headless, non-intrusive Lua bridge powered by UE4SS that hooks directly into AC_jRPG_BattleManager_C on the game thread. Detects battle transitions with zero latency and extracts live enemy/boss titles without memory scanning. Employs a strict 5.0-second wall-clock freshness window to instantly expire stale combat or zone telemetry when the game or battle concludes.
  • Interactive Telemetry Simulation Harness: Bundled developer CLI (tools/simulate_telemetry.py) for live Discord Rich Presence simulation, combat transitions, and Endless Tower testing without running the game.
  • Cross-Platform Telemetry Paths: Built-in compatibility path resolution (compat_paths.py) supporting Windows, Linux, and Steam Deck Proton/Wine environments.
  • Lightweight Native Discord IPC Client: Replaced third-party client wrappers with an in-house asynchronous wire client featuring intelligent rate-limiting, thread-safe cache invalidation, and automatic reconnection backoff.
  • Official Zone Normalization: Translates raw internal Unreal Engine map assets (Level_Goblu_Main -> Flying Waters, Level_SeaCliff -> Stone Wave Cliffs, Level_CleasFlyingHouse -> Flying Manor, Level_SimonArea -> The Abyss) into clean player-facing names.
  • Endless Tower & Super Boss Intelligence: Automatically resolves trials, stages, and Super Bosses (Simon the Divergent Star, Clea Unleashed, Duollistes, Painted Love).
  • Unified Anti-Spoiler Mode: One-click tray toggle to shield against spoilers when streaming or playing with friends.
  • Built-In Silent Auto-Updater: Checks GitHub Releases API in the background on startup, verifies SHA-256 integrity, and performs a 100% invisible in-place self-update with automatic app restart via a native Windows PowerShell trampoline.
  • Windows Startup Integration: Toggle automatic launch on Windows startup directly from the tray icon (HKCU\...\Run).

🎮 What Appears on Your Discord Profile

The status adjusts dynamically depending on your in-game language across all 20 supported languages (English, French, Italian, German, Spanish, Japanese, Korean, Russian, etc.):

State Details (Top Line) State (Bottom Line) Image Tooltip Elapsed Timer
Exploration (EN) Exploring <Zone Name> (<Flag Name>) (e.g. Sirene (Dancing Classes)) Clair Obscur: Expedition 33 Active session duration
Exploration (IT) In esplorazione <Nome Zona> (<Nome Bandiera>) (es. Sirène (Dancing Classes)) Clair Obscur: Expedition 33 Durata sessione attiva
Exploration (FR) En exploration <Nom de zone> (<Nom de drapeau>) (ex. Sirène (Dancing Classes)) Clair Obscur: Expedition 33 Durée de session active
Exploration (DE) Erkundung <Zonenname> (<Flaggenname>) Clair Obscur: Expedition 33 Aktive Sitzungsdauer
Exploration (JA) 探索中 <ゾーン名> (<フラグ名>) Clair Obscur: Expedition 33 セッション経過時間
Combat Encounter (EN) Fighting: <Enemy / Boss> <Zone Name> (<Flag Name>) Clair Obscur: Expedition 33 Active session duration
Combat Encounter (IT) In combattimento con: <Nemico> <Nome Zona> (<Nome Bandiera>) Clair Obscur: Expedition 33 Durata sessione attiva
Endless Tower (EN) Fighting: <Boss / Enemy> Endless Tower (Stage <X>, Trial <Y>) Clair Obscur: Expedition 33 Active session duration
Endless Tower (IT) In combattimento con: <Boss> Torre Infinita (Fase <X>, Prova <Y>) Clair Obscur: Expedition 33 Durata sessione attiva
Anti-Spoiler Enabled In Combat / In combattimento Hidden Location / Posizione riservata Clair Obscur: Expedition 33 Active session duration

Tip

Process PID Binding: The Discord Rich Presence client is bound directly to the live game executable (SandFall-Win64-Shipping.exe or SandFall-WinGDK-Shipping.exe). Discord attaches your custom Rich Presence status directly to the running game instance, preventing conflicting dual statuses.


🚀 Quick Start

  1. Download: Grab the latest Expedition33_RPC.exe from Releases.
  2. Launch: Double-click Expedition33_RPC.exe. It runs discreetly in your Windows system tray near the clock.
  3. Play: Start Clair Obscur: Expedition 33. Your Discord Rich Presence updates immediately.

🎛️ System Tray Controls

Right-clicking the tray icon gives you full control and real-time diagnostic status:

Menu Option Description
Game: Running (PID: X) / Not running Live status and process ID of the game executable
Location: <Zone Name> Current map/zone ([Hidden - Anti-Spoiler] when enabled)
Status: In Combat / Exploring Real-time combat state and active target name
Discord: Connected / Standby Discord IPC pipe connection status
Anti-Spoiler Mode [Enabled / Disabled] Toggles obscuring enemy names and location zones
Combat Bridge [Installed / Install Now] Toggles deployment of the headless UE4SS combat bridge
Start with Windows [X / ] Toggles automatic launch on Windows login via registry
Check for Updates / Update to vX.X.X Checks for releases and applies one-click self-update
Exit Disconnects Discord RPC and terminates the background process

🏛️ Technical Architecture

The codebase follows a clean, modular 4-tier architecture designed for high maintainability, separation of concerns, and full static type safety:

src/expedition33_rpc/
├── __init__.py               # Lazy exports (__version__, main, GameDetector, GameState)
├── __main__.py               # CLI entrypoint (`python -m expedition33_rpc`)
│
├── core/                     # Application lifecycle, platform abstraction & presence
│   ├── app.py                # Single-instance application entrypoint
│   ├── orchestrator.py       # Headless AppOrchestrator lifecycle coordinator
│   ├── platform.py           # Native OS abstraction (PlatformMutex, FileLock, PlatformRegistry)
│   ├── presence.py           # Decoupled PresencePayload DTO
│   ├── settings.py           # Persistent configuration management
│   ├── startup.py            # Windows autostart management via platform abstraction
│   └── resources.py          # Bundled asset path resolution
│
├── detection/                # Game state detection and telemetry pipelines
│   ├── compat_paths.py       # Cross-platform IPC paths (Windows, Linux Proton)
│   ├── detector.py           # GameDetector with BridgeStateProvider & GameState
│   ├── game_data.py          # 20-language asset catalog, regexes & Endless Tower trials
│   ├── normalization.py      # Pure domain string normalization routines
│   └── timer_tracker.py      # ZoneTimerTracker for smooth timer persistence
│
├── integrations/             # External services & installers
│   ├── bridge_installer.py   # Automatic UE4SS combat bridge deployment
│   ├── discord_rpc.py        # Decoupled native Discord IPC client (PresencePayload)
│   └── updater.py            # In-app silent updater with SHA-256 verification
│
├── ui/                       # Graphical user interface & presentation
│   ├── presentation.py       # Pure presentation formatting logic producing PresencePayload
│   └── tray_app.py           # Windows System Tray icon, menu & notifications
│
└── assets/                   # Static resources
    ├── bridge.zip            # Pre-compiled headless UE4SS mod package
    ├── game_data.json        # 20-language SSOT asset catalog
    ├── icon.ico              # Windows executable icon
    └── icon.png              # System tray & notification icon

🔒 Security, Verification & Antivirus Transparency

All binaries published under Releases are built automatically in isolated, clean virtual machines via GitHub Actions (see .github/workflows/release.yml). We provide complete, unedited transparency regarding security scans, checksums, and false positives.

🛡️ Live VirusTotal Analysis Reports

During every automated release build, all compiled artifacts are submitted directly to VirusTotal and scanned by 70+ industry security vendors. You can inspect the permanent public reports for the latest release:

Artifact SHA-256 (Prefix) Detection Ratio Permanent Report
Expedition33_RPC.exe fbaaa01b...d9b5 65 / 71 Clean (6 Heuristic Flags) 🛡️ Inspect Report
bridge.zip f5dc985b...eb2c 63 / 64 Clean (1 Generic) 🛡️ Inspect Report
📋 Click to view full SHA-256 Checksums
fbaaa01ba5bf61d2034ce1b15fed58497674df3f5705b17432a37d10ddc8d9b5  Expedition33_RPC.exe
f5dc985bd9cb7c72c048c6ac1c29a8f920f89e9c3dc2e5d1aba336c5bd4eb82c  bridge.zip

Note

Zero Threats Detected by Leading Vendors: The vast majority of top-tier antivirus suites — including Kaspersky, Bitdefender, Avast, AVG, ESET-NOD32, Sophos, CrowdStrike Falcon, Symantec, and TrendMicro — confirm that all binaries are 100% clean and undetected.


🔍 Technical Breakdown of False Positives

If your antivirus or Windows SmartScreen displays an alert, here is exactly why it happens and why the binaries are safe:

1. Why Expedition33_RPC.exe shows 6 heuristic detections:

  • Exact Detection Breakdown (6 / 71 Vendors):
    • Microsoft: Trojan:Win32/Wacatac.B!ml (Automated Cloud ML heuristic guess; !ml stands explicitly for Machine Learning)
    • SentinelOne (Static ML): Static AI - Suspicious PE (Static machine learning heuristic on self-extracting PyInstaller binary header)
    • Elastic: Malicious (high Confidence) (Generic heuristic flag on packed executable layout)
    • Bkav Pro: W32.Malware.15AC2E30 (Algorithmic signature mismatch on unsigned binary)
    • SecureAge: Malicious (Cloud whitelist absence for unsigned open-source binaries)
    • Arctic Wolf: Unsafe (Generic reputation score heuristic)
  • Why PyInstaller Triggers Machine Learning Heuristics:
    • Expedition33_RPC is packaged using PyInstaller, which bundles Python 3.12 and dependencies into a self-extracting executable. Because some malware authors also package malicious scripts using packers, automated cloud ML heuristics frequently misclassify fresh, unsigned PyInstaller binaries under generic names like Wacatac.B!ml.
    • These engines also flag legitimate Windows API calls: creating a named Windows mutex (used to enforce a single running instance of the tray app) and querying running processes via psutil (used solely to detect when SandFall-Win64-Shipping.exe or SandFall-WinGDK-Shipping.exe launches or exits).
  • Lack of Expensive EV Code-Signing Certificate:
    • Commercial software publishers pay hundreds of dollars per year ($400+/year) for Extended Validation (EV) certificates to bypass SmartScreen and heuristics. As a free, open-source community tool, Expedition33_RPC is unsigned, so automated heuristics assign it a default "low reputation" score until enough community reputation builds.

2. Why bridge.zip shows 1 detection:

  • UE4SS Mod Loader Hooking (Jiangmin: Trojan.Generic.huhtf):
    • bridge.zip packages the pre-compiled, open-source UE4SS framework (UE4SS.dll + dwmapi.dll proxy).
    • To communicate directly with the game thread without invasive memory editing, UE4SS uses a standard DLL proxy chain (dwmapi.dll). One scanner flags this DLL proxy technique as generic mod hooking, while 67 out of 68 vendors recognize it as completely benign.

🛡️ How to Verify and Run Safely

Cryptographic SHA-256 Checksum Verification

Every release publishes a SHA256SUMS.txt file created during the GitHub Actions build. You can verify your downloaded binary locally in PowerShell:

Get-FileHash .\Expedition33_RPC.exe -Algorithm SHA256

Compare the output with the table above or the checksums on the release page.

Windows SmartScreen Prompt

On first launch, Windows SmartScreen may display "Windows protected your PC":

  1. Click More info.
  2. Click Run anyway.

100% Open Source — Build from Source

If you prefer not to use pre-compiled binaries, you can inspect the full source code and build it locally with complete autonomy:

git clone https://github.com/SolaneHub/Expedition33_RPC.git
cd Expedition33_RPC
uv sync
uv run python build_exe.py

Or run the Python application directly without compilation:

uv run python -m expedition33_rpc

🛠️ Development & Building

Click to expand development instructions

1. Requirements

  • Python 3.12+
  • uv (recommended package and project manager)

2. Setup Virtual Environment

uv sync

3. Code Quality & Linting

# Lint checks
uv run ruff check

# Format check / auto-format
uv run ruff format

# Static type checking
uv run pyright

4. Build Standalone Executable Locally

uv run python build_exe.py

The compiled binary will be placed in dist/Expedition33_RPC.exe.


💬 Issues, Feedback & Bug Reports

We welcome bug reports, feature suggestions, and questions from the community! If you run into any issues or have an idea to improve Expedition33_RPC, feel free to reach out:

Type Description Link
🐛 Bug Report Found an issue, incorrect zone/flag detection, or crash? Submit Bug Report
✨ Feature Request Suggest new presence ideas, flag mappings, or enhancements. Request Feature
💭 Discussions General questions, troubleshooting, setup help, or feedback. Join Discussions
🔒 Security Report Discovered a vulnerability? Disclose it safely and privately. Security Policy

📋 Before Opening an Issue

  1. Check Existing Issues: Search open issues and closed issues to see if the topic has already been addressed.
  2. Update to Latest Version: Verify that you are running the latest release from Releases or through the in-app automatic updater.
  3. Provide Context: When reporting a bug, please include:
    • Application version (e.g. v2.0.6)
    • Game edition (Steam, PC Game Pass / Xbox, etc.)
    • Combat Bridge status (Installed via tray or automatic deployment)
    • Windows OS version
    • Clear steps to reproduce and any relevant screenshots or logs

📜 License, Privacy & Terms

This project is licensed under the MIT License (with Attribution) — see the LICENSE file for details. Any redistribution, fork, or derivative work must retain prominent attribution to the original author (SolaneHub) and include a visible link back to the project repository: https://github.com/SolaneHub/Expedition33_RPC.

For transparency and Discord Developer compliance, review our Privacy Policy (100% zero-data, strictly local) and Terms of Service.

Clair Obscur: Expedition 33 is a trademark of Sandfall Interactive / Kepler Interactive. This application is an unofficial, community-made tool and is not affiliated with or endorsed by Sandfall Interactive.

About

Rich Discord Presence for Clair Obscur: Expedition 33 with real-time combat detection, 115 Expedition Flags, and Endless Tower progression.

Topics

Resources

Security policy

Stars

0 stars

Watchers

0 watching

Forks

Releases

Contributors

Languages