Document maps findings and start moving things out of README.md

This commit is contained in:
2018-03-17 04:16:14 +00:00
parent 087b236547
commit 22c5b6235d
3 changed files with 566 additions and 102 deletions

147
README.md
View File

@@ -1,116 +1,25 @@
# WH40K: Chaos Gate
Re-implementation of the WH40K binary using SDL.
Re-implementation of the WH40K binary.
**You must have a copy of the original game data to use this project**
Files:
```
Anim/
WarHammer.ani # Doesn't seem to be a RIFF file. 398M so very important.
* There's a pcx image header at `dd ... bs=1 skip=213` but it seems to be a false alert
* Hits for "AmigaOS bitmap font"... probably a false positive
* Lots of 8-byte reads when loading stuff in the mission editor
* Some ~4K reads, havent found one corresponding to a known format yet
Assign/
*.asn # Unknown, seems to be related to .obj files
Cursor/
*.ani # RIFF data
*.cur # Presumably standard windows-format non-animated cursors
Data/
*.dat # plaintext files defining properties of objects. No single format
PARSED:
Accounting.dat # key = value => internal/data/accounting.go
AniObjDef.dat # animated object definitions
GenericData.dat # Generic Game Settings
IN PROGRESS:
TODO:
ChaNames.dat # list of character names
Coordinates.dat # Weapon Firing Coordinates
Defs.dat # defines properties for objects and tiles, each of which seems to have an id
GDestroy.dat # table of what destroys what?
HasAction.dat # "Are there animation for each of the character" - list of booleans
MiniMap.dat # lots of seemingly random numbers. IDs?
MissionBriefing.dat # Contains all Campaign Mission Briefing Text. Sections: "CAMPAIGN MISSION X ... END CAMPAIGN MISSION X"
PWeight.dat # Personality weights for the individual character types
Random_AI.dat # contains the percentage of the different AI types for each of the different Chaos Squad Types
RandomPlanets.dat # Campaign Primary and Secondary Objectives
Sounds.dat # Sound Effect Data
SpellDef.dat # SPELL DEFINITIONS
StdWeap.dat # SQUAD STANDARD WEAPONS
Ultnames.dat # List of names for ultramarines
VehicDef.dat # VEHICLE DEFINITIONS
WeapDef.dat # Weapon definitions
PROBABLY NOT NEEDED:
BugHunt.dat # Contains SMF text for Bug hunt random missions
Credits.dat # list of credits
GenArm.dat # "Random campaign armory levels - space marine"
HeroArm.dat # "Random campaign armory levels - Veteran"
MHeroArm.dat # "Random campaign armory levels - Veteran"
PlanetDesc.dat # well-documented params. random mission generator params per planet.
RandChar.dat # Random character matrix. Information on what goes into a character matrix.
RandSMFtext.dat # SuperMacro Objectives for Campaign Random Mission Generator.
SpArm.dat # "RANDOM CAMPAIGN ARMORY LEVELS - Veteran"
VetArm.dat # "RANDOM CAMPAIGN ARMORY LEVELS - Veteran"
*.chk # checksums? Mentions all the .dat files
*.cyc # ColorCycle DataFile.
*.dta # localized strings and things
Encyclopedia.dta # encyclopedia entries
KeyMap.dta # unknown
Keymap.dta # unknown
USEng.dta # Localized strings
EquipmentMenuData # gzip-compressed, presumably to do with (initial?) squad configuration
Filters/
wh40k.flt # Audio filter(s?)
Fonts/
cboxfont # unknown
*.fnt # ASCII text. Map keycodes to sprites?
*.spr # sprites, presumably
Idx/
WarHammer.idx # unknown, 1.8M
Maps/
*.MAP # gzip-compressed, must be map definition, contains `WHMAP` constant and character names
*.TXT # scenario text
Menu/
*.mnu # plain text, linked to .obj file, contains definitions
*.obj # unknown, not 3D .obj format
Misc/
occlusio.lis # plain text, presumably occlusion mappings?
MultiMaps/
*.MAP # Like Maps/
*.TXT
Obj/
*.obj # must be visual data of some sort, one per placeable map object?
Pic/
*.pcx # Standard .pcx format
RandomMaps/
*.chk # multiplayer. worry about these another day
*.dat
Save_G/
*.sav # savedata, gzip-compressed, custom format
*.txt # Seems to be a copy of one of Maps/*.txt
Sets/
Data.chk # checksums? Mentions all the .set files
*.set # plain text, related to maps, lists a set of .obj files for that map?
SMK/
*.smk # Videos: RAD Game Tools Smacker Multimedia version 2
Sounds/
wh40k.ds # 0xffffffff then a list of .wav file names. Some sort of index?
Wav/
*.wav # normal WAV files, all mentioned in Sounds/wh40k.ds
```
WH40K.exe is the existing game engine
WH40K_TD.exe is the map editor. Allows things to be saved as .MAP or as .SMF
("Super Macro File")
"Mission Setup" includes information about available squad types
This README is a grab-bag of miscellaneous information about file formats at
present. This is being migrated to the [Formats overview](doc/formats/index.md)
as a precursor to making this file useful!
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 WH40L: Chaos Gate
in a WinXP VM, disconnected from the internet. It doesn't need 3D rendering!
"Mission Setup" includes information about available squad types
From EquipDef.cpp Dumo: CEquipment we learn the following object types:
@@ -404,4 +313,38 @@ Perhaps we have 24 bytes of header and that's the header-exclusive pixel data si
Last 8 bits would then actually be the start of the image, but there's a lot
of similarity between them...
It smells a bit like a DIB:
| Offset | Size | Example | Purpose |
| 0 | 2 | D1 00 (209) | ?
| 2 | 2 | 41 01 (321) | ?
| 4 | 2 | 80 00 (128) | Width? |
| 6 | 2 | 3F 00 (63) | Height?
| 8 | 4 | 00 00 00 00 | Could be pitch / stride?
| 12 | 4 | D1 10 00 00 | Size of pixel data
| 16 | 4 | 00 00 00 00 | ?
| 20 | 4 | 00 00 00 00 | ?
Now, how to convert the pixel data to an image?!?!
Average bits per pixel seems to be less-than-1, e.g. for crates.obj:
```
2018/03/16 21:21:37 CFrame 0: w=76 h=57 sz=3008 w*h=4332 bpp=0.6943674976915974
2018/03/16 21:21:37 CFrame 1: w=76 h=57 sz=2988 w*h=4332 bpp=0.6897506925207756
2018/03/16 21:21:37 CFrame 2: w=108 h=73 sz=5185 w*h=7884 bpp=0.6576610857432775
2018/03/16 21:21:37 CFrame 3: w=107 h=73 sz=5208 w*h=7811 bpp=0.6667520163871463
2018/03/16 21:21:37 CFrame 4: w=109 h=95 sz=7639 w*h=10355 bpp=0.7377112506035731
2018/03/16 21:21:37 CFrame 5: w=109 h=95 sz=7620 w*h=10355 bpp=0.7358763882182521
2018/03/16 21:21:37 CFrame 6: w=76 h=57 sz=2996 w*h=4332 bpp=0.6915974145891043
2018/03/16 21:21:37 CFrame 7: w=76 h=57 sz=2964 w*h=4332 bpp=0.6842105263157895
2018/03/16 21:21:37 CFrame 8: w=108 h=73 sz=5148 w*h=7884 bpp=0.6529680365296804
2018/03/16 21:21:37 CFrame 9: w=107 h=73 sz=5153 w*h=7811 bpp=0.659710664447574
2018/03/16 21:21:37 CFrame 10: w=109 h=95 sz=7423 w*h=10355 bpp=0.7168517624336069
2018/03/16 21:21:37 CFrame 11: w=109 h=95 sz=7487 w*h=10355 bpp=0.7230323515210043
```
So some form of compression? RLE?
How does WH40K_TD.EXE draw these?