Characters and creatures
MAU
MAU frames, parts, ammo and keys
Overview
A MAU is the Bellato combat machine. A composite entity: a frame (one of 4 rows of UnitFrame.dat: Goliath, Catapult, Engineer, Nomad), 6 parts (a row from each of UnitHead, UnitUpper, UnitLower, UnitArms, UnitShoulder, UnitBack), ammo (UnitBullet.dat) and a key — a UnitKeyItem item (table 19) in the inventory, linked to the frame by m_nFRAType. The client Item.edf records (groups 0x13, 0x25–0x2B) are derived.
How it works
- A character has 4 MAU slots; the slot state (frame, parts, HP, magazines) is stored on the character, not in the key. Purchase (23/1) fills the slot with the frame and the default parts
m_strDF*(by code) and puts the key into the inventory; a MAU is sold without ammo. - Prices are computed from
m_nStdPricewith the race tax; the frame currencym_nMoneyis only 0 (dalant) or 1 (gold): with other values the client shows a price while the server deducts nothing. - Tuning (23/5) checks the part's compatibility with the frame (
m_strDefFrameis a string of'0'/'1', the first 4 characters matter), level and mastery (m_nExpertID* ≤ 5); repair (23/7) goes bym_nRepPriceand lost HP; on Sirin repair and attack are rewritten in Lua without tax. - MAU speed is set only by the client
Item.edf(frame+0x9C, parts+0xA0, backpack booster): the server'sm_fMoveRate_Seed,m_fMoveSpdRev,m_fBstSpddo not affect speed. - Part resistances replace the pilot's armour; the ammo's
m_strEffectIndexenables the special shoulder attack. - The server does not read and does not pass to the client
m_fAttGap,m_nProperty,m_bAbr,m_nDurUnitof parts; the effectsm_nEff1…4are not applied by the server; the namesm_strNamein.datare unused — only*_str.dat.
What matters when editing
- Exactly one key per frame;
m_strDF*is an existing code or-1; arm and shoulder weapons need ammo of the samem_nWPType. m_fHeight,m_fWidth,m_nLevelLim, mastery andm_fBstSpdgo to the client as a byte (≤ 255, the fraction is lost), resistances as i16.m_bDestroy = 1orm_bRepair = 0make MAU destruction final;m_nLevelLim = 100— nobody can install the part.
Server reads — mau.md §2.1–2.5 (wflow.py retargeted to MAU tables 41–48, and a search by the m_tblUnit* addresses); client records Item.edf 0x13, 0x25–0x2B belong to the “items” domain.
Files of the category
8 in the registry| File | Side | Format | Level | Corpora | Record | Digest | Note |
|---|---|---|---|---|---|---|---|
script\UnitArms.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 516, GU 516, Sirin 516 | mau.md | mau.md §2 |
script\UnitBack.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 516, GU 516, Sirin 516 | mau.md | mau.md §2 |
script\UnitBullet.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 356, GU 356, Sirin 356 | mau.md | mau.md §2 |
script\UnitFrame.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 648, GU 648, Sirin 648 | mau.md | mau.md §2 |
script\UnitHead.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 516, GU 516, Sirin 516 | mau.md | mau.md §2 |
script\UnitLower.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 516, GU 516, Sirin 516 | mau.md | mau.md §2 |
script\UnitShoulder.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 516, GU 516, Sirin 516 | mau.md | mau.md §2 |
script\UnitUpper.dat | server | dat | ready for full | AoP ✓, GU ✓, Sirin ✓ | AoP 516, GU 516, Sirin 516 | mau.md | mau.md §2 |
“ready for full” — the format is understood and the fields are described; “derived” — the file is assembled from another; “opaque” — the format is not fully known; “postponed” and “out of scope” — the studio does not edit the file.
Sections of the category
The files of the category are split into groups; every group and subgroup has its own page with the fields of its files only.
Unused parameters
Fields that neither the server nor the client reads. For each: why it was decided so and where that was established. The editor keeps their bytes as they are.
UnitArms.dat, UnitBack.dat, UnitHead.dat … server file
| Offset | Field | Why unused | Data |
|---|---|---|---|
+0x138 | m_fAttGap | Never read: GetWeaponAdjust (14003A080) in a MAU finds the arms or shoulders record but returns the constant 1.0 (the same in Sirin Lua) [code]mau.md §2.2: digest — “ m_fAttGap | 0x138 | Never read: GetWeaponAdjust (14003A080) in a MAU finds the arms or shoulders record but returns the constant 1.0 (the same in Sirin Lua) [code]”; does not go to the client file (MAU parts in Item.edf (0x25–0x2A) are mapped, mau.md §3) | always 0 |
+0x168 | m_nProperty | Never read: a MAU attack has no element ( nTol = −1 in 14005C1E0, the same in Sirin) [code]mau.md §2.2: digest — “ m_nProperty | 0x168 | Never read: a MAU attack has no element (nTol = −1 in 14005C1E0, the same in Sirin) [code]”; does not go to the client file (MAU parts in Item.edf (0x25–0x2A) are mapped, mau.md §3) | always -1 |
+0x19C | m_nEff1Code | part effect N: the server does not read it (mau.md §2.5); the AoP client does not read the +0xB2…+0xC7 block of MAU parts (items.md §17.6); 0 everywhere in AoPmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1A0 | m_fEff1Unit | effect N amount: see m_nEff*Code — read by neither the server nor the clientmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1A4 | m_nEff2Code | part effect N: the server does not read it (mau.md §2.5); the AoP client does not read the +0xB2…+0xC7 block of MAU parts (items.md §17.6); 0 everywhere in AoPmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1A8 | m_fEff2Unit | effect N amount: see m_nEff*Code — read by neither the server nor the clientmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1AC | m_nEff3Code | part effect N: the server does not read it (mau.md §2.5); the AoP client does not read the +0xB2…+0xC7 block of MAU parts (items.md §17.6); 0 everywhere in AoPmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1B0 | m_fEff3Unit | effect N amount: see m_nEff*Code — read by neither the server nor the clientmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1B4 | m_nEff4Code | part effect N: the server does not read it (mau.md §2.5); the AoP client does not read the +0xB2…+0xC7 block of MAU parts (items.md §17.6); 0 everywhere in AoPmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |
+0x1B8 | m_fEff4Unit | effect N amount: see m_nEff*Code — read by neither the server nor the clientmau.md §2.5, §3.1; items.md §17.6 ( clientflow.py: reads of +0xB2…+0xC4 exist only in branches of other groups) | always 0 |