I present to the Fallout New Vegas community version 1.0 of libnvs, a library for reading and writing ESP and ESM files from Fallout New Vegas. (support for save files is next on the todo list)
It can be downloaded from https://mega.co.nz/#!rwERkKhb!q6D8kcCaO73xHHgw9ciBErRU5XrOrwQ6V5yvNprmBKY
It has been tested (and shown to work) on all the esm files included with the "Fallout New Vegas Ultimate Edition" on Steam (falloutnv.esm and all the DLC), the esm and esp files included with "tale of two wastelands" and the Fallout 3 esm files created by the "tale of two wastelands" installer and will read-in and save those files correctly (i.e. identical output)
It is significantly more comprehensive and accurate than the info at https://github.com/WrinklyNinja/fopdoc/tree/master/FalloutNV/Recordsor the fnvedit source code or the Wyre Flash source code and contains a whole bunch of reverse engineered data that is not reverse engineered (or is labeled "unknown") in those other information sources.
Work involved hours of deep level reverse engineering of the Fallout New Vegas GECK and writing hundreds of lines of code. Being able to re-use large chunks of the code I wrote for Fallout 3 helped a lot here (whoever said the engines are very similar was not wrong
It is intended to be something people who want to manipulate Fallout New Vegas data files can use as a base and also something to completly document the format of the Fallout New Vegas data files.
The following pieces of data are currently unknown or have yet to be figured out: (although they ARE correctly read and parsed and written out again)
the INAM subrecord in the WTHR record.
a few unknown fields in the DNAM subrecord in the WEAP record.
a few unknown fields in the DATA subrecord in the WATR record.
one unknown field in the DATA subrecord of the RGDL record.
the FGGS, FGGA, FGTS, and SNAM subrecords in the RACE record.
one unknown field in the PTDT and PTD2 subrecords in the PACK record.
one unknown field in the PKW3 subrecord in the PACK record.
2 unknown fields in the PKDD subrecord in the PACK record.
the FGGS, FGGA, FGTS, and SNAM subrecords in the NPC_ record.
the NAM0, NAM1, NAM2, NAM3, NAM4, NAM5, NAM6, NAM7, NAM8 and NAM9 subrecords from the MESG record.
the NAM2, NAM3 and FNAM subrecords in the ALOC record.
a few unknown fields in the DATA subrecord of the LSCT record.
a few fields in the DNAM subrecord in the IMGS record.
certain data in the texture hash information associated with the model data.
one unknown field in the SLSD subrecord of various records that contain scripts.
one unknown field in the SCHR subrecord of various records that contain scripts.
one unknown field in the XNDP subrecord of CELL/REFR/ACHR/ACRE/PMIS/PGRE/PBEA/PFLA/PCBE records.
2 unknown fields in the XLOC subrecord of CELL/REFR/ACHR/ACRE/PMIS/PGRE/PBEA/PFLA/PCBE records.
the XLOD, XCET and XCMT subrecords of CELL/REFR/ACHR/ACRE/PMIS/PGRE/PBEA/PFLA/PCBE records.
the TCFU subrecord of INFO records.
the TDUM subrecord of DIAL records.
one unknown field in the TRDT subrecord of DIAL records.
one unknown field in the DNAM subrecord of ADDN records.
Please let me know what you think of my code and let me know if I should continue working on it (i.e. save file support etc). Any questions about the functioning of the code, how it works etc, post them here and I will do my best to explain things.