Yep, I get the feeling it's like that everywhere. In every job i've been in (curiously not game-related... but hey that's a good thing, it means my hobbies are different enough from my day job that it doesn't feel like "work"
) things follow more or less the same pattern: everything is dynamic and configurable via script / DB config... until unrealistic deadlines are imposed, people start coming in during the weekends in order to meet them, and ultimately end up rushing and cutting corners just to get it over with.
(then you pay it in full later, when you have to revisit some of the hacks that were put together under pressure, in order to give the product the customization capabilities, and even the robustness, that it should have had in the first place...)
Anyway, managed to dig a bit more into the SO2 EXE
(warning: relatively long post ahead)
It seems the game internally treats the fake-3D models as 62-angle objects, but then according to object type / number maps these images into a smaller subset. Translating a few EXE bytes into more friendly objects with a quick script, you can sum it to the following cases:
- X-axis symmetric objects. This covers the vast majority of the objects in WC2. Basically the game reuses the same images in reverse order for a given rotation set, and maps the 62 angles into 37 images:
Code:
ship =
{
bottom = 0
angles =
1 2 3 4 5 6 7 6 5 4 3 2
14 13 12 11 10 9 8 9 10 11 12 13
15 16 17 18 19 20 21 20 19 18 17 16
28 27 26 25 24 23 22 23 24 25 26 27
29 30 31 32 33 34 35 34 33 32 31 30
top = 36
}
- X/Y-axis symmetric objects. These were puzzling at first, since i couldn't think of any ship that had this kind of symmetry. But, sure enough, there are objects that are symmetic on both X and Y axes: missiles! Here the game maps the 62 angles into 22 images:
Code:
ship =
{
bottom = 0
angles =
1 2 3 4 5 6 7 6 5 4 3 2
14 13 12 11 10 9 8 9 10 11 12 13
15 16 17 18 19 20 21 20 19 18 17 16
14 13 12 11 10 9 8 9 10 11 12 13
1 2 3 4 5 6 7 6 5 4 3 2
top = 0
}
Great, makes sense!
- Then come the space stations, which use alternate 3 images for each rotation set. This option maps the 62 angles into 17 images:
Code:
ship =
{
bottom = 0
angles =
1 2 3 1 3 2 1 2 3 1 3 2
4 5 6 4 6 5 4 5 6 4 6 5
7 8 9 7 9 8 7 8 9 7 9 8
10 11 12 10 12 11 10 11 12 10 12 11
13 14 15 13 15 14 13 14 15 13 15 14
top = 16
}
- Then comes Ayer's Rock, which maps 1-to-1 each of the 62 angles, just shuffling them around a bit:
Code:
ship =
{
bottom = 0
angles =
12 11 10 9 8 7 6 5 4 3 2 1
24 23 22 21 20 19 18 17 16 15 14 13
36 35 34 33 32 31 30 29 28 27 26 25
48 47 46 45 44 43 42 41 40 39 38 37
60 59 58 57 56 55 54 53 52 51 50 49
top = 61
}
Of course, these days the latter option is the only one that really would make any sense... but back in 1993, where each floppy is 1.44Mb and you don't want to spend 250kb per ship file, you would definitely want to explore symmetry in order to remove redundant information.
Anyway, very interesting stuff!
With this information i'll be able to start improving my script in order to support asymmetric ships