EDIT; The problem I had with getting the fix working on the retail version has been fixed, it was just me being asleep and forgetting to pad GetRawInputData with zeroes, new fix for retail version linked below...
To play the Crysis Demo or Retail or Warhead on Windows 2000 you need three files, powrprof.dll, dbghelp.dll and xinput1_3.dll
You can get powrprof.dll from a Windows XP or 2003 install, the version I used which worked was 6.0.3790.3959 from a 2003 SP2 server install.
dbghelp.dll is used by many games, the version I took was from my Steam directory, version 6.7.5.0
You can find the xinput1_3.dll in the latest DirectX monthly redist (or the Bioshock DVD if you followed that guide too )
In the extracted archive open the file APR2007_xinput_x86.cab and extract the xinput1_3.dll file
Now you need to open xinput1_3.dll in a HEX Editor, I use Hex Workshop.
Search for the textstring: "TraceMessage" and replace that with "GetUserNameA"
Next we will need to modify two of the games own dll files, because it checks if we are running WinXP!
Open CryInput.dll and search for GetRawInputData, replace with; MessageBoxA
Pad the text "Data" with zeroes
Next open up CrySystem.dll, at Offset 0x598E3 change "77" to "EB" (replaces "w" with a dot to jump this check...)
If you are modifying the Retail version the Offset is; 0x598A3 instead
v1.1 is at 0x59E23
v1.2.1 is at 0x59733
With Warhead Retail the offset is at 0x59313
Place all dll files in the games install dir under \Bin32
(Don't overwrite the files in your winnt/system32 dir!)
Please post any problems or issues in this thread, my Win2K install is not very "clean" so more fixes might be needed... Oh, make sure to install the latest nVidia beta display driver for Crysis too, as of this writing 177.92 (same applies to ATI/AMD of course)
And for our readers who don't have a fetish for HEX Editors here is a winrar archive with the already modified dll files
Choose the appropriate version depending on if you are running the Demo or Retail version! (And what patch if any you have installed if Retail)
Crysis_Demo_Win2K_Fix.rar
Crysis_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.5767)
Crysis_v1.1_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.5879)
Crysis_v1.2.1_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.6156)
Crysis_Warhead_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.687)
What the XInput fix does is replace the call TraceMessage with something we will have access to, the side effect to this fix is that it should not be possible to use an X-Box Controller for the game (well I suppose there never was since xinput does not get installed at all for Win2K anyway so...)
And now some keywords for the google bot
The procedure entry point ReadProcessorPwrScheme could not be located in the dynamic link library POWRPROF.dll
The procedure entry point SymFromAddr could not be located in the dynamic link library dbghelp.dll
The instruction at "0x36503a01" referenced memory at "0x00000000". The memory could not be "read".
ERROR: CryInput.dll could not be loaded!
---------------------------
CryInput.dll could not be loaded. This is likely due to not having XInput support installed.
Please install the most recent version of the DirectX runtime.
To play the Crysis Demo or Retail or Warhead on Windows 2000 you need three files, powrprof.dll, dbghelp.dll and xinput1_3.dll
You can get powrprof.dll from a Windows XP or 2003 install, the version I used which worked was 6.0.3790.3959 from a 2003 SP2 server install.
dbghelp.dll is used by many games, the version I took was from my Steam directory, version 6.7.5.0
You can find the xinput1_3.dll in the latest DirectX monthly redist (or the Bioshock DVD if you followed that guide too )
In the extracted archive open the file APR2007_xinput_x86.cab and extract the xinput1_3.dll file
Now you need to open xinput1_3.dll in a HEX Editor, I use Hex Workshop.
Search for the textstring: "TraceMessage" and replace that with "GetUserNameA"
Next we will need to modify two of the games own dll files, because it checks if we are running WinXP!
Open CryInput.dll and search for GetRawInputData, replace with; MessageBoxA
Pad the text "Data" with zeroes
Next open up CrySystem.dll, at Offset 0x598E3 change "77" to "EB" (replaces "w" with a dot to jump this check...)
If you are modifying the Retail version the Offset is; 0x598A3 instead
v1.1 is at 0x59E23
v1.2.1 is at 0x59733
With Warhead Retail the offset is at 0x59313
Place all dll files in the games install dir under \Bin32
(Don't overwrite the files in your winnt/system32 dir!)
Please post any problems or issues in this thread, my Win2K install is not very "clean" so more fixes might be needed... Oh, make sure to install the latest nVidia beta display driver for Crysis too, as of this writing 177.92 (same applies to ATI/AMD of course)
And for our readers who don't have a fetish for HEX Editors here is a winrar archive with the already modified dll files
Choose the appropriate version depending on if you are running the Demo or Retail version! (And what patch if any you have installed if Retail)
Crysis_Demo_Win2K_Fix.rar
Crysis_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.5767)
Crysis_v1.1_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.5879)
Crysis_v1.2.1_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.6156)
Crysis_Warhead_Retail_Win2K_Fix.rar (ingame build number; 1.1.1.687)
What the XInput fix does is replace the call TraceMessage with something we will have access to, the side effect to this fix is that it should not be possible to use an X-Box Controller for the game (well I suppose there never was since xinput does not get installed at all for Win2K anyway so...)
And now some keywords for the google bot
The procedure entry point ReadProcessorPwrScheme could not be located in the dynamic link library POWRPROF.dll
The procedure entry point SymFromAddr could not be located in the dynamic link library dbghelp.dll
The instruction at "0x36503a01" referenced memory at "0x00000000". The memory could not be "read".
ERROR: CryInput.dll could not be loaded!
---------------------------
CryInput.dll could not be loaded. This is likely due to not having XInput support installed.
Please install the most recent version of the DirectX runtime.