DSfix 2.3 – Steamworks works

So, much earlier than I expected to, I’m able to present what everyone was waiting for: DSfix 2.3 supporting the Steamworks version of the game!

There is only one change, and that is updating the address offsets for the FPS fix to work with the new version. All other features still work as expected, at least according to my testing.

That this is possible so quickly is thanks to the contributions of boowoo90 on this very blog. Is he an undercover From Software operative? Just a talented reverse engineering guru? Who knows, but he supplied the required addresses in no time at all.

Get the latest version of DSfix here.

As all but the packaging of this update is the work of someone else, don’t donate just for that! However, if you are just now getting into Dark Souls after it is freed from the scourge of GFWL and find DSfix helpful you can donate here.

And remember, if you use the FPS unlock, you need to use some other method to achieve Vsync. Options include your graphics card’s control panel, D3DOverrider, or simply running Dark Souls in borderless windowed fullscreen mode using DSfix.

FF13 article

In unrelated news, my latest article on PC Gamer just got published. It discusses the Final Fantasy 13 and 13-2 ports. Busy day today!

GeDoSaTo updates / DSfix in the Dark Souls Steamworks version


I just pushed a new GeDoSaTo update. Among some smaller stuff, it also includes two significant changes:

  1. Fixes to the Borderless Windowed mode forcing behaviour, which should greatly increase compatibility of that setting (and hopefully not break it in anything it already worked with!).
  2. A new “performance tracing” feature which I used in an upcoming article for PC Gamer, and which I’ll describe a bit more below.

Performance tracing allows you to record the performance of a segment of gameplay to a file. There is a keybinding for it ( togglePerfTrace) which you can configure like any other keybinding (now including modifier keys!), and after recording a sequence it will output a file such as this:

The first 3 lines give general information, including the total frames measured, total duration in milliseconds and average FPS over that duration. The following 3 lines give 99, 95 and 75 percentile effective frame times. These give you a quick idea of the overall smoothness of a game.

Finally, the rest of the file is a CSV (comma-separated value) recording of each frame’s times. The individual measurements are (i) CPU time from the start of the frame to the present call, (ii) GPU time according to D3D API measurements, and (iii) effective frame time from one present call to the next. You can use this detailed data to do analysis or generate graphs in your favourite statistics tool, like e.g. this one representing frame time distribution:

I realize that tools doing something very similar already exist, but they may not report all the information, or not be open source, or not be compatible with GeDoSaTo, so I integrated the functionality.

Dark Souls update / DSfix compatibility

The Dark Souls Steamworks migration update is now live. As I expected, most DSfix functionality I implemented (which is based on API call interception) remains operational, but the framerate unlocking (based on binary hooks) does not work with the new version. This part was implemented by Nwks, so we should hope that he is still around and interested in updating it for the latest version. If not, I can try, but it lies outside my expertise and could potentially take a lot of time (which I’d rather spend on other projects). Of course, there’s also the chance for anyone else to step in, as all the code is available on github.

For now, you can use DSfix with the new version as long as you disable the framerate unlocking feature in the .ini file.

DSfix 2.2

As promised, I fixed the other problems introduced by the recent Dark Souls patch. In addition to that, I added a new, more accurate (but also slower) ambient occlusion (AO) option based on a shader contributed by Asmodean. Also, screenshots are now stored as PNG, which greatly reduces the space required to e.g store silly 4k resolution screenshots.

Full changelist:

  • Updated AA, SSAO and HUD-less screenshot functionality to be compatible with latest Dark Souls version
  • Screenshots are now stored as PNG
  • Reduced number of state changes with AA and SSAO enabled
  • Added “VSSAO2″ advanced AO option (based on a configuration contributed by Asmodean)

You can download DSfix22 here.
And if you want to, you can donate here – though I should mention that I’m not sure whether there will be a lot of additional DSfix development in the future at this point.

Furthermore, I’d like to address a few things that have come up:

  • The source code for the latest version of DSfix is always available at github
  • If you still have issues unlocking the frame rate, make sure that:
    1. You are running a DSfix version which matches your game version (e.g. DSfix 2.1 and 2.2 only work with the latest Steam version of DS)
    2. You have tried disabling windows Data Execution Prevention for Dark Souls
  • I am not the author of DSMfix, so I can’t help you with making it compatible with the latest Dark Souls version, sorry.
  • If you use the FPS unlock, you need to use some other method to achieve Vsync. Options include your graphics card’s control panel, D3DOverrider, or simply running Dark Souls in borderless windowed fullscreen mode using DSfix.

Oh, and thanks to those who wished me good luck in the comments a week or so ago! I’m now a PhD! :D

DSfix 2.1

This is a quick patch to fix compatibility with the latest version of Dark Souls released 2 days ago.


  • Made FPS unlocking compatible with the updated version of Dark Souls released 2 days ago (thanks boowoo90 for providing the updated addresses)
  • Added a configurable pause key (built for taking nice action screenshots. Don’t try to use online. May break stuff horribly)
  • Changed frame rate calculation to perhaps prevent rare 59 FPS issue when playing for a long time

Points 2 and 3 are things I implemented months ago, but which were not yet released.

Note: some graphical features (I noticed at least SSAO) are still affected/broken by the patch. I’ll release a followup later, but I didn’t want to delay the major fix for people who want to play now.

Download DSfix21

I’m hosting this directly on my blog again, in the hope that there are no longer that many people interested in downloading it so that bandwidth isn’t an issue. I think it’s more convenient for everyone than some download site. Oh, and you can of course still donate.

I’m aware of the Dark Souls situation

