STAR WARS™ Empire at War: Gold Pack

STAR WARS™ Empire at War: Gold Pack

108 ratings
Windows 10 Performance...Guide?
By Premium goose action󠀡
A log of all the time i spent not actually playing the game, with the aim of making it run better. (special k, system explorer, dgvoodoo2, dxvk, etc.)
8
2
2
3
2
3
2
   
Award
Favorite
Favorited
Unfavorite
CH.00 Prelude
(they updated the game to be 64 bit and it runs smooth now, so i don't know how much is relevant any more but i am happy)


I’ve owned this game in different forms since it was released. I kinda wish I could go back and be fine with it running at 14 fps on an old pc without dedicated graphics.

At the moment I’m trying to eke out as much power out of my system for this game to use as I’m currently unable to get one of the newer graphics cards.

Currently using a ryzen 5 3600 and a evga ftw 1070

Ryzen 9 5900x and a 3070 (it still stutters now and again but dxvk adds some nice multi-threading)


Changelog:
1st May 21: started
2nd -15th may 21: added things as i went along.
17th may 21: clean-up
22nd may 21: added disable full screen optimisations

sometime in 2021 Edit: I hadn't had the time to update this guide in a while but I have upgraded my cpu to a Ryzen 5 5600x and have clock tuner 2.1 running. Taking my single core performance to 4.73. I now run this game exclusively with dxvk 1.8.1 async and achieve a smooth 60 fps now rtss is also in use with vsync set using nvcp. I now also have gshade running with dxvk. It adds a nice touch.

16.03.2022: i have just seen that this guide got popular, so i've decided to add my dxvk settings to further illustrate how my setup has changed. i don't use rtss with dxvk anymore since dxvk has it's own frame limiter now. please check the dxvk section for these changes.

29 and 30.03.2022: added sections about turning off hardware mouse in-game and disabling full-screen optimisation from the Starwarsg.exe compatibility menu.

ALWAYS TURN OFF HARDWARE MOUSE IN THE IN-GAME VIDEO SETTINGS
CH.01 system explorer
https://systemexplorer.net/

This program runs in the background as a better/alternative task manager. The reason it is important is that it allows you to set the priority of the game and the affinity of the number of cpu cores you want the game to use, Permanently.

Simply right click on the process you want to change. On the list that appears you’ll have access to process priority and affinity. Make the changes you want and select permanent at the bottom of the list. Now as long as system explorer starts when windows does, it’ll remember your settings.

Meaning you don’t have to keep going into task manager every time you want to play Star wars; Empire at War.






But why would you want to change the priority/affinity?
Simple if the priority isn’t high or above the game won’t run as good as it could do. Affinity is important as this game was made in 2005/6 and was optimised for dual-core pc’s. So if you don’t go on with this guide to run the game using software that changes how it uses it’s system resources, You’ll want to run the games affinity off of two physical cores if you have a hyperthreaded cpu. So cores 3 and 5 if you have a 6-core cpu.






More on this topic here from this guide: https://steamcommunity.com/sharedfiles/filedetails/?id=1540415613

Thanks to AlexRight.
CH.02 Special K
Now this is where things get interesting.
A brilliant piece of software, does things I cannot explain nor comprehend, but I’ll try to keep this brief.
The best way to get the most up to date version is to join the discord and download the lastest build from the releases tab. https://discord.com/invite/ER4EDBJPTa

But you’ll most likely need a stable release first with which to work from. found at its website here. https://discourse.differentk.fyi/


there is documentation for installing specialk in the wiki here: https://wiki.special-k.info/en/SpecialK/Global

In my example however I will be using a local installation. I recommend that you create desktop shortcuts of your specialk(...\Documents\My Mods\SpecialK) install and the corruption folder (C:\Program Files (x86)\Steam\steamapps\common\Star Wars Empire at War\corruption)for the game.

You can do this by right clicking on the folder –> “send to” –> “desktop create shortcut”.


right click and copy the specialk32.dll

then paste it in your corruption folder where StarWarsG.exe is.

Left click the new copied file, hit f2 and rename it to d3d9.dll

You’ll then want to run the game once to get a configuration file called d3d9.ini.

I recommend getting Notepad++ for this next bit although standard notepad will still work.

In this section we will only be changing one value inside the .ini file.


Change “callback throttle=” from -1 to 8.

and that should be everything for now, more on the options available in specialk down below.
Ch.03 power settings
I switched from an intel 6500k to an amd ryzen 5 3600 while playing the Awakening of the rebellion mod for this game. But as far as I can tell windows 10 power settings should have the same interface for both.

I’ll also note that my windows 10 menus will look different from normal as I’m currently using open-shell.

Open-shell link: https://github.com/Open-Shell/Open-Shell-Menu

type power options into the search bar of the start menu. It should have a green battery symbol next to the right one.

In the top left corner of the power options menu you will see the button labelled “create a power plan”.

On the next screen select high performance mode and give your new power profile a unique name you will recognise.

Once you are back to the “choose or customise a power plan” page, select the “change plan settings” button next to the profile you just made.


“Change advanced power settings” on the next page


pci express –> link state power management, should be set to off.


processor power management –> minimum processor state, should be either 5% or 100% depending on how much you care about your power consumption while not playing games.

processor power management –> system cooling policy, should be active.

processor power management –> Maximum processor state, should be 100%. I had seen that some people were recommending amd users set it to 99% to prevent stuttering issues in certain games, but in my experience it should always be 100%.

ch.04 Regedit
somewhat dangerous; use at your own risk.

Originally posted by SevenFiftySix:
For the black screen issue, it's *probably* a resolution problem. You'll need to manually edit some settinhgs in your PC registry files.

1) Run regedit (type "regedit" in your start menu's search bar and it'll pop up)
2) Go to HKey Current User\Software\Petroglyph\StarWars FOC\Profile\Profile0
3) Scroll down a bit and change the screen height/width/refresh rate to something else. You'll probably want to make it match whatever your graphics card and monitor are running.

