I had to change line 526 in r_material.c to start with frame 0 instead of starting the for-loop with frame 1 [for (i = 0; i < s->anim.num_frames; i++) {] otherwise the orginal texture would blink each time the loop repeats.
static int R_LoadAnimImages (materialStage_t *s)
{
char name[MAX_QPATH];
int i, j;
if (!s->image) {
Com_Printf("R_LoadAnimImages: Texture not defined in anim stage.\n");
return -1;
}
Q_strncpyz(name, s->image->name, sizeof(name));
j = strlen(name);
if (name[j - 1] != '0') {
Com_Printf("R_LoadAnimImages: Texture name does not end in 0: %s\n", name);
return -1;
}
/* the first image was already loaded by the stage parse, so just copy
* the pointer into the images array */
s->anim.images[0] = s->image;
name[j - 1] = 0;
/* now load the rest - HERE THE CHANGE HAPPENED: */
for (i = 0; i < s->anim.num_frames; i++) {
const char *c = va("%s%d", name, i);
image_t *image = R_FindImage(c, it_material);
s->anim.images[i] = image;
if (image == r_noTexture) {
Com_Printf("R_LoadAnimImages: Failed to resolve texture: %s\n", c);
return -1;
}
if (s->flags & STAGE_GLOWMAPLINK) {
if (image->glowmap)
Com_Printf("R_LoadAnimImages: overriding already existing glowmap for %s\n", image->name);
image->glowmap = image;
}
}
return 0;
}
In the material file the glowmaplink has to be first, then the original texture has to be blended over once again:
/* ufo2_10: K.I.T.T. (Best to be synchronized with ufo2_09) */
{
material tex_ufo/ufo2_10
bump 1.5
hardness 0.2
parallax 1.0
specular 1.5
/* fx Animation (green/yellow) */
{
glowmaplink
texture pt/fx/fx2_10_1a0
anim 14 19.0
blend GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
}
{
texture tex_ufo/ufo2_10
blend GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA
lightmap
}
}
Unfortunately I still have problems to get more than one glowmaplink animation per texture to work...