Also, the unknown byte record in WEAP/DATA, right after "weight" is weapon damage.
Thanks, I've updated my record definition for the next release. Please let me know if there are any other "Unknowns" that you know what they mean.
A Base Damage of 10 for the Fatman looks a bit strange though. But I guess that's the damage from being hit on the head by the thing and the explosion damage comes extra through the WEAP -> PROJ -> EXPL linking.
Which reminds me, is there a way to utilize an xml based record description list?
Not at the moment. The record definitions are in source and look like this:
wbRecord(WEAP, 'Weapon', [ wbEDID, wbOBND, wbFULL, wbMODL, wbUnknown(MODD), wbICON, wbSCRI, wbDEST, wbEITM, wbInteger(EAMT, 'Enchantment Charge Amount', itS16), wbFormIDCk(NAM0, 'Ammo', [AMMO, FLST]), wbREPL, wbETYP, wbBIPL, wbYNAM, wbZNAM, wbRStruct('Unknown', [ wbString(MOD2, 'Model Filename'), wbByteArray(MO2T, 'Unknown', 0, cpBenign) ], []), wbRStruct('Unknown', [ wbString(MOD3, 'Model Filename'), wbByteArray(MO3T, 'Unknown', 0, cpBenign) ], []), wbRStruct('Unknown', [ wbString(MOD4, 'Model Filename') ], []), wbString(NNAM, 'Projectile Node'), wbFormIDCk(INAM, 'Impact DataSet', [IPDS]), wbFormIDCk(WNAM, 'World Static', [STAT]), wbFormIDCk(SNAM, 'Sound - Gun - Shoot 3D', [SOUN]), wbFormIDCk(XNAM, 'Sound - Gun - Shoot 2D', [SOUN]), wbFormIDCk(NAM7, 'Sound - Gun - Shoot 3D Looping', [SOUN]), wbFormIDCk(TNAM, 'Sound - Melee - Swing / Gun - No Ammo', [SOUN]), wbFormIDCk(NAM6, 'Sound - Block', [SOUN]), wbFormIDCk(UNAM, 'Sound - Idle', [SOUN]), wbFormIDCk(NAM9, 'Sound - Equip', [SOUN]), wbFormIDCk(NAM8, 'Sound - Unequip', [SOUN]), wbStruct(DATA, 'Weapon Data', [ wbInteger('Value', itS32), wbInteger('Max Condition', itS32), wbFloat('Weight'), wbInteger('Base Damage', itS16),// wbByteArray('Unknown', 2), wbInteger('Clip Size', itU8) ]), wbStruct(DNAM, 'Damage Data', [ {00} wbInteger('Weapon Type', itU32, wbEnum([ {00} 'Melee - Fist', {01} 'Melee - Sharp', {02} 'Melee - Blunt', {03} '', {04} 'Ranged - Pistols', {05} 'Ranged - Shotguns', {06} 'Ranged - Rifles', {07} 'Ranged - Laser Rifles', {08} 'Ranged - Big Guns', {09} 'Creature', {10} 'Grenade', {11} 'Mine', {12} 'Improvised Mine' ])), {04} wbFloat('Animation Timescale'), {08} wbFloat('Unknown (Animation related?)'), {12} wbByteArray('Unknown', 4), {16} wbFloat('Minimum Spread'), {20} wbFloat('Maximum Spread'), {24} wbFloat('Unknown'), {28} wbFloat('Zoom FOV'), {32} wbByteArray('Unknown', 4), {36} wbFormIDCk('Projectile', [PROJ, NULL]), {40} wbByteArray('Unknown', 4), {44} wbFloat('Projectile Velocity'), {48} wbFloat('Max Range'), {52} wbByteArray('Unknown', 8), {60} wbFloat('Reload Time'), {64} wbFloat('Ammo per Shot'), {68} wbFloat('AP per Shot'), {72} wbFloat('1st Trigger Delay'), {76} wbFloat('2nd Trigger Delay'), {80} wbFloat('Rapid Fire Timing ??'), {84} wbFloat('Unknown'), {88} wbFloat('Critical Death Effect Chance ??'), {92} wbByteArray('Unknown', 4), {96} wbFloat('Damage vs. Defense Modifier ??'), {100} wbByteArray('Unknown', 4), {104} wbInteger('Weapon Skill Type', itS32, wbActorValueEnum), {108} wbByteArray('Unknown', 4), {112} wbFloat('Unknown'), {116} wbFloat('Unknown'), {120} wbInteger('Resist Type', itS32, wbActorValueEnum), {124} wbFloat('Burst Mode Fire Rate ??'), {128} wbFloat('Unknown'), {132} wbFloat('Unknown') ]), wbStruct(CRDT, 'Critical Data', [ {00} wbInteger('Damage Bonus ??', itS16), {09} wbByteArray('Unused', 2), {04} wbFloat('Chance ??'), {08} wbByteArray('Unknown', 1), {09} wbByteArray('Unused', 3), {12} wbFormIDCk('Spell', [SPEL, NULL]) ]), wbUnknown(VNAM) ]);
While I guess i would be possible for me to write code to serialize these object trees that I'm building in code to/from XML, that would take quite a bit of work and it would only be relevant until all fields have been identified. So I'm a bit doubtful about the cost/benefit ratio here.