Hi guys,

I've been able to enhance the project a bit

- hierarchical structure is done up to models but not from models to data yet
- resolved all incoming calls to those data blocks -> I know what data belongs to what, or at least what comes right before them (maybe it'll be another DMDNode type or not, I dunno, I didn't do any hex hunting today !)
- started code reuse and upgraded a few things
- more logging
- and more stats!!!

Look at this !

**Code:**C:\Users\Aybe\source\repos\OpenTwisted\.twisted\TM1PSUSA\UADMD\CARS.DMD
6/7/2020 10:59:00 PM
Addresses:
45196
53752
62844
72156
80184
87936
96048
111288
121540
131156
140380
152072
152672
DMDNodeROOT, Children: 13, Position: 76
DMDNode0107XXXX, Children: 1, Position: 152672
DMDNode00FFXXXX, Children: 0, Position: 152100
DMDNode0107XXXX, Children: 1, Position: 152072
DMDNode040BXXXX, Children: 1, Position: 152048
DMDNode0107XXXX, Children: 4, Position: 152008
DMDNode0207XXXX, Children: 1, Position: 151984
DMDNode0107XXXX, Children: 2, Position: 151940
DMDNode00FFXXXX, Children: 0, Position: 150552
DMDNode00FFXXXX, Children: 0, Position: 150412
DMDNode0207XXXX, Children: 1, Position: 150388
DMDNode0107XXXX, Children: 1, Position: 150348
DMDNode00FFXXXX, Children: 0, Position: 150216
DMDNode0207XXXX, Children: 4, Position: 150180
DMDNode00FFXXXX, Children: 0, Position: 149696
DMDNode00FFXXXX, Children: 0, Position: 148860
DMDNode00FFXXXX, Children: 0, Position: 145692
DMDNode00FFXXXX, Children: 0, Position: 140864
DMDNode0207XXXX, Children: 1, Position: 140840
DMDNode00FFXXXX, Children: 0, Position: 140408
DMDNode0107XXXX, Children: 1, Position: 140380
DMDNode040BXXXX, Children: 1, Position: 140356
DMDNode0107XXXX, Children: 4, Position: 140316
DMDNode0207XXXX, Children: 1, Position: 140292
DMDNode0107XXXX, Children: 2, Position: 140248
DMDNode00FFXXXX, Children: 0, Position: 138860
DMDNode00FFXXXX, Children: 0, Position: 138720
DMDNode0207XXXX, Children: 1, Position: 138696
DMDNode0107XXXX, Children: 1, Position: 138656
DMDNode00FFXXXX, Children: 0, Position: 138524
DMDNode0207XXXX, Children: 4, Position: 138488
DMDNode00FFXXXX, Children: 0, Position: 138152
DMDNode00FFXXXX, Children: 0, Position: 137504
DMDNode00FFXXXX, Children: 0, Position: 135652
DMDNode00FFXXXX, Children: 0, Position: 131632
DMDNode0207XXXX, Children: 1, Position: 131608
DMDNode00FFXXXX, Children: 0, Position: 131184
DMDNode0107XXXX, Children: 1, Position: 131156
DMDNode040BXXXX, Children: 1, Position: 131132
DMDNode0107XXXX, Children: 3, Position: 131096
DMDNode0207XXXX, Children: 1, Position: 131072
DMDNode0107XXXX, Children: 2, Position: 131028
DMDNode00FFXXXX, Children: 0, Position: 129640
DMDNode00FFXXXX, Children: 0, Position: 129404
DMDNode0207XXXX, Children: 1, Position: 129380
DMDNode0107XXXX, Children: 1, Position: 129340
DMDNode00FFXXXX, Children: 0, Position: 129208
DMDNode0207XXXX, Children: 4, Position: 129172
DMDNode00FFXXXX, Children: 0, Position: 128920
DMDNode00FFXXXX, Children: 0, Position: 128344
DMDNode00FFXXXX, Children: 0, Position: 126484
DMDNode00FFXXXX, Children: 0, Position: 121568
DMDNode0107XXXX, Children: 1, Position: 121540
DMDNode040BXXXX, Children: 1, Position: 121516
DMDNode0107XXXX, Children: 4, Position: 121476
DMDNode0207XXXX, Children: 1, Position: 121452
DMDNode0107XXXX, Children: 2, Position: 121408
DMDNode00FFXXXX, Children: 0, Position: 120020
DMDNode00FFXXXX, Children: 0, Position: 119880
DMDNode0207XXXX, Children: 2, Position: 119852
DMDNode00FFXXXX, Children: 0, Position: 119256
DMDNode00FFXXXX, Children: 0, Position: 117608
DMDNode0207XXXX, Children: 1, Position: 117584
DMDNode0107XXXX, Children: 1, Position: 117544
DMDNode00FFXXXX, Children: 0, Position: 117208
DMDNode0207XXXX, Children: 5, Position: 117168
DMDNode00FFXXXX, Children: 0, Position: 116740
DMDNode00FFXXXX, Children: 0, Position: 116072
DMDNode00FFXXXX, Children: 0, Position: 115340
DMDNode00FFXXXX, Children: 0, Position: 114232
DMDNode00FFXXXX, Children: 0, Position: 111316
DMDNode0107XXXX, Children: 1, Position: 111288
DMDNode040BXXXX, Children: 1, Position: 111264
DMDNode0107XXXX, Children: 6, Position: 111216
DMDNode0207XXXX, Children: 1, Position: 111192
DMDNode0107XXXX, Children: 2, Position: 111148
DMDNode00FFXXXX, Children: 0, Position: 110432
DMDNode0107XXXX, Children: 0, Position: 110408
DMDNode0207XXXX, Children: 1, Position: 110384
DMDNode0107XXXX, Children: 1, Position: 110344
DMDNode00FFXXXX, Children: 0, Position: 110228
DMDNode0207XXXX, Children: 1, Position: 110204
DMDNode00FFXXXX, Children: 0, Position: 109604
DMDNode0207XXXX, Children: 1, Position: 109580
DMDNode00FFXXXX, Children: 0, Position: 108776
DMDNode0207XXXX, Children: 1, Position: 108752
DMDNode00FFXXXX, Children: 0, Position: 107068
DMDNode0207XXXX, Children: 2, Position: 107040
DMDNode00FFXXXX, Children: 0, Position: 103624
DMDNode00FFXXXX, Children: 0, Position: 96076
DMDNode0107XXXX, Children: 1, Position: 96048
DMDNode040BXXXX, Children: 1, Position: 96024
DMDNode0107XXXX, Children: 4, Position: 95984
DMDNode0207XXXX, Children: 1, Position: 95960
DMDNode0107XXXX, Children: 2, Position: 95916
DMDNode00FFXXXX, Children: 0, Position: 94528
DMDNode00FFXXXX, Children: 0, Position: 94388
DMDNode0207XXXX, Children: 1, Position: 94364
DMDNode0107XXXX, Children: 1, Position: 94324
DMDNode00FFXXXX, Children: 0, Position: 94192
DMDNode0207XXXX, Children: 4, Position: 94156
DMDNode00FFXXXX, Children: 0, Position: 93820
DMDNode00FFXXXX, Children: 0, Position: 93212
DMDNode00FFXXXX, Children: 0, Position: 91564
DMDNode00FFXXXX, Children: 0, Position: 88332
DMDNode0207XXXX, Children: 1, Position: 88308
DMDNode00FFXXXX, Children: 0, Position: 87964
DMDNode0107XXXX, Children: 1, Position: 87936
DMDNode040BXXXX, Children: 1, Position: 87912
DMDNode0107XXXX, Children: 5, Position: 87868
DMDNode0207XXXX, Children: 1, Position: 87844
DMDNode0107XXXX, Children: 2, Position: 87800
DMDNode00FFXXXX, Children: 0, Position: 86412
DMDNode00FFXXXX, Children: 0, Position: 86272
DMDNode0207XXXX, Children: 1, Position: 86248
DMDNode0107XXXX, Children: 1, Position: 86208
DMDNode00FFXXXX, Children: 0, Position: 86080
DMDNode0207XXXX, Children: 1, Position: 86056
DMDNode00FFXXXX, Children: 0, Position: 85544
DMDNode0207XXXX, Children: 1, Position: 85520
DMDNode00FFXXXX, Children: 0, Position: 84024
DMDNode0207XXXX, Children: 1, Position: 84000
DMDNode00FFXXXX, Children: 0, Position: 80212
DMDNode0107XXXX, Children: 1, Position: 80184
DMDNode040BXXXX, Children: 1, Position: 80160
DMDNode0107XXXX, Children: 5, Position: 80116
DMDNode0207XXXX, Children: 1, Position: 80092
DMDNode0107XXXX, Children: 2, Position: 80048
DMDNode00FFXXXX, Children: 0, Position: 78660
DMDNode00FFXXXX, Children: 0, Position: 78520
DMDNode0207XXXX, Children: 1, Position: 78496
DMDNode0107XXXX, Children: 1, Position: 78456
DMDNode00FFXXXX, Children: 0, Position: 78324
DMDNode0207XXXX, Children: 1, Position: 78300
DMDNode00FFXXXX, Children: 0, Position: 77468
DMDNode0207XXXX, Children: 1, Position: 77444
DMDNode00FFXXXX, Children: 0, Position: 75752
DMDNode0207XXXX, Children: 1, Position: 75728
DMDNode00FFXXXX, Children: 0, Position: 72184
....
Total nodes: 241
DMDNode00FFXXXX: 103
DMDNode0107XXXX: 62
DMDNode0207XXXX: 60
DMDNode040BXXXX: 13
DMDNode0903XXXX: 2
DMDNodeROOT: 1

