Skip to content

A sexy achievement file parser with real-time notification and playtime tracking. View every achievements earned on your PC whether it's coming from Steam, a Steam emulator, and more.

License

Notifications You must be signed in to change notification settings

gust500/Achievement-Watcher

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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 :)

Notification on achievement unlocking

Not as sexy as a directX Overlay but it's the next best thing.
Display a Windows toast notification when you unlock an achievement.
⚠️ Please verify your Windows notification and focus assistant settings for the toast to work properly.
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"

🚑 Not seeing any toast notification ? Quick fix :

  • 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:

Compatibility :

Emulator/Client Supported Unlock Time Ach Progress Notification
- Codex
- Plaza
✔️ ✔️ ⚠️ If available ✔️
- Goldberg Steam Emu
- EMPRESS (Q4 2020)
✔️ ✔️ ✔️ ✔️
- Hoodlum
- DARKSiDERS
- Skidrow (> ~Q4 2019)
⚠️ Via user custom dir ✔️ ✔️
Skidrow ✔️ ✔️
ALI213 ⚠️ Via user custom dir ✔️ ✔️
RLD! ✔️ ✔️ ⚠️ On game exit
3DM
⚠️ %programdata% only
✔️ ✔️ ⚠️ Untested
- SmartSteamEmu
- SmartSteamEmu Reborn
✔️ ✔️ ✔️
- GreenLumaReborn
- GreenLuma2020
✔️ ✔️
CreamAPI ✔️ ⚠️ Imprecise timestamp
Legit Steam Client ⚠️ Steam must be installed and
your Steam profile must be public
✔️
RPCS3 (PS3) ⚠️ Via user custom dir
LumaPlay (Uplay) ✔️

Steam Emulator

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.

⚠️ Green Luma Reborn: only if the reg key "SkipStatsAndAchievements" is set to dword:00000000 for that APPID.

Legit Steam

You can choose to view none (default) / only installed / all owned Steam games.
Ach. are updated based on files timestamp in STEAM\appcache\stats

⚠️ This feature requires that Steam is installed and your Steam Profile is set to 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.

RPCS3 Playstation 3 Emulator

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.

LumaPlay

⚠️ Disabled by default; Subject to removal

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

Options are stored in %AppData%\Achievement Watcher\cfg\options.ini but most of them are configurable via the GUI

[achievement]

  • 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)

[achievement_source]

  • 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

[notification]

  • notify
    default to true
    Notify on achievement unlocking if possible.
    (AchievementWatcher.exe doesn't need to be running for this, but watchdog.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.

[notification_toast]

  • 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

[notification_transport]

  • 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

[notification_advanced]

👮 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 under HKCU\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.

Steam Web API Key

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.

Websocket

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();
};

GNTP

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)

Command Line Args | URI Scheme

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.

Translation Help

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

Auto-Update

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.

File cache & Logs

in %AppData%\Achievement Watcher

How to build

Prequisites:

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)

Build:

Install node_modules folders with npm install.cmd
Use buildme.cmd in the root folder to build.

Notes:

  • 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 update service\rcedit-updater.cmd and service\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 update buildme.cmd with the correct path.

Legal

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.

About

A sexy achievement file parser with real-time notification and playtime tracking. View every achievements earned on your PC whether it's coming from Steam, a Steam emulator, and more.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 69.4%
  • CSS 14.3%
  • HTML 9.8%
  • Inno Setup 5.7%
  • Batchfile 0.8%