A sexy achievement file parser with real-time notification and playtime tracking.
View every achievement earned on your PC whether it's coming from Steam, a Steam emulator, and more.
To see the full list of what this app can import please see the Compatibility section.
The original idea behind this app was that some steam emulators generate a text file where your unlocked achievements are stored. But they aren't very friendly to know which is which, here is an example :
[NEW_ACHIEVEMENT_1_1]
Achieved=1
CurProgress=0
MaxProgress=0
UnlockTime=0000000000
[SteamAchievements]
00000=NEW_ACHIEVEMENT_1_1
Count=1
So which achievement is NEW_ACHIEVEMENT_1_1 ? You'll have to ask the steam API or look online in a site like the steamdb to find out. So let's just do that automagically :)
Not as sexy as a directX Overlay but it's the next best thing.
Display a Windows toast notification when you unlock an achievement.
You can test notification in Settings > Debug to make sure your system is correctly configured.
There might be a slight delay between the event and the display of the notification when running powershell and loading a remote image can take a few seconds in some cases.
Game must be set to Window borderless for the notification to be rendered on top of it.
If you have enabled the souvenir option a screenshot will be taken
and saved in your pictures folder "Pictures\[Game Name]\[Game Name] - [Achievement Name].png"
- Try to set your game to Window borderless.
- Try to disable the automatic game and fullscreen rule in focus assistant (Win10)
or set them to priority and make sure that the UWP appID you are using is in your priority list (By default the Xbox appID(s) used by this app are in it). - Try to set checkIfProcessIsRunning to false in
%AppData%\Achievement Watcher\cfg\options.ini
Windows 8.1 : Don't forget quiet hours.
Windows 10 >= 1903 : New focus assist auto rule for fullscreen app set to alarm only by default prevents the notification from working out of the box.
The process watchdog.exe
is the one doing all the work so make sure it is running.
Not all games are supported, please see the compatibility section below.
You can also display a notification with:
Emulator/Client | Supported | Unlock Time | Ach Progress | Notification |
---|---|---|---|---|
- Codex - Plaza |
✔️ | ✔️ | ✔️ | |
- Goldberg Steam Emu - EMPRESS (Q4 2020) |
✔️ | ✔️ | ✔️ | ✔️ |
- Hoodlum - DARKSiDERS - Skidrow (> ~Q4 2019) |
✔️ | ❌ | ✔️ | |
Skidrow | ✔️ | ❌ | ❌ | ✔️ |
ALI213 | ✔️ | ❌ | ✔️ | |
RLD! | ✔️ | ✔️ | ❌ | |
3DM |
✔️ | ✔️ | ❌ | |
- SmartSteamEmu - SmartSteamEmu Reborn |
✔️ | ✔️ | ❌ | ✔️ |
- GreenLumaReborn - GreenLuma2020 |
✔️ | ✔️ | ❌ | ❌ |
CreamAPI | ✔️ | ❌ | ❌ | |
Legit Steam Client | your Steam profile must be public |
✔️ | ❌ | ❌ |
RPCS3 (PS3) | ❌ | ❌ | ❌ | |
LumaPlay (Uplay) | ✔️ | ❌ | ❌ | ❌ |
By default the following locations will be scanned for the files generated by steam emulators :
- %PUBLIC%\Documents\Steam\CODEX
- %appdata%\Steam\CODEX
- %ProgramData%\Steam\*\
- %localappdata%\SKIDROW
- %DOCUMENTS%\SKIDROW
- %appdata%\SmartSteamEmu
- %appdata%\Goldberg SteamEmu Saves
- %appdata%\EMPRESS
- %appdata%\CreamAPI
You can add your own folder in the app, just make sure that you select a folder which contains appid folder(s) :
|___ Custom dir
|___ 480
|___ 220
NB: To enable notification on a custom folder you need to click the bell icon next to it.
For Steam emulators that don't have a default folder (eg: ALI213) choose the dir where their cfg .ini file is;
The app will then parse it and look for achievement data file from the chosen location.
"SkipStatsAndAchievements"
is set to dword:00000000
for that APPID.
You can choose to view none (default) / only installed / all owned Steam games.
Ach. are updated based on files timestamp in STEAM\appcache\stats
Public
.
Due to the server rate limit if you 've a huge Steam library it might not get all your games in one go.
If you are using your own steam web api key (see Steam Web API Key section below), this doesn't concern you.
Please add a folder in the app where rpcs3.exe
is located. The app will then look for achievement trophies for every game and every ps3 user.
Note that TROPCONF.SFM
is language specific; So for PS3 games, trophies will be in the language you are playing with.
As of this writing there is no unlock time : the trophies unlocked in a PS3 that has never been connected online doesn't contains timestamps.
Since there is no public API to get a Uplay game achievements info as of this writing there are limitations:
Uplay client must be installed in order to try to get the game's info from its cache.
To have the game info in the Uplay client cache you don't need to install the game but you need to have at least seen the achievement listing page of the game once in the Uplay client.
This app will keep and send the data to a remote server to build its own cache, when the server has the game info Uplay client is no longer required as the app will fetch the data from said server.
Therefore with time only newest game would require Uplay client in theory.
Options are stored in %AppData%\Achievement Watcher\cfg\options.ini
but most of them are configurable via the GUI
-
lang
default to user locale
Both UI and data from Steam. -
showHidden
default to false
Wether or not show hidden achievements if any. -
mergeDuplicate
default to true
Try to merge multiple achievement source for the same game. -
timeMergeRecentFirst
default to false
When merging duplicates, show the most recent timestamp instead of the oldest. -
hideZero
default to false
Hide 0% Game. -
thumbnailPortrait
default to false
Game thumbnail orientation: classic or portrait mode (Like the new Steam UI)
-
legitSteam
default to 0
Steam games : (0) none / (1) installed / (2) owned. -
steamEmu
default to true
Import Steam Emu achievements -
greenLuma
default to true
Import GreenLuma achievements stored in the registry -
rpcs3
default to true
Import RPCS3 trophies -
lumaPlay
default to false
Import lumaPlay achievements -
importCache
default to true
Import Watchdog's (Notification) cache as another source of achievement
Use this(true) + mergeDuplicate(true) + timeMergeRecentFirst(false) to correct/fix most SteamEmu quirks
-
notify
default to true
Notify on achievement unlocking if possible.
(AchievementWatcher.exe
doesn't need to be running for this, butwatchdog.exe
does). -
souvenir
default to true
Take a screenshot when you unlock an achievement in
"Pictures\[Game Name]\[Achievement Name].png"
-
showDesc
default to false
Show achievement description if any. -
rumble
default to true
Vibrates first xinput controller when unlocking an achievement. -
notifyOnProgress
default to true
Notify on achievement progress when possible. -
playtime
default to true
Notify on playtime tracking start/end. -
videoHighlight
default to 0
Record a short video when you unlock an achievement using the hardware encoder of your GPU (= low performance hit) in
"Videos\[Game Name]\[Achievement Name].mp4"
(0) disable / (1) NVIDIA (NVENC) / (2) AMD (AMF)This feature requires NVIDIA or AMD GPU with hardware-accelerated encoding capabilities.
-
customToastAudio
default to 1
Specifies the sound to play when a toast notification is displayed.
(0) disable-muted / (1) System default / (2) Custom sound specified by user -
toastSouvenir
default to 0
Display souvenir screenshot inside the toast (Win10 only).
(0) disable / (1) header (image crop) / (2) footer (image resized to fit)
Example:header footer Both will show the screenshot within their toast in the action center if there is enough space.
Otherwise there will be an arrow to show/hide (collapse). -
groupToast
default to false
Group toast by game within the Action Center
-
toast
default to true
Use powershell to create a Windows 8-10 toast notification. -
winRT
default to true
Use Windows 10 WinRT API if available for faster toast instead of PowerShell. -
balloon
default to true
Fallback to balloon tooltip on toast notification failure. -
websocket
default to true
Broadcast achievement to all connected clients
More info -
gntp
default to true
Send a gntp@localhost:23053 if available.
More info
👮 Change these values only if you know what you are doing.
-
timeTreshold
default to 10 (sec)
Amount of sec an achievement is considered achieved from its timestamp value before being discarded. -
checkIfProcessIsRunning
default to true
When an achievement file is modified; Wether to check or not if the corresponding game is running and responding.
Both options are mainly there to mitigate false positive. -
tick
default to 600 (ms)
Ignore file modification within specified timeframe to prevent spam of notification when a game triggers multiple file write at the same time.
Set it to 0 to disable this feature. -
iconPrefetch
default to true
If set to false notification icon is passed as an url.
It is the underlying transport system responsability to handle the download / cache of said icon.
For example you can see information of notification assets cached by the Windows notification system in the registry underHKCU\Software\Microsoft\Windows\CurrentVersion\PushNotifications\wpnidm
In some rare cases it can fail, time out, etc... resulting in a notification without any icon.
To work around this you can set this option to true and watchdog will handle the download and cache by itself and will pass the file path instead of the url.
Icons will be cached in
%appdata%\Achievement Watcher\steam_cache\icon\[appid]
When this option is set to true there will be an additional context menu 'Build icon notification cache' available in Achievement Watcher. Use this if you would like to download every game's icons beforehand.
-
appID
if not set, default to Xbox Game Bar if available otherwise to Xbox App
Notification appID (Application User Model ID).
Example:Name AppID Xbox Game Bar Microsoft.XboxGamingOverlay_8wekyb3d8bbwe!App Xbox App Microsoft.XboxApp_8wekyb3d8bbwe!Microsoft.XboxApp Xbox App (Win 8) microsoft.XboxLIVEGames_8wekyb3d8bbwe!Microsoft.XboxLIVEGames ⚠️ You need to use a UWP AppID otherwise you won't be able to remotely load ach. img.Watchdog is by default using Xbox AppID(s) for three main reasons :
- They are pre-shipped with Windows
- They are pre-set to your focus assistant priority list
- They are UWP app so we are allowed to remotely load img.
Some use of the Steam Web API to fetch data from Steam requires the use of an API Key.
If you leave the field blank in the settings section, it will automagically fetch said data.
An example of a server that feeds you the data is provided within this repo.
This service is not guarantee over time and is solely provided for your own convenience.
If you experience any issues please use your own Steam Web API key.
You can acquire one by filling out this form.
Use of the APIs also requires that you agree to the Steam API Terms of Use.
Endpoint: ws://localhost:8082
You can for example use this to create your own notification in an OBS browser source and the like for your streaming needs.
Achievement data are broadcasted to all connected websocket clients.
There is a 30sec ping/pong but normally it's handled by the browser so you shouldn't have to add code for it.
To help you there is a test command to send a dummy valid notification.
//Example
const ws = new WebSocket("ws://localhost:8082");
ws.onopen = (evt) => {
ws.send(JSON.stringify({cmd:"test"})); //dummy is only send to the client making the request
ws.send(JSON.stringify({
cmd:"test",
broadcast: true
})); //use broadcast option if you need to send the dummy to all connected clients
};
ws.onmessage = (evt) => {
console.log(JSON.parse(evt.data)); //JSON string
/* Output:
{
appID: steam appID,
title: game name,
id: achievement id,
message: achievement title,
description: achievement description if any,
icon: unlocked icon url,
time: timestamp from the Steam emu,
progress: //if it's a progress and not an unlocked achievement;
//Otherwise this property is not sent at all
{
current: current progress,
max: max progress value
}
}
*/
ws.close();
};
Endpoint: localhost:23053
Recommended gntp client is Growl for Windows (despite it being discontinued) Mirror download link
To customize the look of the toast please kindly see your gntp client's options.
If you are looking for the Achievement Watcher notification sounds they are in %windir%\Media
(Achievement___.wav)
Args:
--appid xxx [--name yyy]
URI:
ach:--appid xxx [--name yyy]
xxx is a steam appid
yyy is an optional steam ach id name
After the loading directly display the specified game.
And if specified highlight an achievement.
NB: This is what the toast notification uses in order to be clickable and open the game page highlighting the unlocked achievement.
I do my best to translate everything for every supported language by Steam, but it's rather difficult and I don't speak that much languages. Fluent in another language ? Any help to add/modify/improve would be greatly appreciated.
More details here
This software auto update itself via Windows scheduled tasks. There are .cmd files in the root directory to create, delete and manually run the tasks.
in %AppData%\Achievement Watcher
You will need node.js (>= 12.x), golang (>= 1.12) both with the same arch: in x86 or x64.
Innosetup 5 unicode with preprocessor and Inno Download Plugin
Golang cgo requires a gcc compiler installed and set in PATH (recommended : http://tdm-gcc.tdragon.net/download).
For node you globally need asar, json and pkg :
npm install -g asar json pkg
There will be some native_module to compile so you'll need :
VS2017, Python 2.7(node-gyp), and the Windows SDK 10.0.17134.0 (1803 Redstone 4)
Install node_modules
folders with npm install.cmd
Use buildme.cmd
in the root folder to build.
-
If pkg fetches a version different than
%userprofile%\.pkg-cache\v2.6\fetched-v12.2.0-win-x64
or you are building this in x86.
You need to updateservice\rcedit-updater.cmd
andservice\rcedit-watchdog.cmd
with the correct one. -
If you build this in x86 remove these lines in
setup\AchievementWatcher.iss
:
60 ArchitecturesInstallIn64BitMode=x64
61 ArchitecturesAllowed=x64
- Innosetup is expected to be installed in
C:\Program Files (x86)\Inno Setup 5
if that is not the case then updatebuildme.cmd
with the correct path.
Software provided here is to be use at your own risk. This is provided as is without any express or implied warranty.
In no event or circumstances will the authors or company be held liable for any damage to yourself or your computer that may arise from the installation or use of the free software aswell as his documentation that is provided on this website.
And for anything that may occur as a result of your use, or inability to use the materials provided via this website.
Software provided here is purely for informational purposes and does not provide nor encourage illegal access to copyrighted material.
Software provided here is not affiliated nor associated with Steam, © Valve Corporation and data from its API is provided as is without any express or implied warranty.
Software provided here is not affiliated nor associated with Uplay, © Ubisoft and data from its API is provided as is without any express or implied warranty.
Software provided here is not affiliated nor associated with any cracking scene groups.
Other trademarks, copyright are the property of their respective owners. No copyright or trademark infringement is intended by using third-party resources. Except where otherwise specified, the contents of this project is subject to copyright.