...
The normal map bug you describe is them not loading correctly when first applying whilst in a game world. Restarting the client fixes this, still needs to be fully resolved.
The game uses the png files for diffuse, and tga files for normals, emissives and specular. emissive and specular share the alpha channel in the tga files. The game will only load png normal maps when no tga files are present. Currently these are outdated as the "fallback" should never actually occur without users actively deleting files.
The zip archives are to save space when downloading the game and extracted upon first use.
Not to be argumentative, but... I'm going to be argumentative :/
With a fresh stock install of the game... (took out my custom texture work just so no one can give me that annoying excuse) :
The normals bug does not go away when restarting the client. It's still there. Every time.
If I'm really lucky, the overlays.png file textures such as the resource/minerals appear over the top of t000.png textures, such as standard armors, and emissives are all shifted / offset in the wrong places.
If I'm not really lucky, the game just flat out crashes and reports a Resource Exception in /textures/block/
Upon close inspection, the _NRM.png files do not match the _NRM.tga files. Many tiles are old versions or totally mismatched, such as scaffolding.
There is no alpha layer in _NRM.png files.
If the _NRM.png files are deleted, the game won't load. If the .tga files are deleted, the game still doesn't load. It's obviously checking for both of them, so I don't see how 1 can be a fallback, or not necessary.
If normal maps are turned off, there is no emissive, but there IS still specular highlights / reflections from the sunshine. You've said this is stored with emissive data in the _NRM.tga alpha layer. Why is the game reading the _NRM files if normal maps are turned off?
Other game devs have successfully used multiple named layers to store data in their texture files, rather than trying to have the alpha channel pull double-duty. What's the dev team's logic here?