When editing the registry, switch from "hexidecimal" to "decimal" so you can use normal numbers instead of hex code.

I dunno if that'll fix OP's issue or not though.

I broke my game installation 3 times while experimenting with dgvoodoo2, dxvk and specialk.

Using the technique above I was able to change the resolution of the game to 2560 over 1440 for my 2k screen. I wouldn’t however recommend changing the refresh rate.

To get the settings to stick easier go to the coruption folder --> StarWarsG.exe right click and properties, go to the compatibility tab and tick the box next to disable fullscreen optimisations.

ch.05 dgvoodoo2
acts to translate the game which is running in direct x9 to direct x11 or even x12.

Have only tested as x11.

Dgvoodoo2 link: http://dege.freeweb.hu/dgVoodoo2/dgVoodoo2/

after downloading the newest release from the website and extracting its contents somewhere you can easily access.

You’ll want to copy four files from your dgvoodoo2 save location into the corruption folder where the .exe is stored.


d3d9.dll (comes from dgvoodoo2 –> ms –> x86)

ddraw.dll (comes from dgvoodoo2 –> ms –> x86)

dgvoodoo.conf

dgvoodoocpl.exe

now you’ll want to open dgvoodoocpl.exe from the corruption folder.


you want to make sure that the config folder box is set to (C:\Program Files (x86)\Steam\steamapps\common\Star Wars Empire at War\corruption) otherwise you’ll be changing the settings for your whole system if you end up using dgvoodoo2 for more than one game.

Change output api to direct 3d 11 (feature level 11.0)

change adapter to use to your main graphics card.

Then move on to the directx tab.


videocard set to dgvoodoo virtual 3d accelerated card

vram set to 4096 if your real life graphics card has 4 or more gigs of vram otherwise set it lower.

Turn on fast video memory access under miscellaneous.

