This is for custom materials (not textures - not the same thing) and it's a rather important step if we ever want to have completely custom models and such.
Materials are basically what determines what a surface looks like. It does determine which textures get used on the model, but there's almost always more than one texture, and there's sometimes no textures at all, so that certainly isn't the only thing it does. In Metroid Prime they determine how a bunch of different color sources are mixed together to give a surface its ingame appearance, as well as things like how the surface is lit, whether Samus's reflection shows up on it, how texture coordinates are generated, how texture coordinates are animated (which is used for scrolling textures, reflections and specularity that move with the camera, etc), among other things.
I'm just assuming the reason is because "k" is more distinguishable when abbreviated. Konst colors are abbreviated in GX function names like "GXSetTevKColor" for instance. Makes it obvious what it's referring to. In Retro's case, "C" is already used as the class prefix, so it makes sense to distinguish const values with k instead of c. (Although that didn't stop them with "s", which is used for both structs and for static variables.)
I thought they did it like khronos and opengl, ALL CAPS RAGE!! But seriously, writing your own keywords with all-caps and/or an aberration (think GL_INT, GL_FLOAT... possibly just "CONST" or "NT_CONST"). That's a nice way to do it, makes actual programming easier (at least for me).
ALL_CAPS is typically reserved for macros. Also, even if Nintendo wanted to write their SDK that way it would be lame of them to force every developer to write their code that way as well. It's just infinitely simpler to use something that's more distinguishable and doesn't clash with any keywords.
Admittedly, every programmer's naming conventions will vary in some way.. Substituting 'K' for 'C' in identifiers isn't exclusive to Nintendo either.. Python's core library sometimes uses 'klass' to identify a local-variable containing a class-reference (again, 'class' being a reserved keyword)
Jack and I spent the better part of 2 hours investigating the AROT section of MREA and we think we've got the structure pretty well figured out, still need to figure out the bitmasks though.
Took a look at MP2's ANCS files, and it turns out that they changed a few things, however even though ANCS doesn't technically have a version (just to shorts at the beginning) we're able to tell which version we need to load. Which makes things a little less painful.
What we can check is actually part of the CharacterNode, the value after the node ID is a value which determines which particle lists are available, but we can also re-purpose that to detect MP2, in MP1 it's either 5 or 6, in MP2 it's always 10, and since it's reliable (so reliable I set an assert, something which you normally only do when you KNOW something shouldn't happen) we're able to use that as our "Version" field.
Sorry if I'm interrupting, but is there any chance that you guys have looked into whether or not it's possible to change what weapons/upgrades/health the player(s) has at the beginning of these games?
Yeah, that stuff is handled by spawn point objects. You can change the properties on the Landing Site spawn to set Samus's inventory to whatever you want.