Every video — the intro, the cutscene after New game, all of them — shows nothing but black while the audio stutters and drags. Menus and gameplay are fine. The video decoder DLL needs a small patch to run at full speed under Rosetta.
Copies a ready-to-paste prompt for Claude Code or another coding agent
I'm running "Necronomicon: The Dawning of Darkness" on macOS through CrossOver (CrossOver 27 Preview) and I need to fix this bug:
## Cutscenes are a black screen with choppy sound
Every video — the intro, the cutscene after New game, all of them — shows nothing but black while the audio stutters and drags. Menus and gameplay are fine. The video decoder DLL needs a small patch to run at full speed under Rosetta.
Apply the fix below on my machine, one step at a time. Tell me what each command does before you run it, back up any game files you modify, and stop if what you see doesn't match the steps.
Patch file to download: https://macgamebugs.com/patches/necronomicon-the-dawning-of-darkness/patch-necronomicon.command
---
Necronomicon plays its `.4xm` videos through `4xm_sdk.dll`, and that decoder builds part of itself at runtime: it copies a block of machine code into freshly allocated memory, makes it executable, and then keeps its working variables in the **same memory page** as the code. On Apple silicon that code runs through Rosetta 2, and every write to a page holding translated code throws the translation away. The decoder gets re-translated thousands of times per frame — a frame that should take 66 ms takes about half a second. The decoder notices it's late and skips drawing (that's the black screen), while the game's audio buffer receives only a fraction of the sound it needs (that's the stutter). The renderer is never involved, so no DirectDraw or dxwrapper setting can help.
The patch moves the decoder's code onto its own memory pages, away from its variables. Nothing else about the decoder changes, and the videos play at their normal 15 fps.
## Run the patch
1. Install the game in Steam first, then download `patch-necronomicon.command` below.
2. Open **Terminal** and run it (running through `bash` sidesteps Gatekeeper and the missing execute bit):
```
bash ~/Downloads/patch-necronomicon.command
```
3. It backs up `4xm_sdk.dll` to `4xm_sdk.dll.orig`, patches it, and also applies the fullscreen fix from the other guide (dxwrapper plus a DLL override) if that isn't in place yet. Launch Necronomicon from Steam as usual.
The script is safe to run twice — it recognizes an already-patched DLL and skips it. If your Steam library lives somewhere non-default, pass the game folder as an argument.
## Important
- **Don't use Steam's “Verify integrity of game files.”** It restores the original `4xm_sdk.dll` and the black videos come back — just re-run the script.
- The script only patches the exact DLL the Steam version ships with (49,152 bytes, MD5 `65cf8871…`). Anything else and it refuses rather than corrupting the file.
## What the patch changes
Four small edits in the DLL's loader for the runtime-generated decoder: allocate a bigger buffer and align it to a memory page, keep the decoder's variables in the first page, copy the code to the pages after it, and look for the loader's patch markers at the new location. The decoder itself is byte-for-byte the original.
Necronomicon plays its .4xm videos through 4xm_sdk.dll, and that decoder builds part of itself at runtime: it copies a block of machine code into freshly allocated memory, makes it executable, and then keeps its working variables in the same memory page as the code. On Apple silicon that code runs through Rosetta 2, and every write to a page holding translated code throws the translation away. The decoder gets re-translated thousands of times per frame — a frame that should take 66 ms takes about half a second. The decoder notices it’s late and skips drawing (that’s the black screen), while the game’s audio buffer receives only a fraction of the sound it needs (that’s the stutter). The renderer is never involved, so no DirectDraw or dxwrapper setting can help.
The patch moves the decoder’s code onto its own memory pages, away from its variables. Nothing else about the decoder changes, and the videos play at their normal 15 fps.
Run the patch
Install the game in Steam first, then download patch-necronomicon.command below.
Open Terminal and run it (running through bash sidesteps Gatekeeper and the missing execute bit):
bash ~/Downloads/patch-necronomicon.command
It backs up 4xm_sdk.dll to 4xm_sdk.dll.orig, patches it, and also applies the fullscreen fix from the other guide (dxwrapper plus a DLL override) if that isn’t in place yet. Launch Necronomicon from Steam as usual.
The script is safe to run twice — it recognizes an already-patched DLL and skips it. If your Steam library lives somewhere non-default, pass the game folder as an argument.
Important
Don’t use Steam’s “Verify integrity of game files.” It restores the original 4xm_sdk.dll and the black videos come back — just re-run the script.
The script only patches the exact DLL the Steam version ships with (49,152 bytes, MD5 65cf8871…). Anything else and it refuses rather than corrupting the file.
What the patch changes
Four small edits in the DLL’s loader for the runtime-generated decoder: allocate a bigger buffer and align it to a memory page, keep the decoder’s variables in the first page, copy the code to the pages after it, and look for the loader’s patch markers at the new location. The decoder itself is byte-for-byte the original.
Tiny 640×480 picture in the corner, or a DirectX SetDisplayMode() error
CrossOver 27 Preview
On a fresh bottle the game draws its 640×480 frame in the top-left corner of a black screen and runs sluggishly. Forcing a 640×480 virtual desktop makes it quit with “DirectX SetDisplayMode() error!” instead. dxwrapper's DirectDraw-to-Direct3D 9 mode fixes both.
Copies a ready-to-paste prompt for Claude Code or another coding agent
I'm running "Necronomicon: The Dawning of Darkness" on macOS through CrossOver (CrossOver 27 Preview) and I need to fix this bug:
## Tiny 640×480 picture in the corner, or a DirectX SetDisplayMode() error
On a fresh bottle the game draws its 640×480 frame in the top-left corner of a black screen and runs sluggishly. Forcing a 640×480 virtual desktop makes it quit with “DirectX SetDisplayMode() error!” instead. dxwrapper's DirectDraw-to-Direct3D 9 mode fixes both.
Apply the fix below on my machine, one step at a time. Tell me what each command does before you run it, back up any game files you modify, and stop if what you see doesn't match the steps.
Patch file to download: https://macgamebugs.com/patches/necronomicon-the-dawning-of-darkness/patch-necronomicon.command
---
The game asks DirectDraw for a 640×480, 16-bit fullscreen mode. CrossOver's Mac driver can't switch the display to it, so Wine hands the game a buffer the size of your whole screen: the 640×480 picture lands in the top-left corner, and the game pushes a screen-sized frame around on every redraw, which makes it sluggish. The obvious workaround — a 640×480 virtual desktop in the bottle — backfires: from that desktop the game only asks Wine to change the colour depth from 32 to 16 bit, Wine can't, and the game exits with `DirectX SetDisplayMode() error!`.
[dxwrapper](https://github.com/elishacloud/dxwrapper) in its `Dd7to9` mode replaces DirectDraw with Direct3D 9, renders at your native resolution and scales the 640×480 picture to fill the screen (4:3, with black bars at the sides). The `patch-necronomicon.command` script from the cutscene guide sets all of this up; here is what it does, if you'd rather do it by hand.
## Add the wrapper
1. Download the latest release from the [dxwrapper releases page](https://github.com/elishacloud/dxwrapper/releases).
2. From the archive, take three files:
- `ddraw.dll` (the DirectDraw stub — it's in the **Stub** folder)
- `dxwrapper.dll`
- `dxwrapper.ini`
3. Copy all three into the game folder, **next to `Necrono.exe`**. For the Steam version under CrossOver that's:
```
~/Library/Application Support/CrossOver/Bottles/Steam/drive_c/Program Files (x86)/Steam/steamapps/common/Necronomicon The Dawning of Darkness
```
`~` is your home folder — in Finder, press ⌘⇧G and paste the path to jump straight there.
4. Open `dxwrapper.ini` in a text editor and change these five values, leaving everything else at its defaults:
```
Dd7to9 = 1
SingleProcAffinity = 1
DdrawUseNativeResolution = 1
DdrawMaintainAspectRatio = 1
FullscreenWindowMode = 1
```
The first two live under `[Compatibility]`, the `Ddraw…` pair under `[Dd7to9]`, and `FullscreenWindowMode` under `[d3d9]`.
## CrossOver: make Wine use the wrapper
Wine loads its own built-in `ddraw` and ignores the one you added until you tell it otherwise. Either run this in **Terminal** (per-app override, the way the script does it):
```
"/Applications/CrossOver.app/Contents/SharedSupport/CrossOver/bin/wine" --bottle Steam --wait-children reg add "HKCU\Software\Wine\AppDefaults\Necrono.exe\DllOverrides" /v ddraw /d "native,builtin" /f
```
or open your bottle, choose **Run Command…**, run `winecfg`, and on the **Libraries** tab add an override for `ddraw` set to **Native then Builtin** (that one applies to the whole bottle, which is harmless).
Launch the game — it now fills the screen. To confirm the wrapper loaded, look for `dxwrapper-necrono.log` next to `Necrono.exe`; it should contain `Redirecting 'DirectDrawCreate' to --> 'Direct3DCreate9'`.
## Notes
- Don't set a virtual desktop for this bottle, and remove a 640×480 one if you added it while experimenting — with dxwrapper the game handles the screen itself.
- The dxwrapper files are extra files in the game folder, so Steam's “Verify integrity” leaves them alone; only the cutscene patch needs re-applying after a verify.
The game asks DirectDraw for a 640×480, 16-bit fullscreen mode. CrossOver’s Mac driver can’t switch the display to it, so Wine hands the game a buffer the size of your whole screen: the 640×480 picture lands in the top-left corner, and the game pushes a screen-sized frame around on every redraw, which makes it sluggish. The obvious workaround — a 640×480 virtual desktop in the bottle — backfires: from that desktop the game only asks Wine to change the colour depth from 32 to 16 bit, Wine can’t, and the game exits with DirectX SetDisplayMode() error!.
dxwrapper in its Dd7to9 mode replaces DirectDraw with Direct3D 9, renders at your native resolution and scales the 640×480 picture to fill the screen (4:3, with black bars at the sides). The patch-necronomicon.command script from the cutscene guide sets all of this up; here is what it does, if you’d rather do it by hand.
The first two live under [Compatibility], the Ddraw… pair under [Dd7to9], and FullscreenWindowMode under [d3d9].
CrossOver: make Wine use the wrapper
Wine loads its own built-in ddraw and ignores the one you added until you tell it otherwise. Either run this in Terminal (per-app override, the way the script does it):
or open your bottle, choose Run Command…, run winecfg, and on the Libraries tab add an override for ddraw set to Native then Builtin (that one applies to the whole bottle, which is harmless).
Launch the game — it now fills the screen. To confirm the wrapper loaded, look for dxwrapper-necrono.log next to Necrono.exe; it should contain Redirecting 'DirectDrawCreate' to --> 'Direct3DCreate9'.
Notes
Don’t set a virtual desktop for this bottle, and remove a 640×480 one if you added it while experimenting — with dxwrapper the game handles the screen itself.
The dxwrapper files are extra files in the game folder, so Steam’s “Verify integrity” leaves them alone; only the cutscene patch needs re-applying after a verify.