I found out a bit more about hardcoded weapon colors. Some weapons derive all their color from their textures (example the photon torpedo). In SFC3 the phasers and some other weapons and effects are colored by a set of RGB values, some of these are listed in sub_41C726. Basically you'll see (in pseudocode mode) stuf like "sub_41CFAA((int)&v22, COERCE_INT(0.93000001), COERCE_INT(0.75999999), COERCE_INT(0.1));" (the numbers are rounded 32bit floats, for example 0.1 is coded as CD CC CC 3D at 00(4)1C8E2). So what color does this result in? Let's see: 0.93000001 * 256, 0.75999999 * 256, 0.1 * 256 gives us approximately Red: 238, Green: 195, Blue: 26, this is a shade of dark orange, exactly like we expect of SFC3 phasers.
For SFC:OP the equivalent of sub_41C726 is sub_41C271. In it I found (in pseudocode mode) "sub_41C983(LODWORD(v29), LODWORD(v33), LODWORD(v34));" with the values of the variables listed next to it: "v34 = 1.0; v33 = 0.5; v29=v27 = 0.5;", so this would be Red: 128, Green: 128, Blue: 256 which is a shade of light blue. I have no working copy of SFC:OP test if this codes weapon colors (it seems to be connected to the function chain of the "heavy phaser" object), but I'm pretty sure it does.