Yes, I know Dark Souls has been patched, and that this broke the FPS unlocking feature of DSfix. You can stop emailing me, adding comments on the blog or contacting me through other venues now ;)

I’m currently quite busy (until the middle of next week where I have an important exam – maybe the final exam of my life), and since the FPS unlocking part of the mod is contributed by Nwks it’s not something I can immediately or easily fix.

Until a fix happens, you have two options:

  • Disable the FPS unlock. From early reports it appears like the other parts of the mod still work.
  • Revert to the original (pre-patch) files. Some people uploaded these and you should be able to find them, I don’t want to provide a direct link since I’m quite sure that’s not entirely legal.

Let me know in the comments if anything other than the FPS unlock feature is broken and I’ll have a look. Sorry that I can’t give you any better news (for now).



DSfix 2.0.1

With 2.0 yesterday I introduced an issue with the HUD modifications. I fixed it now. That’s all that has changed.

People are also reporting some stability problems and physics issues since the patch, but I’m not sure those are related to DSfix. On the bright side, it seems like in addition to fixing the stereo downmix, the patch also somewhat reduced the CPU load of the game.

As always, consider donating if you like the mod.

Get DSfix 2.0.1 here.

Edit: Mediafire decided to take the file down for some reason, here is a mirror.

You can also always get DSfix at the Dark Souls Nexus.

DSfix 2.0

Dark Souls was updated today, fixing the audio downmixing bug that had been present since launch (and maybe more?). Unfortunately, it also broke some features of DSfix, most significantly the FPS unlocking.

Well, with a lot of help from Clément Barnier, here is version 2.0 of DSfix which resolves these issues and adds a small new feature.


  • Updated the framerate unlock feature to work with the patched version of the game (Nwks)
  • Updated post-processing AA to work with the patched version of the game
  • Fixed an issue where hudless screenshots would sometimes not correctly capture some effects
  • Added “presentWidth” and “presentHeight” to the .ini for full control over (windowed) downsampling. For example, if you want to downsample from 2560×1440 to 1080p, you would use renderWidth 2560, renderHeight 1440, presentWidth 1920 and presentHeight 1080. If none of that makes sense to you just leave these values at 0 ;)

I hope this allows you to enjoy Dark Souls in its full glory again. Happy holidays!

As always, consider donating if you like the mod.

Get DSfix 2.0 here.

It’s 4 am here now so if I messed up anything in this release it will have to wait until tomorrow.

DSfix 1.9

I got the first external code patch for DSfix this week! I hope it’s a sign of more to come.


  • Added 2 new ambient occlusion algorithms: HBAO and SCAO. However, the existing VSSAO is still the best option in terms of visuals/performance.
  • Added a scale option for ambient occlusion on lower-end systems. Also useful if you want to downscale from a high resolution but not compute the SSAO at that resolution. This option works for all AO algorithms.
  • Disabled hotkeys when Dark Souls is not active. Previously, you could e.g. toggle the frame rate limit or take screenshots inadvertently when DS was not the active window.
  • Reinstated the texture filtering option with slightly better implementation.
  • Small bug fixes in frame rate limits calculation.
  • Rework WindowManager::resize to center the window along with resizing, and call on startup. Also fix small style issue with the borderless fullscreen toggle (wT)

The AO changes are rather big, the rest are small things that people have been asking for or that I wanted to do for a while.

As always, consider donating if you like the mod.

Get DSfix 1.9 at the Dark Souls nexus.
(alternative download location)

DSFix 1.8

It has been quite a while — I’ve been very busy at work for the past 3 weeks. I also haven’t had time to check/approve blog comments, so now there are 3700 in the moderation queue, and I’m sure at least 98% of those are spam. Sorry if you got stuck there!


  • Added an FXAA option in addition to SMAA. FXAA is blurrier, but also deals with sub-pixel aliasing better because of that. It’s also very slightly cheaper in terms of performance.
  • Added the ability to bind a key to toggle a 30 FPS limit for a short time. By default it’s bound to backspace. This is useful to fix issues with the FPS unlock, see below.
  • Greatly improved depth usage in the SSAO shader. This means that the SSAO effect is now more stable at different distances from objects.

As always, consider donating if you like the mod.

Get DSfix 1.8 at the Dark Souls nexus.
(alternative download location)

In other news, I believe that all the possible issues with the FPS unlock are now known, and there is a way to deal with most of them as of version 1.8:

  • Sliding down ladders can make you fall through the ground. Workaround: don’t slide down ladders with unlocked FPS.
  • Jumping/rolling distance is slightly reduced at 60 FPS. Workaround: in case you need to do one of the 2 or 3 jumps in the game that need maximum distance, use the new toggle key to toggle a 30 FPS limit for the jump, then toggle back to 60 after it.
  • Slope interactions are slightly different at 60 FPS compared to 30, which may make you “stuck” at small obstructions from time to time. Workaround: rolling if there is space, walking back and forth a bit if there is not. Toggling the 30 FPS lock for a second in the worst case.

I have been playing for 40 hours or so with unlocked framerate, in single-player, coop and pvp, and I had no other issues.

In conclusion, I hope everyone had a nice couple of weeks and backed Project Eternity!

DSfix 1.7

And one more for the road.


  • Re-implemented the FPS limiter. It’s quite exact now and also performed at a better point in time (before presenting the frame)
  • Made frame period calculation (for animation) slightly more exact
  • Added FPS thresholding for SMAA. What this means is that you can supply a value – say 45 FPS – and if the game is in danger of dropping below that, SMAA will be disabled. It will be re-enabled once the framerate is safely above the threshold again.

As always, consider donating if you like the mod.

Get DSfix 1.7 at the Dark Souls nexus.
(alternative download location)