Enabling Widescreen Support on 1.09b (SGD2FreeRes)

Manny

Administrator
Staff member
Joined
Mar 6, 2022
Messages
723
Points
63
Hey everyone,

For those of you that are more familiar with the technical aspects of Diablo II, I would appreciate your insights:

What changed from patch 1.09b to 1.09d that would make it possible for a mod like SGD2FreeRes to support patch 1.09d, but not the earlier versions of 1.09?

Looking at the patch notes for 1.09c & 1.09d did not give me any clues. 🤔
 
The authors simply only chose to port it as far back as 1.09d. There's literally no reason it can't support even 1.00. The problem is changing a single line of code in the game and recompiling causes all the DLL files to have shifted offsets. These plugins work by injecting certain places within the game to patch it, so the offsets will be different every patch, and they never bothered to find the offsets for a patch older than 1.09D.
 
Yup what @galaxyhaxz said. There are no fundamental changes between 1.09b and 1.09d so much so that in the Singling documenting I mention that characters between 1.09a-1.09d are forward and backwards compatible (the same applies between 1.05a/1.05b/1.06a/1.06b), which is usually why I say that if you are playing 1.09d you should downgrade to 1.09b (if you want working CtC and p64), and you should downgrade from any 1.06 version to 1.05b if you don't want the anti-dupe deletion code and of course my Singling support for said version.

The offsets are the only thing that would be slightly different between the 1.09 versions for the most part. But even if an offset was shifted by 1 bit it would already cause a chain reaction for all other addresses and thus any mods targeted for one version would fail on another.
 
Oh! That is super interesting. Thanks @galaxyhaxz! I knew you would know the answer, lol. 1.09b is superior to 1.09d for the reasons mentioned by @fearedbliss, so it's a shame I can't try my favorite patch with this widescreen mod, but it's nice to know that in theory it's possible to make it work. Though I'm perfectly content with 4:3 for the most part as it's the original aspect of the game, I feel like if I would try to implement a widescreen mod for 1.09b and below, I would use 640x480 as my base res instead of 800x600. Things would appear a little bigger/closer which could better represent Diablo II in general. Actually come to think of it, 800x600 wasn't available until LoD anyways.
 
You could just use 1.09d and patch in those two changes. The CTC fix was posted on phrozen keep many years ago, it's a very simple hex edit, same with players 64, you just change a single byte from 8 to 0x40 (64 in hex).

Edit: you're in luck, you don't even need to do the hex edit, someone already made a fixed download: Chance Cast Effect Fix (v1.09d)
 
Last edited:
You could just use 1.09d and patch in those two changes. The CTC fix was posted on phrozen keep many years ago, it's a very simple hex edit, same with players 64, you just change a single byte from 8 to 0x40 (64 in hex).

Edit: you're in luck, you don't even need to do the hex edit, someone already made a fixed download: Chance Cast Effect Fix (v1.09d)
Wow, nice!! Do I just drop that DLL in the folder and replace the stock one?
 
Holy shit... this is really nice! I got 1.09d working with SGD2FreeRes, the CtC fix DLL, and PlugY. This might become my new favorite way to play. And I was able to disable the BNET button with the plugy config file which I would have missed by not having Singling. I am going to go run some Hell Cows now. 🤩
 
same with players 64, you just change a single byte from 8 to 0x40 (64 in hex).
Is there a guide or instructions anywhere on making this change? I'd def like to get p64 enabled on 1.09d. I am a novice when it comes to this kinda thing, lol.
 
In D2Game.dll, make the following change at offset 0x40306: 0x08 -> 0x40

To make sure you are looking at the right thing, you will see this byte sequence:
85 C9 7C 0B 83 F9 08

It's the last byte (08) that caps the player count. What's funny is, the client (D2Client) is still bugged in 1.09d, and lets you type up to 64, however, the actual server (game) will refuse to set it above 8, so typing players64 in 1.09d fails entirely, rather than capping it to 8. 1.10 fully fixed it so its capped to 8 on the client.
 
In D2Game.dll, make the following change at offset 0x40306: 0x08 -> 0x40

To make sure you are looking at the right thing, you will see this byte sequence:
85 C9 7C 0B 83 F9 08

It's the last byte (08) that caps the player count. What's funny is, the client (D2Client) is still bugged in 1.09d, and lets you type up to 64, however, the actual server (game) will refuse to set it above 8, so typing players64 in 1.09d fails entirely, rather than capping it to 8. 1.10 fully fixed it so its capped to 8 on the client.
Thank you. So I got that taken care of, but does the D2Client bug mean it's all for naught?

Actually, I changed that value to 7F. According to this thread on d2mods.info, doing so can enable up to Players 127 :eek:
 
Changing one single byte in d2game.dll is all you need to do. What I'm referring to means that to have players64 in 1.10+, you'd have to change a byte in d2client.dll and d2game.dll, not just d2game only. If you want players127, you have to change both d2client and d2game in all patches. In 1.09, d2client.dll caps the players command to 64, then sends the value to d2game, which caps it again to 64 in 1.09a/b and 8 in c/d. So you need to patch both if you want more than 64.
 
Awesome that helps a lot. Based on that info I decided to revert to a value of 40 for that byte (re)enabling players 64 on 1.09d. I think I will prefer to stick with the original vision for patch 1.09. I also just did a Cow run in 1.09d with my Nova Sorc (who uses The Oculus) and I can confirm that CtC works again. You rock, thank you. ;)
 
