Hi there! This quick tutorial will show you how to modify the way Soulstorm loads so it loads much faster. It might seem like advanced, complex coding, but it's just clicking stuff.
A quite convenient procedure actually. Spend a few minutes clicking on a list, then save countless more minutes of waiting for the game to load.
Performance-wise "disclaimer":
The improvement in loading speed is dependent on several factors, including each user's computer hardware. Due to this, it is impossible for me to accurately tell how faster will Soulstorm load for you. It most likely will be at least twice as fast though.
Also, this does not affect framerate, the game engine will still be all laggy when many units are on screen. I don't know how to fix that.
About Soulstorm on Steam compatibility:
If something (like the tweaks in this tutorial) requires changes on the game executable (Soulstorm.exe), it cannot be applied on the Steam version. This is due to the Steam version has a different executable tied to the Steam client to prevent precisely, changes from the user. Usually this makes for a good anti-cheating/piracy/etc protection, but in this case is an unfortunate nuisance.
If you have very slow loading times and have the money to spare on an extra Soulstorm, you may want to get it on another online store too.
I've went through the effort of tracking down the likely last two online stores besides Steam that still sell Dawn of War: Soulstorm via digital download. Gametap and GamersGate.
The tutorial:
Some notes:
-Windows Vista/7/8 users: If you have Soulstorm installed on the default directory (Program Files in the C drive) and UAC enabled, you won't be able to modify the game executable. To overcome this either:
A) Disable UAC.
B) Make a copy of your Soulstorm executable and place it somewhere UAC won't get in the way (a folder in your desktop for example). Make the changes on the copy and then replace the game's original with the tweaked one.
C) Run the CFF Explorer as Administrator.
-This tutorial is for the patched (1.20) version of Soulstorm (same applies for Dark Crusade tweaks) only. You can try with 1.00 but the lists won't match and stuff.How to make Soulstorm load faster. Dark Crusade too.
To modify the Soulstorm executable you will need the CFF Explorer, part of the Explorer Suite found here NTCore.com (click the small bold'd text that says "Download the Explorer Suite". Yep, no huge "Download heer" button you hit with your fist xD)
Install it, and AFTER DOING A BACKUP COPY OF YOUR SOULSTORM.EXE... you may be asking where is the illustrated part on this tutorial, well here it is:
Right click your Soulstorm.exe and select "Open with CFF Explorer"
You will see a big window full of good ol' number crypticness. Don't panic. On it, select "Import Directory" by clicking its row.
The section at the right of the window should change to different number-y crypticness. Fortunately all we need is on the column that says "Module Name". I advice stretching the window until you can see all entries at the same time.
Then, right-click on a dll name and select "Move Up" or "Move Down" to re-order the list so it looks like this one.
Save changes, and... that's it! You got faster loading times!
This can be done on Dark Crusade as well!
Repeat the above procedure but using this dll order:Yay, finally updated this!
All other tweaks posted here should apply to Dark Crusade as well
And as a bonus...
How to prevent crashes on big battles!
- Well, not each and every cause for crashes, but you can prevent all crashes due to Soulstorm "running out of memory", which can happen even if you have 16GB RAM.
- Open the Soulstorm executable with the CFF explorer, and under "Nt Headers" (click the + symbol), you should see "File Header".
- Then left-click File Header and in it, there is a box which says "Click Here". Let's do that.
- You will get a little window full of checkboxes. There's one that says: App can handle >2Gb Address space. Check that.
- Click OK, save the changes and... Done! Your Soulstorm.exe will no longer run out of memory!
- To be extra sure, repeat this process with rsss.dll (located in the Soulstorm directory). This one can also run out of memory and cause crashes the same way as the game executable.
Extra notes:
- This ALSO doesn't work on the Steam version.
- If you're running a 32 bit Windows, there's yet another memory-limited file. But as this one is a vital Windows file, it can't really be modified (actually tried it myself, resulted on a guaranteed bluescreen on boot).
On an additional note, while using Windows 7 I've noticed that Aero effects and Dawn of War don't mix really well. Disabling Aero effects greatly reduced the frequency Soulstorm went "(Not Responding)" just because. Or due to intense alt+tabbing...Old "Retribution multithreading backport" stuff I'm seriously starting to doubt if it does anything at all
How to backport Retribution's multithreading:
Note: I know backporting is "evil" and blah blah blah, but since this should be ok as it requires you an installed copy of Retribution and you'll be doing it on your own, for your personal use.
Note 2: I could really use feedback on this (and if by any chance, you know how to improve it, don't hesitate on telling me, I won't be offended), as I'm not even sure if it even works at all.
How to get Soulstorm multithreaded :3
I would like to note again that this improves cpu usage if anything. The in-game performance is almost the same, and maybe, a very slight difference noticeable with frame rate counter or master-crafted eye implants made on Mars.
-First, you need Retribution.
-The file path should be similar to this: [Drive letter here]:\Program Files\Steam\steamapps\common\dawn of war ii - retribution
-From there copy the following .dll files somewhere (your desktop, some random folder, wherever you want):
XThread.dll
Debug.dll
Platform.dll
-This may sound strange, but is vital for this to work:
Rename Debug.dll and Platform.dll to something else (since there's already Debug and Platform .dll files on the Soulstorm directory, but Xthread needs stuff from the ones in Retribution). Note that for reasons I'm not aware of, Debug.dll can't exceed 9 characters long (including the 4 from ".dll"). Windows will let you rename it longer, but it's reference in XThread.dll won't. I used DbugR.dll and PlatformR.dll as the new names.
-Either moving or copy-pasting, get those three files into your SS directory.
-Yet again, MAKE A BACKUP COPY OF SOULSTORM.EXE.
-Open DbugR.dll (or the way you named it. It's your chance to have two funny .dll names!) and look for the Import Directory. There right-click the BugSplat.dll row and select "Delete Import Descriptor".
-Open PlatformR.dll and then again, in the Import Directory, eliminate a dll from the list, this time SHELL32.dll. Also, be sure of renaming the entry referring to Debug.dll to the name you used.
-Open XThread.dll, go to our by now well known Import Directory, and modify the the entries referring to Debug.dll and Platform.dll to match DbugR.dll and PlatformR.dll (or how you may named them).
-Then open Soulstorm.exe (with the CFF Explorer logically) and go to "Import Adder". Hit the "Add" button and a prompt asking for a file will appear. Browse to your SS directory and there, open XThread.dll.
-This may sound a bit tedious but, you want that multithreading or not?:
One by one, in this order, select the following functions and import them (so they appear on the list to the right), in THIS order by NAME. It is best to use the numbers to track them easily. Again, it is mandatory for this to work properly to Import By Name.
00000006 - ?AcquireWrite@RWLock@XThread@@QAEXXZ
00000013 - ?ReleaseWrite@RWLock@XThread@@QAEXXZ
00000002 - ??0RWLock@XThread@@QAE@XZ
00000012 - ?ReleaseRead@RWLock@XThread@@QAEXXZ
00000005 - ?AcquireRead@RWLock@XThread@@QAEXXZ
0000000C - ?GetProcessorCount@Scheduler@XThread@@QBEHXZ
0000000E - ?IsCurrentThreadMainThread@Scheduler@XThread@@QBE_NXZ
00000007 - ?Fork@XThread@@YGXP6GXHPAX@Z0HHI@Z
00000003 - ??1RWLock@XThread@@QAE@XZ
00000017 - ?SetEnableFork@XThread@@YGX_N@Z
0000000D - ?Initialize@Scheduler@XThread@@SGPAV12@XZ
00000018 - ?Shutdown@Scheduler@XThread@@SGXXZ
00000009 - ?GetInstance@Scheduler@XThread@@SGPAV12@XZ
00000015 - ?ScheduleJob@Scheduler@XThread@@QAEXPAVJob@2@I@Z
00000001 - ??0Job@XThread@@QAE@P6GXPAX@Z0H@Z
0000000F - ?IsDone@Job@XThread@@QBE_NXZ
-After you are done Importing, click Rebuild Import Table. A sign will appear saying "Import Table correctly rebuilt".
-We're almost done! But you still need to yet again go to the Import Directory. There XThread.dll should be at last. Move it up until it's right below Filesystem.dll.
-Save the file.
-Enjoy multithreaded Soulstorm.
I think I should credit the page where I found out about the Explorer suite and kind of inspired me to fiddle with the .exe/.dll files. It's also the "original" tutorial on how to get Soulstorm to use more than 2 Gb of memory. PoK on ModDB.
Credit to Corncobman for pointing out a step on the multithreading tutorial I forgot.
Many credity bits and pieces to Gorb for accurate feedback with the Steam version and stuff.



. On it, select "Import Directory" by clicking its row.








. I would have never seen that by myself. 1st post updated.
(<- I am happy to be your friend!)