Turn off dgvoodoo watermark once you are happy that the game works with dgvoodoo2.

If all is well you should now have the game running with dgvoodoo2, if you left the watermark on in options you will be able to see it in the bottom right corner of the game window telling you that it is working.
ch.06 dxvk
dxvk translates the game from directx 9 to vulkan.

It is used in Linux but has a windows implentation as well, which I will use in this guide.

This option is incompatible with dgvoodoo2 and for the moment specialk.

dxvk link: https://github.com/doitsujin/dxvk

dxvk async patch: https://github.com/Sporif/dxvk-async

(if the async version is the same as the main dxvk version then feel free to copy the d3d9.dll file from their instead)

download dxvk first, extract the contents to somewhere you can easily access.

Then extract the dxvk file inside the main folder, inside the folder you should now see this:


go into the x32 folder and copy the d3d9.dll file to your corruption folder.
(please make sure that you have deleted your previous d3d9 files if you are trying out consecutive solutions like the ones I have outlined in this guide. Otherwise you may have compatibility issues).

Now right click inside the corruption folder and create a new “text document”.

Now go to this link and copy all of the text in the dialogue box into that new text document.

Link: https://github.com/doitsujin/dxvk/blob/master/dxvk.conf

then save the text document as dxvk.conf

this will give you many options to configure, to enable an option delete the “#” that precedes it. All items will have a “#” in front of them but the actual commands have single line brake between them and the instrutions that tell you what they do.

I will only recommend that you go down to line 229, delete the “#” symbol and write “fps,frametimes,drawcalls,pipelines,memory,gpuload,compiler,samplers” after the “=” symbol.


this will allow you to see that dxvk is working for the game. Once you have confirmed this feel free to either delete the text after the “=” or put a “#” at the beginning to turn it off.

16.03.2022 edit: i will now post my dxvk settings underneath, please note if you are using dxvk async (which i do recommend that you do) you have to add the line that actually activates the important async settings yourself.
--
#async enabler

dxvk.enableAsync = true
DXVK_ASYNC=1
--
these settings will need to be added or copied over the contents of the dxvk.conf file.
(cheat sheet: ctrl+A will select all the contents of the file allowing you to delete/copy over it faster)

please note my settings are for an NVIDIA gpu and an amd cpu that has 12 phyical cores and 24 threads.

if you are using a cpu with less than 10 threads you will have to change:
--
dxvk.numAsyncThreads = 10
dxvk.numCompilerThreads = 10
--
this setting near the bottom of the page to the number of threads you have/want to use.
ch.06 and a half dxvk settings
dxgi.deferSurfaceCreation = True
d3d9.deferSurfaceCreation = True

dxgi.maxFrameLatency = 1
d3d9.maxFrameLatency = 1

dxgi.customVendorId = 10DE
d3d9.customVendorId = 10DE

dxgi.maxDeviceMemory = 4000
dxgi.maxSharedMemory = 4000

dxgi.numBackBuffers = 3
d3d9.numBackBuffers = 3

dxgi.tearFree = True
d3d9.tearFree = True

d3d11.relaxedBarriers = True

d3d11.samplerAnisotropy = 16
d3d9.samplerAnisotropy = 16

dxvk.useEarlyDiscard = True


#. = fps,frametimes,drawcalls,pipelines,memory,gpuload,compiler,samplers

dxvk.hud = compiler,fps

d3d9.evictManagedOnUnlock = True






ch.06 and 3 quarters dxvk settings continued
#async enabler

dxvk.enableAsync = true
DXVK_ASYNC=1

dxvk.numAsyncThreads = 10
dxvk.numCompilerThreads = 10

dxgi.maxFrameRate = 60
d3d9.maxFrameRate = 60
Ch.07 specialk applied over dgvoodoo2 (or waist deep in jank with this one)
this is what I have spent a great amount of time trying to get working and after getting it to work (for me), that is what inspired me to write this “guide” as I did not want to forget what I had done.