Yep, I still think 1.09b is the better patch, and there is literally no reason for 1.09d to exist outside of server side changes blizzard made related to some battle.net issues, so I'm not sure why they broke CTC in the first place, maybe they were trying to silently fix a bug with it? I'd have to look at the code to see what they changed that actually broke it. But anyway... a lot of people are uninformed of time travelling intricacies so sadly a lot of mods/plugins will only be for 1.09d, and backporting them to 1.09b is far more work due to having to update potentially thousands of shifted offset pointers, but using this trick, you can just take any 1.09d scenario and patch in those 2 changes to get the full experirence.
 
Well said. I wish I could experience this on 1.09b instead, but after those couple fixes to CtC and players 64, I don't think I'm really missing anything. Currently I'm running PlugY, SGD2FreeRes, and D2GL. The game performs incredibly well and looks stunning on my 27" monitor. I've been running Hell Cows with my Nova Sorc and having a blast!
 

Attachments

  • Screenshot001.png
    Screenshot001.png
    4.8 MB · Views: 266
  • Screenshot018.png
    Screenshot018.png
    4.8 MB · Views: 305
  • Screenshot017.png
    Screenshot017.png
    4.8 MB · Views: 253
  • Screenshot016.png
    Screenshot016.png
    4.9 MB · Views: 267
  • Screenshot015.png
    Screenshot015.png
    4.8 MB · Views: 289
  • Screenshot014.png
    Screenshot014.png
    4.4 MB · Views: 231
  • Screenshot013.png
    Screenshot013.png
    4.9 MB · Views: 261
  • Screenshot012.png
    Screenshot012.png
    4.3 MB · Views: 242
  • Screenshot011.png
    Screenshot011.png
    4.2 MB · Views: 262
  • Screenshot010.png
    Screenshot010.png
    4.2 MB · Views: 238
  • Screenshot009.png
    Screenshot009.png
    4.2 MB · Views: 260
  • Screenshot008.png
    Screenshot008.png
    4.2 MB · Views: 228
  • Screenshot007.png
    Screenshot007.png
    4.2 MB · Views: 250
  • Screenshot006.png
    Screenshot006.png
    4.2 MB · Views: 252
  • Screenshot005.png
    Screenshot005.png
    4.2 MB · Views: 224
  • Screenshot003.png
    Screenshot003.png
    5 MB · Views: 264
Well and 1.09d was the longest lived version of 1.09, so there's that too. All the sub patches happened between september and december 2001, then it stalled at 1.09d for 2 years before 1.10 came out. I didn't play online at that time, so I'm not aware if CTC was broken online or possibly fixed server side, but 1.09d technically would be the "de facto" 1.09 experience that most people would recall, as it lasted the longest by far, even if a/b are better. I think Occy is precisely the only reason some choose d over b to *ignore* the teleport downside lol.

I just wish the previous patches lasted longer. Ever since 1.09 there hasn't really been any time travel items (except maybe zod bug), so all those pre LoD rares and 1.08 uniques/crafts were short lived, literally a year of pre LoD and 2 months of 1.08 before 1.09 kicked in and made it the same ever since.
 
Another thing before I forget is that Nova is great in 1.09. It was simply far too weak pre 1.07 and when they changed lightning mastery to boost damage, it became better, but wasn't great until 1.08/1.09 buffed the damage. Then 1.10 ruined it again by not giving it synergies and amping monster life. So 1.09 is the best patch for a nova sorc.
 
I def agree that golden era of D2 was unfortunately very short lived! Before Resurrected released it seemed like there was a decent sized community online that would stream LoD on YouTube (dbrunski, llama, etc.), but they all seemed to play 1.14d (or whatever the latest version was at the time). I never really understood it. For me all the patches before 1.10 were just more fun. Maybe they just didn't know about Cactus and time traveling, lol. Or they just never got to experience those patches at all - which is just plain sad. Anyways yeah I LOVE my Nova Sorc (hence why I show her off every change I get, lmao). That build actually being viable is one of the reasons I love 1.09. And it's funny that folks intentionally choose d over b just to avoid the CtC from Occy, meanwhile here I am making sure that its patched and works.... :LOL:. TBH whenever mine procs it is a good thing. I don't recall it ever causing me to die. The usual scenario is if I tele right into the center of a pack of bovines, and then get immediately slapped, the CtC saves me by instantly relocating me just outside the pack. 😌
 
Oh, and I forgot to flex her advanced stats page... 🙈

of note, she has +47 MPK and 107 FCR (8 frames)! 💪😁💪

I am working on leveling her to 99 now with this gorgeous widescreen setup!
 

Attachments

  • Screenshot030.png
    Screenshot030.png
    4.4 MB · Views: 266
Have you tried using D2GL for 1.09d? It works with the fixed CTC dll, gives nice resolution options, HD font and shaders/other graphical options if that's your thing. :)

Nice work on your Sorc btw! I'm currently playing a trapsin in 1.09. My favorite Diablo 2 LOD patch by far..
So many hours have been put into it back when it was the active patch. hah.
One thing that I did do besides using the fixed ctc DLL, is modify the string table to display runes in orange just like in 1.13+.

Screenshot002.png


Edit: doh! I just noticed that you are already using D2GL. Haha.
 
Last edited:
@Snip haha, yeah, as you noticed I've been rocking D2GL! I also use PlugY to inject D2FPS. The game runs buttery smooth in widescreen and is simply gorgeous. 1.09 is also my favorite patch by far. ^_^

Could you share how you made the update to display runes in orange? That looks sexy! 🤩
 
Back
Top