Most dat fields are 8 or 16 bits. Weapon damage is u16, so the maximum is 65,535, and past that it wraps with no warning - you get a unit that gets weaker the more you upgrade it, which is about the hardest kind of bug to see.
| weapons.dat damage | u16, max 65,535. If your design multiplies by anything, compute the peak and clamp it yourself. |
|---|---|
| units.dat maxHp | Stores hit points x256, so the largest real body is about 16,777,215. |
| eudplib 변수 | An unsigned 32-bit value. Think about dividing before multiplying when the numbers get large. |
var dmg = (base + upg * step) * (100 + level * perk) / 100;
if (dmg > 65535) { dmg = 65535; } // 래핑보다 제한이 낫다 / clamping beats wrapping
Weapon(w).damage = dmg;It is also worth knowing how to check an offset is real. A dat file is per-field arrays laid end to end, so the sum of every field's (width x entry count) must equal the file size exactly. If it does not, you have the order or a width wrong - and writing with it will clobber a different field.
For example weapons.dat is 130 entries at 42 bytes each - 5,460 - and flingy.dat is 209 at 15, which is 3,135. When that sum lands exactly, it is fairly strong evidence you have the layout right.