There are a lot of dead-ends here that can break the game installation, it happened to me 3 times.

This part maybe a little bit more accurate as it is the version I currently have installed on my pc.

I’m also currently running the awakening of the rebellion 2.8.2 mod at the moment as well.

So you’ll want to clear out any files you have used previously and start with a fresh build of dgvoodoo2 as explained above.

Next you’ll want to go to *\Documents\My Mods\SpecialK and copy the specialk32.dll to the corruption folder (C:\Program Files (x86)\Steam\steamapps\common\Star Wars Empire at War\corruption).

Next rename it to dinput8.dll (click on it and hit F2)

go to the specialk folder and start the SKIF.exe (you can also right click and pin it to either the start menu or the task bar for easier access in the future.)


click the start service button in the bottom right corner of the special k window. Wait until the service has started (in text as well as your cursor changing back from the loading icon)

run the game once. It may crash but that's ok as long as it generates a dinput8.ini file in the corruption folder.

Now you want to open that dinput8.ini file, in my example I’m using notepad++.

Line 205 under steam.system change callback throttle= to 8

line 128 under render.dxgi change AllowTearingInDWM= to false

lines 29 & 30 under api.hook change d3d9= to false & d3d9ex= to false

now when you boot the game you should now have the specialk banner appear at the top of the screen while the game is loading.

When the game allows you to move the cursor press Control(ctrl) + Shift + backspace to open the specialk control window.


you’ll know that the specialk is running right with dgvoodoo2 if you see “d3d9-→11” at the top of the box the section called “active render api”.


starting with “framerate limit”, turn it on and set the limit to taste by clicking on the box and typing in your preferred limit.

Then click on advanced to open the extra dialogue box.

Turn on low latency mode, drop late frames, both sleepless options, use multimedia class scheduling and all of the nvidia reflex mode options to how I have them set in the picture.

Please note that only certain nvidia graphics cards can use reflex.

Next click on direct3d 11 settings then swapchain management.

Information about this section can be found here:

https://wiki.special-k.info/en/SwapChain

my settings are focused on my setup using two-monitors, one of which is g-sync compatible. (honestly I had trouble getting g-sync to turn on consistently with this setup)

Here you can set presentation interval which is related to vsync:
-1 lets the game handle vsync
0 forces vsync off
+1 forces vsync on

backbuffer count can be set to -1 to leave the game to its normal count. Star wars: empire at war uses two normally, I can get it to go to 3 with no noticeable performance gain. In more modern games it can go up to 16 with every 2 backbuffers after 3 able to increase performance at the cost of vram with diminishing returns after 5 backbuffers.

Maximum device latency is the number of frames render latency you allow, With -1 being no limit.

I switch between 1,-1,2 and 1,3,2.

I was unable to get flip model working for this game which is a shame.

The widgets tab allows you to see lots of intresting information, I recommend playing around with each of them if you want.


CH.07 and a half JANK

with my dual monitor setup I sometimes have issues where the screen doesn’t attach to my gaming monitor like I want it to. One way of solving this I found is to have a task manager window open in the non-gaming monitor. (some how this works, welcome to the jank section.)


To get g-sync working in this setup I have to go to the display dropdown menu at the top of the specialk window to overide the refresh rate to 239 (as my gaming monitor maxes out at 240 frames) this changes the g-sync status from “unsupported” to “supported + active”.


But that's not all, you also need to turn it off again from the same menu straight away unless you forget. Because if you don’t then the game will flash aggressively at you as it switches between both monitors very fast. (this makes the game mostly unplayable).

I had issues where the game loads in 1280x720 or lower which causes the mouse to think it is somewhere else on the screen then where it should be. To rectify this I had to turn off hardware mouse in the options menu and I always have to manually change the resolution to 2560x1440 every time I boot up the game.