**We can already draw many conclusions,**

040B blocks seem to define a model, we have 12 cars in DMD + probably 1 root, makes sense as it's hierarchical

0107 and 0207 these act as chain links, they're absolutely everywhere !!! i hate these little structs because they're hard to figure in general, maybe transforms ?

00FF we know these are models, and confirms my LOD thinking, many LODs for each model

XXXX basically means any two 16-bit numbers after the DMD node type -> unknown

So you see, 241 nodes only for 12 cars ... on levels it's like +6K nodes

I remember that on my old viewer I've lost it was very cryptic, some models were only the wheels but back then I didn't really understand where to pick the highest LOD model, it appeared to be randomly put.

Also, see on levels like below, there are dead ends for 0107 but also models nested within models !!! really crazy... This game is full of traps

And see some of the positions, some models are as low as 80 bytes, e.g. 1 polygon, 4 vertices, 1 normal -> a quad ...

**Code:** DMDNode040BXXXX, Children: 1, Position: 552540
DMDNode0903XXXX, Children: 7, Position: 552504
DMDNode0107XXXX, Children: 0, Position: 552480
DMDNode00FFXXXX, Children: 0, Position: 552400
DMDNode00FFXXXX, Children: 0, Position: 552320
DMDNode0107XXXX, Children: 1, Position: 552288
DMDNode00FFXXXX, Children: 0, Position: 552120
DMDNode0107XXXX, Children: 1, Position: 552088
DMDNode00FFXXXX, Children: 0, Position: 551920
DMDNode0107XXXX, Children: 1, Position: 551888
DMDNode00FFXXXX, Children: 0, Position: 551720

Last thing so you guys understand how I do that, basically I do live unit testing, which means that tests continuously run as I type so I can try things very easily and get instant results

If it works, it works, as it's tested instantly against all TM1 versions ... very very cool

cheers