It seems that you're using an outdated browser. Some things may not work as they should (or don't work at all).
We suggest you upgrade newer and better browser like: Chrome, Firefox, Internet Explorer or Opera

×
So I just learned that Diablo contains a bug that will make map generation to no longer be random after the year 2038, as explained by this in-depth analysis of the game: https://diablo.tas.bot/

Is this bug fixed or planned to be fixed in the GOG version, given that Diablo is part of the GOG Preservation Program and considering that 2038 is not too far in the future?

I believe the DevilutionX team is aware of that bug and planning a fix, but an official fix would be even better.
avatar
SmashManiac: So I just learned that Diablo contains a bug that will make map generation to no longer be random after the year 2038, as explained by this in-depth analysis of the game: https://diablo.tas.bot/

Is this bug fixed or planned to be fixed in the GOG version, given that Diablo is part of the GOG Preservation Program and considering that 2038 is not too far in the future?

I believe the DevilutionX team is aware of that bug and planning a fix, but an official fix would be even better.
It's not fixed in the gog bundle. It's fixed in 64bit builds of DevilutionX.
avatar
Anders_Jenbo: It's not fixed in the gog bundle. It's fixed in 64bit builds of DevilutionX.
Oh neat, I didn't realize the fix was already in DevilutionX since it doesn't seem to be documented in the GitHub wiki and changelog! Guess that means the current fix won't work on novelty platforms like my 3DS, but it's good to know that it works on modern PCs at least!

Thank you very much for your answer and your great work on DevilutionX! Hopefully an official fix is also coming as I'm more of a purist myself, but more options are always good!
avatar
Anders_Jenbo: It's not fixed in the gog bundle. It's fixed in 64bit builds of DevilutionX.
avatar
SmashManiac: Oh neat, I didn't realize the fix was already in DevilutionX since it doesn't seem to be documented in the GitHub wiki and changelog! Guess that means the current fix won't work on novelty platforms like my 3DS, but it's good to know that it works on modern PCs at least!

Thank you very much for your answer and your great work on DevilutionX! Hopefully an official fix is also coming as I'm more of a purist myself, but more options are always good!
Yeah it's not explicitly handled so that's part of why it's not mentioned in the change log. I somewhat doubt that GOG will fix it since they don't have the source code apparently and it's none trivial do do so without it. The best they could do would be overwrite the time function from one of there DLL's and respond with an older date once we are past 2038.
Still it's unlikely that they would do that before it starts to become a noticeable problem and we are still 14 years away from that. There might be more games that are affected by this so maybe there will be a general solution that can be applied.
Can always temporarily adjust your computer's time I guess, but I bet people will come up with a solution at some point.
I can't play without DevilutionX, so I'm happy to know I'm good. (I'd be 60 anyway; doubtful I will still be playing games, aside from Bingo in the retirement home.)
You were watching "The Biggest Cheating Scandal In Diablo Speedrunning History", weren't you? Just got to that part of the video myself.
avatar
Gotcha: Can always temporarily adjust your computer's time I guess, but I bet people will come up with a solution at some point.
I can't play without DevilutionX, so I'm happy to know I'm good. (I'd be 60 anyway; doubtful I will still be playing games, aside from Bingo in the retirement home.)
I for one hope they will have computers setup for retro LAN by the time I end up in a retirement home.
avatar
Anders_Jenbo: I for one hope they will have computers setup for retro LAN by the time I end up in a retirement home.
Yes, please! That would sure beat bingo.
avatar
Anders_Jenbo: Yeah it's not explicitly handled so that's part of why it's not mentioned in the change log. I somewhat doubt that GOG will fix it since they don't have the source code apparently and it's none trivial do do so without it. The best they could do would be overwrite the time function from one of there DLL's and respond with an older date once we are past 2038.

Still it's unlikely that they would do that before it starts to become a noticeable problem and we are still 14 years away from that. There might be more games that are affected by this so maybe there will be a general solution that can be applied.
Yeah there's a lot of time yet for a fix, but a fix within my lifetime and before it actually becomes a problem would be most appreciated! Good point about this bug affecting more games than just this one though since it's part of a standard library, and that a general solution may be preferable, This may be an interesting research project...
avatar
Offic3rHotpants: You were watching "The Biggest Cheating Scandal In Diablo Speedrunning History", weren't you? Just got to that part of the video myself.
Ha ha yes that's how I learned about this issue, although it was dwangoAC's report that really made me understand what it was all about. I've been following his stuff for years so I'm surprised I somehow missed this particular work of his beforehand.
Post edited November 17, 2024 by SmashManiac
Diablo actually doesn't care about the 2038 date and treats the value more as an unsigned one. GOG could conceivably patch the embedded time() implementation to not return -1 at which point the game will work until 2106 at which point it probably starts over with the dungeons for 1970, and since the game didn't come out before 1996 you could argue that it has unique dungeons until 2136, but even then it's unlikely that players will even end up playing the same levels.

GOG has made a few hex edits to the games ASM code so them doing this isn't totally out of the question.

I would say the research is pretty much done, the only thing left to do is to note down the exact byte offset one would need in order to overwrite the "return 1" with "no-op", that should be enough to solve it. You could even make a simple dhack cheat that does so.

Since there fixes are mostly ones that are taken from the community, publishing such a patch would probably be the most likely way to get them to adopt it. If you want help with that drop by the DevilutionX Discord some time.
Post edited November 19, 2024 by Anders_Jenbo
I meant researching this bug in other games, not just Diablo.

As for making a no-op patch myself for Diablo, that's probably within my skill set already now that you mention it. I may look into this in the future and will follow-up if I do. Thanks!