More file format musing
This commit is contained in:
@@ -1,18 +1,71 @@
|
||||
# `Anim/WarHammer.ani`
|
||||
|
||||
This turns out to simply be an [`obj`](obj.md#WarHammer.ani) file. However, some
|
||||
other files are implicated in its interpretation:
|
||||
This turns out to simply be an [`obj`](obj.md) file.
|
||||
|
||||
- `Data/AniObDef.dat`
|
||||
The first 1,064 sprites are all of the same Ultramarine, carryng a bolter. There
|
||||
are eight "facing" orientations:
|
||||
|
||||
* North
|
||||
* Northeast
|
||||
* East
|
||||
* Southeast
|
||||
* South
|
||||
* Southwest
|
||||
* West
|
||||
* Northwest
|
||||
|
||||
For each orientation, an action is pictured in a variable number of frames. The
|
||||
final frame for each action appears to be "stationary".
|
||||
|
||||
* Walk (13 frames)
|
||||
* Run (9 frames)
|
||||
* Crouch down (8 frames)
|
||||
* Stand up (8 frames)
|
||||
* Take aim (standing) (6 frames)
|
||||
* Fire (standing) (6 frames)
|
||||
* Relax aim (standing) (6 frames)
|
||||
* Throw grenade (standing) (18 frames)
|
||||
* Take aim (crouched) (5 frames)
|
||||
* Fire (crouched) (5 frames)
|
||||
* Relax aim (crouched) (5 frames)
|
||||
* Throw grenade (crouched) (17 frames)
|
||||
* Draw melee weapon (standing) (10 frames)
|
||||
* Strike down with melee weapon (standing) (8 frames)
|
||||
* Stab with melee weapon (standing) (9 frames)
|
||||
|
||||
Added together and multiplied by 87, that's 1064.
|
||||
|
||||
The next sprite is a walking-north action for an ultramarine with a flamer. The
|
||||
total number of frames for this character is 1120 - 56 additional frames, or 7
|
||||
per orientation. Could be an extra action, or an extra frame per action.
|
||||
|
||||
Also notable is that while the bolter showed muzzle flash in the animation, the
|
||||
flamer only showed a tiny hint of fire. I think the animation for spewing flame
|
||||
is held elsewhere.
|
||||
|
||||
I strongly suspect the actions and the number of frames in each action are
|
||||
configurable. So, what other files are implicated in its interpretation? Here's
|
||||
a few possibilities:
|
||||
|
||||
* `Data/AniObDef.dat`
|
||||
* `Data/Coordinates.dat`
|
||||
* `Data/HasAction.dat`
|
||||
* `Data/VehicDef.dat`
|
||||
* `Data/WeapDef.dat`
|
||||
- `Idx/WarHammer.idx`
|
||||
|
||||
Including comments, the former is 4098 lines, giving approx. 45 lines for each
|
||||
## `Data/AniObDef.dat`
|
||||
|
||||
Including comments, this is 4098 lines, giving approx. 45 lines for each
|
||||
of the ~188 characters in the `ani`. That doesn't seem many, and there's no
|
||||
obvious correspondence between the commented-on names (`SMOKE01`?) and the
|
||||
viewed frames... but then, I've not viewed all the frames.
|
||||
|
||||
Still, I think a focus in `WarHammer.idx` (1,880,078 bytes, binary, so around
|
||||
10KiB per character, in theory) is more reasonable.
|
||||
|
||||
## `Idx/WarHammer.idx`
|
||||
|
||||
`WarHammer.idx` (1,880,078 bytes, binary, so around 10KiB per character, in
|
||||
theory) is more reasonable.
|
||||
|
||||
Here's a list of operations on the file when `WH40K_TD.EXE` is instructed to
|
||||
place an Ultramarine squad:
|
||||
@@ -310,22 +363,15 @@ read(<WarHammer.ani>, "\xbe\xe5\xb6\x09\x0c\x0f\x00\x00", 8) = 8
|
||||
|
||||
</details>
|
||||
|
||||
Notable is that we still load 5 type 2 records, even though there's just a
|
||||
single librarian, and 8 compass points. Why 5?
|
||||
Notable is that we read from `idx` **before** we read from `ani` - so it does
|
||||
seem like the former should tell us where to pull from the latter.
|
||||
|
||||
Also notable is that we read from `idx` **before** we read from `ani`.
|
||||
We still load 5 type 2 records, even though there's just a single librarian, and
|
||||
8 compass points. Why 5? After looking in `idx`, we load 10 sprites from `ani`,
|
||||
which is at least a multiple. Do any of the records we load from `idx` specify
|
||||
sprite directory offsets that match?
|
||||
|
||||
Other data may be loaded at program start, of course. What other files seem
|
||||
relevant?
|
||||
|
||||
* `Data/AniObDef.dat`
|
||||
* `Data/HasAction.dat`
|
||||
* `Data/VehicDef.dat`
|
||||
* `Data/WeapDef.dat`
|
||||
|
||||
These all reference animations in one way or another.
|
||||
|
||||
## `HasAction.dat`
|
||||
## `Data/HasAction.dat`
|
||||
|
||||
This file seems relevant as it says whether or not particular animations exist
|
||||
for the different types of character, which maps directly to what is stored in
|
||||
|
Reference in New Issue
Block a user