diff --git a/.gitignore b/.gitignore index 888dd2f..8963d85 100644 --- a/.gitignore +++ b/.gitignore @@ -5,4 +5,5 @@ /SL /SaW /WoW +/WoW-CD /bin diff --git a/README.md b/README.md index b09b6f4..b312261 100644 --- a/README.md +++ b/README.md @@ -72,6 +72,10 @@ The menu system seen in Chaos Gate is not present; instead, there is a `BUTTONS` directory and a lot of `pcx` files under `PIC` that, I suspect, do the job for this game. +Even with a full installation, Wages of War leaves a lot of data on the CD. It +may be best to run solely from the `WOW` directory on the CD, assuming it's a +strict superset of what gets installed, data-wise. + ## Long-term goals Once full playthrough of the official single-player campaign for all four games @@ -96,7 +100,8 @@ Completely new fantasy game using the same engine. ## 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: +installed on your system. Dependency management uses `go mod`, so ensure you +have at least Go 1.11. ``` $ go version @@ -114,22 +119,19 @@ Debian: 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` +## Configuring -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. +Since we support multiple games, a fair bit of configuration is required. Copy +`config.toml.example` to `config.toml` and edit it to your requirements. The +`data_dir` for the engine(s) you want to use is probably the most important bit, +along with the `default_engine`. -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. +The various games all use snapshots of the original engine at different points +in time, and specify a lot in code that we need to specify in data. That should +all go into the config file, so new games will be able to adapt the engine to +their needs. -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. +## Running To run: @@ -145,27 +147,29 @@ 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 `ordoor` binary: +Menus / UI widgets have fairly good support now; you can use the `view-menu` +binary to inspect them: + +``` +make view-menu +./view-menu -menu Main +``` + +This renders the menus found in Chaos Gate and Soldiers At War. The Squad Leader +format seems basically the same, but has some extra files and aren't 8-bit +colour. They don't display at the moment. Wages of War uses a different format +altogether. + +For Chaos Gate, there is the **start** of the game in an `ordoor` binary: ``` -$ cp config.toml.example config.toml $ make ordoor $ ./ordoor ``` -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 +The idea is to hook all the different parts together, and to an abstract game +state (which is called `ship` for ordoor), to make the whole thing playable. It +isn't playable *yet*, but it's heading in that direction. ## Sound @@ -180,4 +184,3 @@ $ ./scripts/convert-wav ./orig/Wav As with video playback, the ambition is to *eventually* remove this dependency and operate on the unmodified files instead. - diff --git a/config.toml.example b/config.toml.example index 903720f..8c4daba 100644 --- a/config.toml.example +++ b/config.toml.example @@ -3,7 +3,7 @@ video_player = ["mpv", "--no-config", "--keep-open=no", "--force-window=no", "-- default_engine = "ordoor" [engines.geas] # Wages of War -> Gifts of Peace -> Geas - data_dir = "./WoW" + data_dir = "./WoW-CD" palette = "WagesOfWar" [engines.ordoor] # Chaos Gate -> Order Door -> Ordoor @@ -14,9 +14,9 @@ default_engine = "ordoor" data_dir = "./SaW" palette = "SoldiersAtWar" -# [engines.] Squad Leader -> ??? -> ??? -# data_dir = "./SL" -# palette = "SquadLeader" # may not be relevant? +[engines.sl] # Squad Leader -> ??? -> ??? + data_dir = "./SL" + palette = "ChaosGate" # may not be relevant? [options] play_movies = true