I have also experimented with turning off the v-sync and enabling it in NVCP (nvidia control panel), as specialk like to have vsync on especially if you want to use it with a g-sync display. But this option doesn’t seem to make a difference.
CH.09 Comparison
The software I will be using to compare the various unique methods will be CapframeX:
https://www.capframex.com/

details of everything explained here: https://www.capframex.com/blog/post/Explanation%20of%20different%20performance%20metrics

all data was recorded during “screensaver” (the space battle that happens in the background) of AOTR mod 2.8.2:
https://steamcommunity.com/sharedfiles/filedetails/?id=1397421866


base game AOTR MOD:


Special k (on its own):
version (Special K 21.04.23, Apr 23 2021)


DXVK (with RTSS LIMITER):
version: Async dxvk 1.8.1


Dgvoodoo2 (with RTSS LIMITER; could only get to work at 768p):
version: Dgvoodoo2 2.74


Special k (over Dgvoodoo2):
version (Special K 21.04.23, Apr 23 2021) over version: Dgvoodoo2 2.74.1

RTSS (Rivatunner statistics server): https://www.guru3d.com/files-details/rtss-rivatuner-statistics-server-download.html

set to 60 fps for dgvoodoo2 and dxvk solo implementations.


Edit:
1. DXVK with RTSS (async 1.8.1 ver)
2. Dgvoodoo2 with RTSS (only working at 768 in my test)
3. Special K over Dgvoodoo2
4. Base game
CH.10 performance extras
Timing tool

https://vvvv.org/contribution/windows-system-timer-tool

gave me two extra frames. That not much but its free.

Edit: Or instead there is Intelligent standby list cleaner

Intelligent standby list cleaner: https://www.wagnardsoft.com/ISLCw
which I use with both functions on and started at launch.



4gb patcher

https://ntcore.com/?page_id=371

this game is a 32-bit game, that usually means it has a problem using more than 2 gigabytes of vram from your graphics card. Games with huge modding support like fallout new vegas have dedicated 4gb patches, this program allows you to do the same for most 32-bit games.

It works with this game but has no noticeable performance increase with the mods I used.

edit: it turns out that this tool and CFF explorer can be used to change a program to be LAA (large address aware), which you should do as I said above except that some games don’t just require the .exe to be set with the LAA flag but also certain .dll files that the game is dependant on.

I didn’t know which ones I needed so I just set the LAA flag for all of them, including the files for the standard empire at war executable as well.

CFF explorer: https://ntcore.com/?page_id=388

right click on any/all the .exe and .dll and choose “open with CFF”, then on the left side at the top, click on file header, then in the bottom right corner of the table click on the “click here” box next to “characteristics” at the end of “meaning”, you’ll want to tick the “app can handle >2gb address space”. Click ok.



Cathedral Assets Optimizer

https://www.nexusmods.com/skyrimspecialedition/mods/23316

I used this tool to change the textures in the awakening of the Rebellion mod (found here: C:\Program Files (x86)\Steam\steamapps\workshop\content\32470\1397421866\Data\ART\TEXTURES), into the bc7 compression format.

I’m glad to say that the game is able to use these newer textures if you are using dgvoodoo2, this is because the game is usually restricted to only what directx9 could process which is limited to bc3 or below compression formats.

NOPE

but it doesn’t make a difference probably because I wasn’t using it on the raw files that I don’t have access to.

The way to tell if the textures have been changed or not is to drop them into a hex editor like HxD, and to look to see if “dxt10” is in one of the top rows. Otherwise bc1 textures have the code “DXT1” and bc3 textures have the code “dxt5”.


Also used CAO to resize all textures to half size; it resulted in no noticeable graphics loss and gained 3 extra frames on average. :shrug:


Razer cortex; performance decrease


Disable hpet through device manager; no performance increase.


Disable prefetch and super prefetch through regedit; no performance increase.


change system explorer to real-time over high priority; 1 extra frame of performance


GRAPHICDETAILS.XML

