Nick Thomas bfe9fbdf7d Start work on menu interactivity.
With this commit, we get a ui.Interface and ui.Widget type. The
interface monitors hover and mouse click state and tells the widgets
about them; the widgets execute code specified by the application when
events occur.

Next step: have wh40k load the main menu and play sound, etc.
2020-03-22 02:58:52 +00:00
2020-03-22 02:58:52 +00:00
2020-03-21 18:50:26 +00:00
2019-10-08 22:28:45 +01:00
2020-03-18 23:23:09 +00:00

Ordoor

Portmanteau of Order Door, a remake project for Warhammer 40,000: Chaos Gate, the game from 1998.

You must have a copy of the original game data to use this project

No game yet, nothing even close. I'm in the very early stages of trying to understand the various file formats. Until then, you can play WH40K: Chaos Gate in a WinXP VM, disconnected from the internet. It doesn't need 3D rendering!

WH40K.exe is the existing game engine, and WH40K_TD.exe is the map editor. Allows things to be saved as .MAP or as .SMF ("Super Macro File").

Building from source

I'm writing code in Go at the moment, so you'll need to have a Go runtime installed on your system:

$ go version
go version go1.14 linux/amd64

In addition, you'll also need the following packages installed, at least in Debian:

# apt install libx11-dev libxcursor-dev mesa-common-dev libxrandr-dev \
  libxinerama-dev libgl1-mesa-dev libxi-dev libasound2-dev mpv ffmpeg

You can then run make all in the source tree to get the binaries that are present at the moment.

Place your WH40K: Chaos Gate installation in ./orig to benefit from automatic path defaults. Otherwise, point to it with -game-path

The view-map binary attempts to render a map, and is the current focus of effort. Once I can render a whole map, including pre-placed characters (cultist scum), things can start to get more interesting.

Current status: almost pixel-perfect map rendering. Static objects (four per map coordinate: floor, centre, left, and right) are rendered fine, and each Z level looks good. There are a few minor artifacts here and there.

Characters and animations aren't touched at all yet. Rendering performance is poor. No gameplay, no campaign logic. Interaction with the play area is minimal and limited to pan, zoom, and click for basic console output.

Still, I'm proud of myself.

To run:

$ make view-map
$ ./view-map -map Chapter01

Looks like this:

Use the arrow keys to scroll around the map, the mouse wheel to zoom, and the 1 - 7 keys to change Z level.

Dependency management uses go mod, so ensure you have at least Go 1.11.

There is the start of the menu / campaign flow in a wh40k binary:

$ cp config.toml.example config.toml
$ make wh40k
$ ./wh40k

This plays the introductory videos so far, and nothing else.

Menus are in the process of being rendered; you can use the view-menu binary to inspect them:

make view-menu
./view-menu -menu ./orig/Menu/Main.mnu

This menu displays OK, including

Sound

Sound is in the very early stages. Chaos Gate uses ADPCM WAV files, which are a pain to play in Go, so for now, a preprocessing step that converts them to .ogg is used instead. To create ./orig/Wav/*.wav.ogg, run:

# apt install ffmpeg
$ ./scripts/convert-wav ./orig/Wav

As with video playback, the ambition is to eventually remove this dependency and operate on the unmodified files instead.

Miscellany

"Mission Setup" includes information about available squad types

From EquipDef.cpp Dumo: CEquipment we learn the following object types:

  1. DELETED
  2. WEAPON
  3. GRENADE
  4. MEDIPACK
  5. SCANNER
  6. GENESEED
  7. CLIP
  8. DOOR KEY
  9. DOOR KEY
  10. DOOR KEY
  11. DOOR KEY

And we learn they can be "on"....

  1. CHARACTER
  2. VEHICLE
  3. CANISTER

I'm starting to see some parallels with this in the data formats, and the timeline (1997) seems about right. Worth keeping an eye on!

Description
Unofficial remake of the classic game, Warhammer 40K: Chaos Gate. Ordoor = Order Door = Chaos Gate. Obviously.
Readme 59 MiB
Languages
Go 94.4%
Ruby 5.2%
Makefile 0.4%