Pointers store the (starting) address of a variable or file. A file name or variable name is just
the for-humans-readable symbolic form of this address.
Example about pointers:
E.g. in skin set 2 the upper right wing texture is expected to be named e.g. 1234.dds.
What we do to change the skin in game, is overwrite 1234.dds; because the game expects the upper right wing texture to be named that way,
the pointer to (= file name of) the texture is fixed apparently.
Instead, we could change the pointer to the texture and say that the upper right wing texture to be used is now to be found at a different address,
in e.g. newupperrightwing.dds instead of 1234.dds.
No need to overwrite an existing file, just link the “right wing” in the skin set to a different texture.
The texture is found in two steps: the game goes to look for the right wing texture, it finds reads the pointer to it(which you can adapt)
to the location of the texture, it follows that pointer and uses the texture at that location were it was pointed to.
This does not change anything for the game itself, it just needs to look at the location where you said that the right wing is, newupperrightwing.dds.
Then you could have e.g. newupperrightwing.dds, newupperrightwing_v2.dds, newupperrightwing_v3.dds and so on,
and just switch to a new right wing by changing the file name the game needs to look for.
Long story short, you then only have to change the pointer to the texture, not the texture itself.
Then you could e.g. delete all but one F16C skin sets, and make all F-16C’s look the same,
or store hundreds of skin sets and change to a different skin set at will or even combine parts of different skin sets together.
But now, it seems to appear as if the file names for the textures are be “hard coded”
(=litteraly using “1234.dds” in the code instead of a variable named e.g. “right_wing_file” which contains the
filename of the file that contains the right wing texture and is adjustable by the user, “right_wing_file” is the adjustable pointer, “1234.dds” is the fixed pointer),
meaning the game will e.g. always look for e.g. “1234.dds” to find the right wing,
so we are left with no other option than to overwrite this dds, and then shared dds-files limit the flexibility.
This could be annoying and maybe the code was just not made with this in mind, but I don’t mean to whine about this, BMS is awesome.