now this is really experimental, I can’t really tell if it works as stated and I would hope that the new patches the game received had by passed it. But it appears that the game is looking for ancient hardware to enable better performance.

Found this file here: https://community.pcgamingwiki.com/files/file/247-star-wars-empire-at-war-graphic-details-xml-file/

this file is used to fix issues with the original retail copy of the game sold as a disk. Any fixes it has should already be in the steam version of the game by default. However when I saw all these different values, I wondered.
performance extras pt2now the file is the same in the game as it is in the mod which should mean that it doesn’t affect anything. But since I’m curious, I did the following things.

Saw 6800 in the tab and looked it up on wikipedia; https://en.wikipedia.org/wiki/GeForce_6_series
looked up the device id and other information; https://gist.github.com/roalercon/51f13a387f3754615cce
went to dgvoodoo2 and right clicked on the banner to unlock the advance options;
performance extras pt3went to DirectxExt and changed the id type, vendorID and DeviceID that I saw on the above list.
performance extras pt4

this is the result of changing the timing tool, flushing the Ram cache automatically, changing system explorer to realtime with only the physical cores selected and this fix on my specialk over dgvoodoo2 install:
performance extras pt5performance extras pt6

installing all games and the entire steam library outside of the program files environment.

The theory is explained here: http://wiki.tesnexus.com/index.php/Installing_Games_on_Windows_Vista%2B#Too_Long;_Didn't_Read_(TL;DR)


exception errors:
https://appuals.com/star-wars-empire-at-war-exception-error-on-windows-10/


Peixoto patch
:shrug:



Disable Full-screen optimizations
right click on the .exe file of the game, and select properties at the bottom of the list.
Click on the compatibility tab at the top of the window. Then put a tick against “disable fullscreen optimizations”.

This can have performance benefits for various games but here it helps as it stops the game from changing the resolution every time you restart.




I’m going to leave it there for now.
This was the first guide I’ve written, it was a relief to finally write this down after spending so much time on something kinda pointless that I enjoyed while doing it.

CH.11 Special Thanks
25 Comments
Daepapa Nov 1, 2023 @ 11:58am 
@lal0 Wonder why it says windows 10 then
4C +74.13 May 11, 2023 @ 3:34pm 
Unfortuntale totally not work on Win11. With any injector game just not launching
Lonesome Aug 16, 2022 @ 9:48am 
Thanks for sharing your hard work.
Sam Apr 13, 2022 @ 7:13am 
You need a lot more credit from this guide than some people make by posting GIVE ME MONEY guides in the Among Us tab
Khalanos Apr 3, 2022 @ 12:05pm 
Great guide, thanks for taking the time to make it!

Definitely seems to be making things a lot better - although not sure why but not getting a runtime error half way through land battles using Remake Mod 4.0.
Menace7dc Mar 30, 2022 @ 12:32pm 
I did but the issue was the global injector wasn't recognizing the game at all, even without dgvoodoo2
Premium goose action󠀡  [author] Mar 26, 2022 @ 4:48am 
yeah, it took me 5 months on and off experimenting with different options to get special k working with dgvoodoo2, only to find out through working on this guide that dxvk was better.

the effort involved justified writing it all down as i knew id forget. also special k has evolved since a year ago.

when trying to use global injection did you rename the 32 bit file to dinput8.dll?
Menace7dc Mar 25, 2022 @ 3:34pm 
I couldn't get Special K's Global injector to work in any capacity, I got it with a local installation but I wasn't able to run it at the same time as dgvoodoo. I asked the folks on the discord but because it's such an old game its really hit or miss.
Premium goose action󠀡  [author] Mar 23, 2022 @ 11:26pm 
This guide is designed to help get the most out of modern pc architectures. I don't think it would have a positive outcome in your case
Ghost V Mar 23, 2022 @ 8:29pm 
this can activate Shaders for my PC? i have a Intel Celeron N4500 1.10Ghz, 2 CPUs, 4096MB RAM