Firstly, please excuse the meta’ness of this post, it’s a verbalization on my thought process on the bug, to possibly help Codemasters and the Dirt team track down and squash the motion output crash within Dirt 3.
I built myself a motion simulator using the DIY kit available from SimXperience. I am not a sim racing expert by any means, I find the Codemasters racing games the most enjoyable, but they arnt really simulations like Assetto Corsa (or iRacing) is, so I know some hardcore sim racers discount them. The games I play the most on my rig are: Grid: Autosport, Dirt3, F1 2014 and Assetto Corsa.
The Dirt team at Codemasters released a new Complete Edition of Dirt3 a few weeks ago, after stripping out the last of GFWL (Games for Windows Live), which had a heavy integration in a lot of Codemasters games. This fixed a lot of menu and setup related issues that occurred after MS shut GFWL down last year.
With this new found dev interest in Dirt3, I was hoping that Codemasters could get on top of a bug that was introduced way back in version 1.2. I first got my copy of Dirt3 via Steam, the motion output bug existed from day 1 for me. It wasnt until I found a Dirt1.1 installer that I was able to play Dirt3 without the end of race crash, and discovered just how AWESOME it is. But running an ancient version of Dirt3 with completely broken GFWL integration is far from entertaining, random crashes when selecting different cars/tracks, etc was just part of the roulette of playing Dirt3.
Anyway, I figured I should put together a metasplanation of what I feel the bug is, the bug is only present in Dirt3 1.2 onwards, not in any of the other Codemasters games, and I think Dirt3 1.1, and the update log of 1.2 gives me insight in to what the bug may be.
Dirt3 seems to be a little different from the other Codemasters games due to its interesting/fun menu system. With v1.1 after completing a race and returning to the menu, motion telemetry is still being streamed out of the game, the MPH display on my Fanatec wheel updates and changes as the car (in the menu) moves. This makes me think that the physics engine for racing is being incorporated in to the menu system to pull off the integrated car animations etc. The changelog for 1.2 states that they fixed a bug that was allowing motion output to continue after the race ends. My guess is they just called a close socket as a “lets just make sure we no longer send telemetry”. The problem is, it seems as though the physics engine still passes to the now closed socket reference (and crashes). This seems to be a problem isolated to the udp socket implementation and not the usb driver dbox integration, and thats why I dont think it was caught by Codemasters, and likely has less priority.
I think this problem could be solved relatively quickly by checking the state of the socket reference before calling sendto(). I know there is probably more that could happen, but as a quick fix, that would likely do it.
Recreating the bug:
It just dawned on me that I should have included how to recreate the bug, because its actually very simple, and you don’t actually need a motion rig or sim dashboard to do so, as udp sockets don’t care if there is nothing there to receive the data its sending.
- Open “hardwaresettingsconfig.xml” which is located in your savegame folder of the game. For instance: C:\Users\your username\Documents\My Games\DiRT3\hardwaresettings
- Open this file and look for a line that begins with:
- Replace this line with:
<motion enabled=“true” ip=“127.0.0.1” port=“30500” delay=“1” extradata=“3” />
- Start the game and attempt a time trial. As you cross the finish line, the game will crash.
Instructions pulled from Fanaleds website here.