Fusion modding · UNITS / AVIA / LAND/DOM
FrançaisBuilding resources
Building graphics are stored in dom.res, sometimes named DOM.RES. The container has an offset table followed by records. The tables use little-endian 32-bit integers.
Indices and empty slots
The current parser combines the two offset table sections. Record index N corresponds to obj N in the settings. This inventory uses indices starting at zero. Older notes counted a header as a record and could report N + 1.
A slot is empty when its start and end offsets are equal. An empty slot keeps its index. An object without an explicit block can use default settings. These situations differ.
The DOM reader accepts indices 0 through 1019. Observed containers have tables with 1021 slots. This difference does not permit an object at index 1020.
Maps store type indices. Do not renumber an existing container to correct its settings. Some repacked environments changed indices. Their descdom blocks must match the container that is actually used.
A graphic record
| Item | Checked structure |
|---|---|
| Palette | 256 RGB565 colors. Color index 0 is transparent in the preview. |
| Numeric class | Integer at offset 514 from the record start. It selects the house or __testportal sheet. |
| Footprint | Grid of 14 × 14 quarters read by the engine. Quarters have a 16-pixel spacing. Bit 0x40 marks building occupation areas. |
| Attachment points | Entry count at offset 725, followed by 10-byte entries. Their complete meaning remains unknown. |
| Images | Four damage states with four images each: A1, A1, A2, A3 in the checked records. |
The two A1 images compose the building. A2 is a shadow or ground layer. A3 is a secondary layer. Each image keeps its size and offset. A change to an offset can change drawing alignment.
The Fusion preview reader decodes A1 pixels and composes only state 0. It does not fully render A2 or A3. A correct preview does not validate the complete resource, movement, or firing points.
Local sources: tools/ssfusion/resfile.py, tools/ssfusion/sprite.py, src/game/land/land_dom.cpp, and src/game/land/structure_setup.cpp. Engine paths refer to HS2Engine. Tool paths refer to Fusion.
Environments and realignment
Fusion tools compare record hashes, then sprite silhouettes. These checks help identify a moved object. A silhouette alone does not prove equal metadata or behavior.
Documented cases include repacked containers for Falaises, Été, France, and Europe. winter_xmas keeps winter indices and adds objects. Different game and editor archive chains can still give different settings.
A correction must use the block for the resource indices. Record the container, settings archive, and loaded scheme. The associations below are only candidates from directory names.
New graphics
The inspected tools read containers, create previews, and repair text settings. They do not provide a verified procedure to write all building layers and package the APS archive.
A complete creation procedure still needs these checks:
- Write the palette and four image groups.
- Write movement metadata and attachment points.
- Use a valid slot without moving existing indices.
- Match the theme’s
objlines. - Package the APS archive with an identified tool.
- Test placement, damage, and saving in Fusion and Mapeditor.
The configuration guide provides a settings change for existing resources. A copy of a UNITS sheet does not perform these operations.
Resource inventory
The check reads the index tables, headers, and pixel row boundaries. It does not decode all pixels or test the game. Directory names do not prove which archives are loaded.
| Resource | Present objects | Structure checked |
|---|---|---|
asien/dom.res | 81 | 81 |
desert2/dom.res | 228 | 228 |
desert3/dom.res | 228 | 228 |
ete/DOM.RES | 352 | 352 |
europe/DOM.RES | 373 | 373 |
europe2/dom.res | 507 | 507 |
falaises/dom.res | 351 | 351 |
france/dom.res | 364 | 364 |
land/dom.res | 349 | 349 |
sommer/dom.res | 227 | 227 |
sommer_s1/dom.res | 114 | 114 |
stadt/dom.res | 515 | 515 |
sud/dom.res | 181 | 178 |
urbain/DOM.RES | 352 | 352 |
winter/dom.res | 86 | 86 |
winter_xmas/dom.res | 96 | 96 |
wuste/dom.res | 136 | 136 |
wuste_s1/dom.res | 67 | 66 |
asien · 81 objects
asien/dom.res
SHA-256: d83ac54bb704f0a73b5b0eea61c467c2cf964342cff78bffd590153c52da42e0
1021 container slots, including 940 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: asien_unit/land/descdom
Observed numeric classes (class: object count): 0: 27 2: 13 3: 4 4: 28 5: 7 6: 1 7: 1
desert2 · 228 objects
desert2/dom.res
SHA-256: 049aeeb9eb733e70b5cc868ed6b5b1585d10396060e27892a286ff8f57c0bd52
1021 container slots, including 793 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Observed numeric classes (class: object count): 0: 48 1: 4 2: 75 3: 8 4: 73 5: 20
desert3 · 228 objects
desert3/dom.res
SHA-256: 049aeeb9eb733e70b5cc868ed6b5b1585d10396060e27892a286ff8f57c0bd52
1021 container slots, including 793 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Observed numeric classes (class: object count): 0: 48 1: 4 2: 75 3: 8 4: 73 5: 20
ete · 352 objects
ete/DOM.RES
SHA-256: 1be64e960de04c891775028ce305dad87ca52f220e41c6253121ca443e7a8ddb
1021 container slots, including 669 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: ete_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 60 1: 92 11: 4 2: 55 3: 28 4: 68 5: 23 6: 22
europe · 373 objects
europe/DOM.RES
SHA-256: d59a7eab81f14cff34cf632e9722a0b5711236264726b4237b7a63ce75fdcb6e
1021 container slots, including 648 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: europe_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 63 1: 92 11: 4 2: 58 3: 28 4: 82 5: 24 6: 22
europe2 · 507 objects
europe2/dom.res
SHA-256: 45e1802a2deff0c0cf73cacf786b2dbc1f6315391213dde4fa064bd415318d37
1021 container slots, including 514 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: europe2_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 98 1: 119 11: 6 2: 61 3: 28 4: 110 5: 27 6: 22 7: 32 8: 4
falaises · 351 objects
falaises/dom.res
SHA-256: 30287860098e83b27f17565fe729ef1794d73f31432134fe4e2dc96dce07cf34
1021 container slots, including 670 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: falaises_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 55 1: 92 11: 4 2: 55 3: 28 4: 72 5: 23 6: 22
france · 364 objects
france/dom.res
SHA-256: 19b97de90390aace3a06eab40a543968f49d0becfbc108dac405788947e99ef4
1021 container slots, including 657 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: france_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 63 1: 92 11: 4 2: 58 3: 28 4: 74 5: 23 6: 22
land · 349 objects
land/dom.res
SHA-256: dc9ccd18911c5b1959b0beb72bf20a9e4b2880f864ab75adc27965ae5d053b15
1021 container slots, including 672 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: land_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 68 1: 95 2: 77 3: 10 4: 77 5: 19 6: 1 7: 1 8: 1
sommer · 227 objects
sommer/dom.res
SHA-256: 2943cf5e649bcd90c0f12be763311134f989d123c51553a61c646d78831e0209
1021 container slots, including 794 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: sommer_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 58 1: 57 11: 4 2: 34 3: 15 4: 43 5: 12 6: 4
sommer_s1 · 114 objects
sommer_s1/dom.res
SHA-256: 7632c2588c6586ce52011a1e2730f7ad17cdac4a9f4e100ae492239a673ec417
1021 container slots, including 907 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Observed numeric classes (class: object count): 0: 20 1: 33 2: 20 4: 20 5: 21
stadt · 515 objects
stadt/dom.res
SHA-256: 37fd99cba7a5c95937377ece0b4ec269a5cbd4538688ad931457c15363034b0c
1021 container slots, including 506 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: stadt_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 34 1: 96 2: 93 3: 15 4: 60 5: 18 6: 93 7: 93 8: 13
sud · 181 objects
sud/dom.res
SHA-256: b07c1455ca240c6dc1010ec066ce673224a78138fd543be4cb925da34f33864b
1021 container slots, including 840 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: sud_unit/LAND/descdom
Index 222: invalid frame size
Index 223: invalid frame size
Index 249: invalid frame size
Observed numeric classes (class: object count): -1850559556: 1 0: 48 1: 33 2: 29 4: 35 5: 35
urbain · 352 objects
urbain/DOM.RES
SHA-256: 1be64e960de04c891775028ce305dad87ca52f220e41c6253121ca443e7a8ddb
1021 container slots, including 669 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Observed numeric classes (class: object count): 0: 60 1: 92 11: 4 2: 55 3: 28 4: 68 5: 23 6: 22
winter · 86 objects
winter/dom.res
SHA-256: 9bab0dade86758be0da2028c784d09c27b0abf1155e3b622aa7029c2698c6f5e
1021 container slots, including 935 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: winter_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 14 1: 20 2: 1 3: 12 4: 4 5: 33 6: 1 7: 1
winter_xmas · 96 objects
winter_xmas/dom.res
SHA-256: e89f06d21e29c5ae8e6a09cd044ed6831f8ce2c497bc047631f40de666105508
1021 container slots, including 925 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: winter_xmas/LAND/descdom
Observed numeric classes (class: object count): 0: 14 1: 20 11: 1 2: 5 3: 12 4: 9 5: 33 6: 1 7: 1
wuste · 136 objects
wuste/dom.res
SHA-256: d542567f66f8524de0a846aa568fdd1636a8815ffa1a3ad733e61f9ee75b34c0
1021 container slots, including 885 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Candidate files from directory names. Their use in an installation is not verified: wuste_unit/LAND/descdom
Observed numeric classes (class: object count): 0: 49 1: 17 2: 17 3: 6 4: 29 5: 12 6: 3 7: 2 8: 1
wuste_s1 · 67 objects
wuste_s1/dom.res
SHA-256: 33e67e58944a19d6cfc4cd9ffef8bc4ed2b76105ef2a228d15ba72024bf8c36c
1021 container slots, including 954 empty slots. The DOM reader accepts indices 0 through 1019. The last table slot does not extend this limit.
Index 121: invalid frame size
Observed numeric classes (class: object count): 0: 29 2: 9 4: 15 5: 14