Skip to content

Repository files navigation

PsyDoomX

PlayStation Doom on the original Xbox. A port of PsyDoom, which reverse engineered the PlayStation version of Doom and Final Doom into portable C++.

You bring your own game disc. Nothing from a retail game ships here.

splitscreen platform

What this adds to PsyDoom

  • Two player splitscreen, side by side or one above the other, on one console with two pads. The PlayStation game only ever had link cable multiplayer between two machines.
  • A launcher that finds whichever games are installed and starts them, wearing the menu of whichever one you pick - its background, its font, its music and its sounds, read out of the disc.
  • A Randomizer mode, listed after Singleplayer, Cooperative and Deathmatch. Every monster, item and pickup in the level is rolled for something else that fits where it stands, along with the sky and the music. It only ever places what the running game can actually draw, so nothing turns into a missing sprite.
  • Cross edition super shotgun sprites. Doom's and Final Doom's are different art. Carry either, per player, and it changes in your hands.
  • The Master Edition's monsters in the other games. If you have it installed, the Randomizer can put the Arch-Vile, the Wolfenstein SS and Commander Keen into Doom and Final Doom, with their own sounds. Without it those three are simply left out of the roster.
  • Player colours, the way PC Doom does them - green, indigo, brown and red - so two marines can be told apart. Per player, and it follows the body.
  • Named levels, optionally. The cooperative and deathmatch level select can read MAP24: Hell Beneath rather than Level 24, using each game's own map names.
  • Per player turn speed, autorun and stat display, and an on screen frame rate readout.

What you need

  • An original Xbox that can run unsigned software.
  • Your own copy of one or more of: PSX Doom, PSX Final Doom, or the [GEC] Master Edition, as a .cue and its .bin files. These are not included and never will be.

Installing

Put the executable and your discs on the Xbox's hard disk like this:

E:\Apps\PsyDoomX\
    default.xbe
    Doom\Doom.cue                          + its .bin files
    FinalDoom\FinalDoom.cue                + its .bin files
    MasterEdition\PSXDOOM_BETA_4.cue       + its .bin file

Only the folders you actually have need to exist - the launcher lists what it finds and nothing else. Launch default.xbe from a dashboard.

The launcher writes its settings, a cached copy of each disc's menu artwork, and its logs into E:\Apps\PsyDoomX\. Deleting E:\Apps\PsyDoomX\cache\ is harmless; it is rebuilt on the next start.

Controls

Standard Duke pad or S controller. Two pads gives you splitscreen from the main menu's multiplayer option.

Left stick Move
Right stick Turn
A Use
Right trigger Fire
White / Black Change weapon
Back Automap
Start Pause

Bindings, turn speed and autorun are under Options → Extra Options. Player colour and super shotgun style are there too, in a multiplayer game.

The launcher itself has settings for the frame rate readout, the menu style, and whether levels are named or numbered. They are remembered between runs.

Building

Needs nxdk and CMake.

git clone --recursive https://github.com/XboxDev/nxdk
make -C nxdk NXDK_ONLY=y

git clone --recursive <this repo>
cd PsyDoomX
NXDK_DIR=../nxdk ./scripts/build_xbox.sh

The result is build-xbox/game/default.xbe.

On Windows, run that script under a bash that shares its MSYS2 runtime with cmake - devkitPro's bash works, Git Bash does not, because environment variables do not carry between the two.

Tagged releases are built the same way by GitHub Actions and the executable is attached to the release.

The diagnostic relay

There is a development tool built in that sends a running commentary of what the console is doing to a listener on another machine. It does nothing unless you ask it to. Create a file at E:\Apps\PsyDoomX\logserver.txt containing one line:

192.168.0.5:9909

Without that file no socket is opened and nothing leaves the console. No address is compiled in.

Not everything is here

This is one platform's port. The Vulkan renderer, the FLTK launcher and the various tools that PsyDoom carries for other platforms are all still in the tree and still build for those platforms, but they are switched off for the Xbox build - it has no Vulkan and no windowing system.

Xbox specific code is marked with __XBOX__ and, where a decision only makes sense on this hardware, says so in a comment. A good deal of it is about one console's quirks: a single framebuffer with no back buffer, a clock that does not advance dependably, and an audio path that has to be driven by polling rather than by interrupt.

Credits and licence

PsyDoom is by Darragh Coy (BodbDearg) and is the reason any of this exists. The reverse engineering of PSX Doom, the renderer, the sound system and the disc handling are all his work; this port adds an Xbox back end and splitscreen on top of it.

Doom is by id Software. The PlayStation version is by Williams Entertainment.

GPLv3, the same as PsyDoom. See LICENSE and CONTRIBUTORS.md.

About

Xbox Original port of PsyDoom (PSX Doom) with splitscreen multiplayer support.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages