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

×
avatar
hoover1979: The Access Violation crash is the fact that JJ2 uses Direct Draw, which doesn't work on Windows versions later than XP.

I have a solution that worked for me with the original retail version of JJ2 (still had the files since the 90s) It should work with the GOG version too.

Download DGVoodoo2 Wrapper. I have successfully used this wrapper to get some Direct Draw, 3DFX Glide games and older D3D games to work on 64bit windows 7
http://dege.freeweb.hu/dgVoodoo2/dgVoodoo2.html

extract the contents to a folder of your choosing.
open the folder.
open the subfolder titled 'MS".
select "DDraw.dll" and press "CTRL + C"
navigate to your JJ2 Folder and press "CTRL +V" (this will paste the .dll file into JJ2)
Go back to the DGVoodoo2 folder.
open DGVoodoo2.
Under the top section (titled "Config folder / Running instance") press the "Add" button.
Navigate to your JJ2 folder and hit "select folder" This will link DGVoodoo 2 wrapper to JJ2.
Hit "OK" at the bottom-left of DGVoodoo2 to close.
Run Jazz Jackrabbit 2.
Profit.

WARNING: Don't set the resolution to 800x600x16 as the game will crash with a resolution initialization error when you run it next. Run at 640x480x16 or lower.

Let me know if this works for the GOG version.
I'm sorry, none of that worked for me. I still crash at the Epic Megagames screen.
The game can crash for many reasons. It has almost no error handling, and does a lot of assumptions. Bad coding.

One reason for a crash might be - your PC is too fast.

Technical details:
The game does QueryPerformanceCounter() and then divides the result by a value take from QueryPerformanceFrequency(). The division is done in way which requires the result to be 32-bit. If QueryPerformanceCounter() returns a value which won't fit to 32-bits after division, the game will crash.

The easiest fix is to run the game inside VM - those are slower.

But you could also patch the assembly. What workarounded the issue for me was changing:

`
push offset Frequency ; lpFrequency
call ds:QueryPerformanceFrequency
mov ecx, dword ptr Frequency
cmp ecx, 1000
jb short loc_careful_path
`

to:

`
push offset Frequency ; lpFrequency
call ds:QueryPerformanceFrequency
mov ecx, dword ptr Frequency
cmp ecx, 10000000
jb short loc_careful_path
`

(so I basically disallowed using the code path with that division unless frequency exceeds 10M. Since on my PC it's 3.5M, it now works.

Hex patch of my specific executable:
```
# diff -u1 <(xxd -g1 Jazz2.exe) <(xxd -g1 Jazz2.exe.orig)
--- /dev/fd/63 2021-10-09 15:20:18.000000000 +0200
+++ /dev/fd/62 2021-10-09 15:20:18.000000000 +0200
@@ -35623,4 +35623,4 @@
0008b260: 50 ff 15 f8 50 4c 00 e8 14 c8 00 00 68 00 89 4f P...PL......h..O
-0008b270: 00 ff 15 fc 50 4c 00 8b 0d 00 89 4f 00 81 f9 80 ....PL.....O....
-0008b280: 96 98 00 72 0d a1 04 89 4f 00 85 c0 75 04 b3 01 ...r....O...u...
+0008b270: 00 ff 15 fc 50 4c 00 8b 0d 00 89 4f 00 81 f9 e8 ....PL.....O....
+0008b280: 03 00 00 72 0d a1 04 89 4f 00 85 c0 75 04 b3 01 ...r....O...u...
0008b290: eb 02 32 db 84 db 88 1d fc 88 4f 00 74 2c b8 d3 ..2.......O.t,..
```
Post edited October 09, 2021 by mefistotelis