Scar Achievements and Platform Services
Steam and EOS. One dropdown. One node.
A Blueprint-first plugin that gives you one clean API for every online platform service a shippable game needs: achievements, stats, leaderboards, friends, sessions, cloud save, rich presence and the platform overlay. Pick a platform in one dropdown, call one node, and the plugin routes the call, handles login, retries, queuing and error reporting, and falls back to a local save file when no online platform is reachable.
- Engine support
- Unreal Engine 5.2 to 5.7
- Version
- 3.0.0
- Backends
- Steam, EOS, Steam + EOS, Local / Offline
What you get
- One API across Steam, EOS, both at once, or fully offline
- Achievements, stats, leaderboards, friends, sessions, cloud save, rich presence and overlay
- Dual mode mirrors writes to both platforms, and one failing never stops the other
- Local fallback saves to a file when no platform is reachable
- Setup wizard, validation and runtime diagnostics
- No third-party SDKs bundled, so nothing is added to a non-Steam build
What this plugin does
Scar Achievements and Platform Services is a Blueprint-first plugin that gives you one clean API for every online platform service a shippable game needs: achievements, stats, leaderboards, friends, sessions, cloud save, rich presence and the platform overlay.
Pick a platform in one dropdown. Call one node. The plugin routes the call to the right platform, handles login, retries, queuing and error reporting, and falls back to a local save file when no online platform is reachable. The same Blueprint works on Steam, EOS, both at once, or fully offline.
No third-party SDKs are bundled. The plugin uses the built-in Unreal Steamworks and EOS integrations, so it stays compatible across engine versions and adds nothing to a non-Steam build at runtime.
Install and enable
- 01Copy the ScarAchievements folder into your project Plugins folder, or install from Fab.
- 02Open the project and rebuild if prompted.
- 03Confirm it is enabled: Edit > Plugins, then search for "Scar".
- 04For EOS or Steam + EOS, also enable Online Subsystem EOS and restart. Steam-only projects do not need this.
Quick start (Local mode, 5 minutes)
Local mode needs no credentials and works immediately. Use it to build your UI before wiring up a store.
- 01Go to Edit > Project Settings > Plugins > Scar Achievements.
- 02Set Target Platform to Local / Offline.
- 03In any Blueprint add Award Achievement, set Achievement Id to ACH_FIRST_STEP, and connect it to a key press.
- 04Press Play in a Standalone Game window. You see a green toast and a log line. The unlock is saved locally and survives restarts.
That is the entire integration. Switching to Steam later is one dropdown change plus credentials. Your Blueprints do not change.
Steam setup
Prerequisites: a Steamworks App ID (use 480 to test), and the Steam client running and signed in.
- 01Go to Project Settings > Plugins > Scar Achievements. Set Target Platform to Steam.
- 02Set Steam App ID to your App ID (480 for testing).
- 03Create a Data Table with row type Scar Achievement Definition Row, one row per achievement, where Row Name is the achievement API name.
- 04Assign it to Achievement Definitions Table.
- 05Click Apply Platform Config. This writes DefaultEngine.ini and the Achievement_N_Id list that Steam requires.
- 06Click Validate Setup, then restart the editor.
- 07Register the same achievement names in the Steamworks dashboard and publish to Live.
Steam does not authenticate in Play-In-Editor. Always test with the Play dropdown set to Standalone Game.
EOS setup
Prerequisites: Product Id, Sandbox Id, Deployment Id, Client Id and Client Secret from dev.epicgames.com. Enable the Online Subsystem EOS plugin and restart.
- 01Set Target Platform to Epic Online Services (EOS).
- 02Fill in the five EOS fields. Leave the Encryption Key blank to auto-generate a stable one.
- 03Click Apply Platform Config, then Validate Setup, then restart.
- 04Register achievements and stats in the EOS Dev Portal.
EOS login uses Epic Account Services. For local testing use the EOS Developer Auth Tool and launch with -AUTH_TYPE=Developer -AUTH_LOGIN=localhost:6300 -AUTH_PASSWORD=.
Steam and EOS setup (dual mode)
Dual mode dispatches every compatible write to both platforms at once. Steam is the primary and EOS is mirrored on top.
- 01Enable both Online Subsystem Steam and Online Subsystem EOS, then restart.
- 02Set Target Platform to Steam + EOS. Both credential groups are now shown, so fill in both.
- 03Click Apply Platform Config, which emits the INI for both platforms, then Validate Setup, then restart.
- 04Call the same nodes you always call. Unlocks, stats, scores and presence go to both platforms.
Guarantee: a Steam failure never stops EOS and an EOS failure never stops Steam. If EOS is not logged in, mirrored writes are skipped and logged, and the Steam copy still succeeds.
Blueprint node reference
Every node lives under a Scar category and needs no subsystem reference unless noted. Async nodes deliver results through an event dispatcher on the relevant subsystem.
Achievements (Scar | Achievements)
| Node | Purpose |
|---|---|
| Award Achievement | The one-stop node: unlock, or partial progress from 0 to 1. |
| Unlock Achievement | Full unlock. |
| Set / Add Achievement Progress | Partial progress. Commits at 1.0. |
| Increment Achievement (Steps) | Step-count wrapper. |
| Query All Achievements | Async refresh from the platform. |
| Is Achievement Unlocked / Get Achievement Info / Get All Achievements | Cached reads. |
| Get Active Achievement Platform | Returns Local, Steam, EOS or Steam + EOS. |
| Print Achievement System Status | Full diagnostics. |
Stats (Scar | Stats)
Set Stat Int/Float, Add Stat Int/Float, Get Stat Int/Float, Get Stat Value, Get All Stats, Push All Stats To Online Platform.
Player info (Scar | Platform | Player)
Get Player Name, Get Player ID, Get Platform, Is Player Logged In.
Overlay (Scar | Platform | Overlay)
Open Friends / Achievements / Invite Overlay, Open Store Overlay (Steam), Open Community Overlay (Steam), Open Web URL, Is Overlay Available.
Rich presence (Scar | Platform | Presence)
Set Rich Presence, Set Rich Presence Key/Value, Clear Rich Presence.
Friends (Scar | Platform | Friends)
Read Friends (async, bind On Friends Read) and Get Friends. Friend fields: Display Name, Player Id, Is Online, Is Playing This Game, Status Text, Platform.
Leaderboards (Scar | Platform | Leaderboards)
Submit Leaderboard Score (bind On Leaderboard Submitted), Read Leaderboard (bind On Leaderboard Read), Get Leaderboard Entries. Entry fields: Player Name, Player Id, Rank, Score.
Sessions (Scar | Platform | Sessions)
Get Scar Session Subsystem, Create Session, Find Sessions, Join Session By Index, Destroy Session, Start / End Session, Get Found Sessions, Has Active Session. On Session Joined travels you to the host automatically.
Cloud save (Scar | Platform | Cloud)
Cloud Save Game, Cloud Load Game, Is Cloud Available. Always writes a local mirror.
Diagnostics and setup (Scar | Platform | Setup)
Print Platform Diagnostics, Run Setup Validation, Print Setup Report.
Feature walkthroughs
Achievement and progress
Event (enemy defeated)
-> Award Achievement (Achievement Id = "ACH_FIRST_KILL")
On kill (progress achievement):
-> Add Achievement Progress (Id = "ACH_100_KILLS", Delta = 0.01)Stats
On kill: Add Stat Int (Stat Id = "STAT_KILLS", Delta = 1)
On lap done: Set Stat Float (Stat Id = "STAT_BEST_LAP", Value = LapTime)
Read: Get Stat Int (Stat Id = "STAT_KILLS")Leaderboards
Submit: Submit Leaderboard Score (Name = "HIGH_SCORES", Score = 12345)
Read: Get Scar Platform Subsystem -> bind On Leaderboard Read
Read Leaderboard (Name = "HIGH_SCORES", Count = 10)
On Leaderboard Read (Success, Entries) -> For Each -> build a rowFriends
Get Scar Platform Subsystem -> bind On Friends Read
Read Friends
On Friends Read (Success, Friends) -> For Each -> show name + statusSessions
Host: bind On Session Created -> Create Session (4)
On Success -> Open Level (YourMap, Options = "listen")
Client: bind On Sessions Found, On Session Joined
Find Sessions (20) -> build a server row per result (store Search Index)
Join button -> Join Session By Index (Search Index)
On Session Joined (Success) -> plugin travels you to the hostCloud save
Save: fill a USaveGame -> Cloud Save Game (obj, "PlayerProfile")
Load: Cloud Load Game ("PlayerProfile")
On Cloud Load Complete (Success, SaveGame) -> Cast -> read fieldsRich presence and overlay
Set Rich Presence (Status Text = "In Main Menu")
Open Friends Overlay / Open Store Overlay / Open Web URL (Url)Setup wizard and diagnostics
- Project Settings buttons: Apply Platform Config (writes INI, encryption key and achievement IDs), Validate Setup (pre-launch check), plus dashboard links.
- At runtime: Print Setup Report (red, yellow or green with fix hints), Print Platform Diagnostics, Print Achievement System Status.
- Developer console (non-Shipping): Scar.Diag, Scar.Award, Scar.Stat, Scar.Leaderboard, Scar.Friends, Scar.Presence, Scar.Session, Scar.Cloud.
- Launch with -ScarAutoValidate to run a one-shot self-test of every service after login and print the results.
Manual testing guide
Follow these steps to validate a build with real credentials.
- 01Set Target Platform and credentials, click Apply Platform Config, then Validate Setup (expect all green), then restart.
- 02Play > Standalone Game with the Steam client running, and EOS logged in for EOS or dual mode.
- 03From BeginPlay call Print Setup Report and Print Achievement System Status. Confirm Login = LoggedIn and, in dual mode, EOS Mirror Ready = YES.
- 04Award Achievement, then confirm the green toast and the Steam overlay notification. In dual mode confirm the "[Dual] EOS mirror unlock committed" log line.
- 05Set Stat Int, then confirm the stat write log lines.
- 06Submit Leaderboard Score then Read Leaderboard, and confirm On Leaderboard Read fires with rows.
- 07Read Friends, Open Friends Overlay and Set Rich Presence, confirming each.
- 08Host a session on one client and Join from a second, then confirm travel.
- 09Cloud Save Game then Cloud Load Game, and confirm the loaded value round-trips.
- 10Repeat for Steam, EOS and Steam + EOS. Read results in Saved/Logs/.log at full verbosity.
Troubleshooting
| Symptom | Fix |
|---|---|
| "Using local fallback" when you picked Steam or EOS | Run Print Setup Report. Usually Apply Platform Config was not clicked, or the editor was not restarted. |
| Achievement write failed | The ID is not registered on the dashboard, or the schema is not published to Live. |
| EOS OSS not loaded | Enable Online Subsystem EOS in the .uproject and restart. |
| EOS AutoLogin failed | Credentials are missing, or you are not logged in via EAS or the Dev Auth Tool. |
| Nothing happens in PIE | Steam does not authenticate in PIE. Use Standalone Game. |
| Cloud save reports success but nothing online | Enable Cloud for your app on the dashboard. The local mirror still works. |
FAQ
| Question | Answer |
|---|---|
| Do I need C++? | No. Every feature has a Blueprint node. |
| Does it work offline? | Yes. Local mode saves to a file. |
| Can I switch platforms without changing Blueprints? | Yes. Change the dropdown and re-apply config. |
| Does dual mode double my code? | No. One node dispatches to both. |
| Which engine versions? | 5.2 through 5.7. |
| Is anything added to a non-Steam build? | No. The Steam SDK is delay-loaded. |
Support and version
Version 3.0.0. Unreal Engine 5.2 to 5.7. Platforms: Windows, Mac and Linux.
For the full written manual, Blueprint and C++ API references, architecture and performance notes, and the marketplace kit, see the docs folder inside the plugin.
Stuck on something?
We answer every serious message ourselves. Discord is the fastest way to get an answer from the person who built the plugin.