Castlevania: Curse of Darkness - XBE Recomp
CastlevaniaCOD-PC is a native PC port of Castlevania: Curse of Darkness for Xbox, featuring Direct3D 12 rendering and XAudio2 sound.
- Type: PC port
- Game: Castlevania: Curse of Darkness
- Runs on Windows
- By jmafort
- Latest release v1.3.0, 2026-11-02
- Source: https://github.com/jmafort/CastlevaniaCOD-PC
README
Castlevania: Curse of Darkness - XBE Recomp
An unofficial native PC port of the original Xbox version of Castlevania: Curse of Darkness, statically recompiled into a 64 bit Windows executable. Rendering runs on Direct3D 12 and sound on XAudio2.
This is a personal, non-commercial fan project. It has nothing to do with Konami, Microsoft or any other company: it is not affiliated with, endorsed or sponsored by them, and it is not an official release. See Legal.
Important
You need your own copy of the game. This project does not include, and will not provide, the game: no .iso
of the disc, none of its files and none of its code. The port plays from an .iso (or the extracted files) of
your own USA Xbox disc; see Required Game Version.
Where This Comes From
This repository is a fork of CastlevaniaCOD-PC by Pazzi7054, the port that took the Xbox game from boot to gameplay on PC, with its launcher, settings menu, widescreen, any resolution and PCSX2 texture packs. It is built on, and was inspired by:
- Xbox XBE Recomp by TGP482: the static recompiler and runtime that turn the Xbox executable into native x86-64 code, with the game's Direct3D 8 drawn on Direct3D 12 and its DirectSound played on XAudio2.
- Castlevania-COD-Recomp by Neguchads, another port of the same game. Its findings are used here, credited where used: why Hector's shadow went missing, and where the game keeps the camera, the maps, the rooms and the enemies.
- PCSX2, the PS2 emulator, whose names for replacement textures the HD packs use, so packs made for the PS2 game work here as they are.
Every project used is listed under Credits.
What This Fork Adds
On top of Pazzi7054's port:
- Plays from any copy of the USA disc - an
.iso(an xiso, or a whole disc dump of either disc layout) or the extracted files. Copies whose xbe header was patched for a hard disk loader or another region play too, and the launcher tells which of your copies will. - Hector's shadow - drawn by the Xbox with 4X multisampling, it is back under his feet.
- Widescreen menus - the pause menu, the map, the save screens and the panels behind messages fill a 16:9 screen, and an area's name card keeps its left end.
- HD texture packs -
.ddspacks as well as.png; eight Xbox textures the PS2 packs know under other names are found (with Panda_Venom and Stan21's pack, 96.8% of what the game draws gets an HD picture); cut-out pictures keep clean edges at every distance; a tool makes HD pictures for the textures a pack lacks; and the launcher shows whether you have a pack, with a switch for it. - No stutter the first time an effect is drawn - compiled shaders are kept on disk between sessions.
- Anisotropic filtering without a pack - it sharpens the game's own textures too.
- PS2 button layout - the PS2's button icons (from a PS2 HD pack) and shoulder buttons, as an option.
- Lament of Innocence bonus - the Moai the PS2 game gave for a Lament of Innocence save, as an option.
- Crazy mode and Trevor from the start - the name codes
@CRAZYand@TREVORwork without beating the game first. - Launcher - in the game's own look, with the title logo from your HD pack. It chooses the graphics card and says whether it has Direct3D 12, and has the button layout, the bonus and the pack switch.
- Program icon - the game's crest, made from your copy when you build.
- Newer recompiler - Xbox XBE Recomp moved up to its commit
91146ff, this fork's changes kept as a patch. - Requirements written out - what a PC needs to play, down to which graphics can run it.
- Automated tests - a runner that plays scenarios and checks the game state, warps to any room and sweeps every room; a bot that replays routes recorded from real play and wins the fights on them; per-room timings; an AI judge of screenshots; and a test that installs a release as a player would. See Testing.
Required Game Version
Only the USA release is supported. The config is tied to the exact code addresses in its default.xbe, and the
built exe refuses any other default.xbe. Many copies have the xbe's certificate patched (its title, allowed media
and region, for a hard disk loader or any region's console); the code is the same, and the game puts those fields
back as the release has them and plays that.
| Game | Castlevania: Curse of Darkness, original Xbox, USA (NTSC-U) |
| Title ID | 4B4E002D (KN-045), version 1, XDK 5849 |
default.xbe size | 7,352,320 bytes |
default.xbe SHA-1 | 423BC19B7CED263570DCE5E7CD5D81954DFBE13C |
default.xbe MD5 | 92176FDDF071667F596680DF64DED7FE |
Other regions (PAL, Japan) will not work. The launcher's Game files page tells which of your copies will play, and reads the xbe inside a disc image too.
Installation
- Download the latest release from Releases and extract it anywhere.
- Run
Castlevania.exe. Theassetsfolder opens. - Put your game in it: an
.isoof your own disc (a whole disc dump or an xiso), or the extracted disc (default.xbewith itsdata,movieandsoundfolders). This project does not provide it. - Run
Castlevania.exeagain. The first start builds the game code from your copy, which takes a few minutes and shows its progress; press Start when it is done. After that the game starts straight away. - Optional: an HD texture pack, see HD Textures. The game plays as it is without one.
A release contains no game code. Castlevania.exe holds the runtime, and the first start makes Castlevania.dll
from your own default.xbe with the recompiler, Clang and LLD in the compiler folder. The
Visual C++ runtime comes with it, so a fresh Windows needs nothing else.
On a freshly installed Windows there is nothing to download besides the release and a graphics driver; see Requirements.
CastlevaniaLauncher.exehas every setting and checks your game files;Castlevania.exeskips it.- The game can run from the extracted files in
assets, or from an ISO of the disc placed inassets. - Recomp settings can be adjusted in
castlevania.tomlbeside the exe. Saves go tohdd\E\UDATA\4b4e002d.
Windows or Antivirus Warnings
The port's programs are not code-signed (a certificate costs money every year, and this is a free hobby project), and a new download has not been run by many people yet. So browsers and Windows may warn about it:
- The browser may block the download as "not commonly downloaded" or "suspicious". Open its downloads list (Ctrl+J) and keep the file: in Chrome Keep or Download suspicious file; in Edge ..., Keep, Show more, then Keep anyway.
- Windows may say "Windows protected your PC" on the first start: More info, then Run anyway.
Some antivirus programs are also wary of a program that builds code and then loads it, which is what the first start does. That is not a virus:
- Every line of the code is in this repository, and a release is made by
release.batfrom it. You can build it yourself instead of downloading. - The release page lists each zip's SHA-256 and links its VirusTotal scan, where dozens
of antivirus programs checked it. In PowerShell,
Get-FileHash CastlevaniaCOD-PC-<version>.zipshows the SHA-256 of your download; the same value means the same file. - The programs' Properties (Details tab) name the project, its version and this page.
If an antivirus moves a file to quarantine, restore it and allow the folder, and please report it to that antivirus as a false positive (Microsoft Defender's is the file submission page). Download the port only from this repository's Releases page.
HD Textures
Optional. Without a pack the game draws its own textures, as on the Xbox. The Xbox release kept the PS2 game's textures, so HD texture packs fans made for the PS2 game in PCSX2 work here as they are. These packs are their makers' work: they are not part of this project, and are linked here with thanks.
| Pack | Made by | Notes |
|---|---|---|
| Castlevania - Curse of Darkness (USA) HD Remaster | Panda_Venom and Stan21 | On GBAtemp. The pack this port was tested with: 96.8% of what the game draws gets an HD picture. |
| VK Curse of Darkness | VictorKratos | On Google Drive, a 15 GB .rar. |
| Castlevania PS2 4K Texture Packs | PlatinumMimic (Calm-Consideration41) | Free, on Buy Me a Coffee; Curse of Darkness and Lament of Innocence. |
To add one:
- Download a pack and extract it.
- Copy its pictures into a
texturesfolder besideCastlevania.exe, with the pack's own folders (textures\SLUS-21168\replacements\...is fine). The launcher's Open textures folder makes that folder. Keep one pack in it at a time. - Open
CastlevaniaLauncher.exe. Its home page says how many pictures it found, and its switch turns the pack on or off. The pack is read when the game starts, so a change applies from the next start.
.png and .dds pictures are both read. Pictures of a whole texture are used; the pieces of a texture some packs
also have (-rWxH in their names) are not, nor pictures of the PS2's own screen buffers. More on how pictures are
matched, and on the textures the PS2 packs lack, under HD Texture Packs.
Features
Launcher
CastlevaniaLauncher.exe checks your graphics (whether they have the Direct3D 12 the game draws with, as the game picks
them: the high performance GPU first; CV_NO_D3D12=1 shows the warning anywhere) and your game files (the USA
default.xbe by its hash, or a disc image), adds a disc image to assets for you (a hard link on the same drive,
otherwise a copy), and has every setting: the graphics card (Automatic, the fastest, or any with Direct3D 12: on a
laptop the one in the processor saves battery), display mode, resolution, v-sync, widescreen, render scale, anisotropic
filtering with quick presets, the HD texture pack, FPS counter, pause on focus loss, the settings menu key and the
button layout. Changes are saved as you make them; Play starts the game. Saves and logs are a click away. --page controls (or home, display, graphics, game, files) opens it on that page. It looks like the game's menus: navy with fog
and a teal band, page names on orange banners, the chosen option on a green bar, boxes framed in light blue, Palatino
for the game's serif. Its home page has the title logo from your HD texture pack (else the name in gold), the crest
of its icon, and under Play the pack's row: how many pictures the textures folder has, with the switch for them,
or a button that opens the folder when it has none. The files are looked at again whenever the launcher comes back to
the front, so a pack copied in meanwhile shows.
Settings Menu
Press F10 in game for the settings menu, or click both sticks in (L3 + R3) on a controller. The key can be
changed in the launcher (Game tab), for keyboards where F10 needs Fn or is taken by another program. Every change
applies at once and is saved to castlevania.toml. While the menu is open the game gets no input; Escape, the menu
key or L3 + R3 closes it.
Display
- Any Resolution - Renders at your display's resolution instead of 640x480.
- Display Modes - Fullscreen, borderless or windowed, with vsync.
- Widescreen - On a 16:9 or wider display the game is shown 16:9 with more of the world at the sides (Hor+), without stretching. The HUD, text and movies stay 4:3 in the middle; the backdrops of the menus, the map and the save screens reach the sides, as does the dimmed panel behind a message. Turn it off in the menu (Graphics) for the original 4:3 picture.
- No Overscan Streaks - The rows a TV's overscan used to hide at the top and bottom of the picture no longer smear; the frame fills the screen.
HD Texture Packs
Optional: without a pack the game draws its own textures, as on the Xbox. Texture packs made for PCSX2 work as they are:
put a pack's replacement pictures (.png or .dds) in a textures folder beside the game (folders inside it are
fine). The launcher's home page says whether that folder has a pack and how many pictures, with a switch to turn it on
or off before you press Play (also on its Graphics page, with the size pictures load at; in castlevania.toml,
texture_pack = false turns it off). The Xbox release kept the PS2's textures, so each one is matched by the same
hashes PCSX2 names the pictures by. Pictures load in the background with full mipmaps, scaled to the size set in the
launcher (1024, 2048 by default, or full size). Paletted textures are replaced; region (-rWxH) and true colour
pictures are not used yet. With Panda_Venom and Stan21's pack, 96% of the textures the game draws have a picture (1,926
of the 2,000 met in a sweep of every room, 96.8% of their area). Of the rest, some are not in the pack (two round stone
doors, a few effects) and some the Xbox changed (the save screens say HARD DISK where the PS2's say MEMORY CARD; the
HUD's icons have NEW! labels and the d-pad of its own), so the PS2's picture would be wrong for them.
tools\texpack\upscale.py makes pictures for those from the game's own textures (see Testing): 48 pictures for the 24
textures, which put in textures cover the rest of that sweep. The pack is read when the game starts, so the switch
takes effect from the next start; the in-game menu has none.
Graphics
- Native Direct3D 12 Renderer - The game's Direct3D 8 calls, fixed function stages and paletted textures are drawn natively.
- Render Scale - 50% to 200% of the output height; above 100% supersamples.
- Anisotropic Filtering - Up to 16x, on the game's own textures too: they have no mip levels, so a floor or wall seen at an angle shimmers in the distance without it; with the HD pack, whose pictures have mip levels, it keeps them sharp there instead.
- Shader Cache - Shaders compiled while playing are kept in
cache\shadersbeside the game, so later sessions do not stutter the first time an effect is drawn.
General
- FPS Counter - Optional, in the corner.
- Pause on Focus Loss - The game stops while another window is in front (on by default).
- Lament of Innocence Save - As the PS2 game did when it found a Lament of Innocence save on the memory card:
a Moai to pick up at the far end of the room behind the first courtyard, beside the potion, for completing the
item list (the launcher's or the in-game menu's Game page;
lament_save = true). - Crazy Mode and Trevor Mode - Name a new game
@CRAZYfor Crazy mode (harder enemies) or@TREVORto play as Trevor Belmont, with his whip and sub-weapons. The game takes these names only once it has been beaten; here they work from the start. The@is on the last row of the name screen's letters. A beaten game is still not recorded in your save.
Controller
Supports Xbox, PlayStation and Switch controllers, with hot plugging and rumble.
- Button Layout - Xbox, or PS2: the PS2's button icons (□ △ ○ ×, L1 L2 R1 R2) and its shoulders, L1 resetting
the camera and R1 guarding, L2 and R2 locking on (the launcher's or the in-game menu's Controls page;
button_layout = 1; in game, from the next start). The PS2 icons come from an HD texture pack made from the PS2 game (HD Texture Packs, above), and the launcher says whether yours has them; without one the Xbox icons stay.
Keyboard
The keyboard plays as player 1 while the window is in front:
| Keys | Pad |
|---|---|
| W A S D | left stick (move) |
| arrow keys | right stick (camera) |
| K or Space | A (jump) |
| J | X (attack) |
| L | B |
| I | Y |
| Q / E | left / right trigger |
| Z / C | white / black |
| Enter / Backspace | Start / Back |
| numpad 8 2 4 6 | d-pad |
| F10 (changeable) | settings menu (L3 + R3 on a controller) |
Miscellaneous
- Boot Splash - Place a
splash.png(or.bmp) beside the exe to display a splash screen at launch. - Crash Dumps - Written to a
CrashDumpsfolder beside the exe.
Requirements
To Play
A release needs nothing installed on a fresh Windows but the graphics driver:
- Windows 10 (version 1703 or later) or 11, 64-bit.
- GPU with Direct3D 12 (feature level 11_0), and its driver. Direct3D 12 is part of every Windows 10 and 11, but
works only where the graphics chip has a driver for it: NVIDIA GeForce 600 series (2012) or newer (the 400 and 500
series got it only in their last drivers), AMD GCN cards, Radeon HD 7700 to 7900 (2012) and later, or Intel's 4th
generation Core graphics (Haswell, HD 4200 to 4600 and Iris, 2013) or newer. A PC with only older graphics, such as
the Intel HD 3000 or 4000 of a 2011 or 2012 laptop, runs Windows 10 but not the game, which says "Direct3D 12 could
not be started". To check:
dxdiag, the Display tab's Driver Model must be WDDM 2.0 or higher (its System tab says DirectX 12 on every Windows 10, whatever the graphics). - CPU with SSE4.2 and POPCNT, as the game code is compiled for x86-64-v2: Intel since the first Core i (2008), AMD since Bulldozer (2011). The graphics are the stricter limit on old PCs.
- Disk: about 0.2 GB for the release, and 0.2 GB more once the first start has built the game code (it wants 1 GB free to start; its ready page can delete the compiler folder afterwards), besides your game: 3.1 GB as a disc image, 2.9 GB extracted.
- Your copy of the game, the USA release (see Required Game Version).
- Optional: a controller (Xbox, PlayStation or Switch; the keyboard plays too), and an HD texture pack.
Everything else comes in the zip or with Windows. The zip has the Visual C++ runtime (msvcp140.dll,
vcruntime140.dll, vcruntime140_1.dll) and the recompiler, Clang and LLD the first start builds the game code
with; Direct3D 12, the shader compiler (d3dcompiler_47.dll), XAudio2 and the C runtime (UCRT) are part of
Windows 10 and 11. Playing needs no internet connection, the first start neither.
To Build
On a fresh Windows, install:
- Git for Windows. CMake fetches the libraries below with it too.
- Visual Studio 2022 or newer (Community is free) with the workload
Desktop development with C++ (the MSVC tools and the Windows SDK), and from Individual components
C++ Clang tools for Windows and C++ CMake tools for Windows (CMake and Ninja).
build.batoffers to add these two if they are missing. Visual Studio's Clang is enough (19.1 builds and plays). LLVM from llvm.org (winget install LLVM.LLVM) is used instead when it is installed inProgram Files\LLVM(23.1 tested).
The first build also needs an internet connection: CMake downloads SDL 3.4.16,
toml++ 3.4.0, Dear ImGui 1.91.0,
Zydis 4.1.1 and xxHash 0.8.2. The build
takes about 1 GB of disk (out and generated), besides the game's 2.9 GB in assets. Python is not needed to
build or to make