arm-weap.dat originates from the packed volume directory GAM\arm-weap.dat.
Bytes 0-1 is _WORD containing the number of weapons.
Each weapon entry consists of 2 bytes which are some kind of index... sub_43FD87 processes the given index and returns the index from some kind of LUT, hardcoded in DATA segment at word_476A4C (maximum 27 weapons supported in arraysize, arm-weap.dat supplies 26). Then follow 4 bytes x and 4 bytes y base position, and two bytes somehow relating to arm_weap.dba and the positioning.
See init_screen_GUI_armory for details