Whoops! Sorry about that. I assumed the texture would wrap the whole phaser not just the visible side - mainly because of the black borders on the texture. Also, it looks like i didn't take the v repeats into account on the offset

Here's a fix:

Replace code in method DrawPhase:
[pascal]
glTexCoord2f((i+1)/(fncount-1)*xrep, (yrep*1.5)-((fyrep*o)/fsides)-fofs*yrep);
glVertex3fv(@fverts[trenderItem(p),a]);
glTexCoord2f(i/(fncount-1)*xrep, (yrep*1.5)-((fyrep*o)/fsides)-fofs*yrep);
glVertex3fv(@fverts[trenderItem(p),b]);
[/pascal]

with this:
[pascal]
var
u,v: single; // add to method

// this line tries to keep visible textures centered around offset
if Odd(fyrep) then v:=0.5 else v:=0;

u:=(2*fyrep+v)-((2*fyrep*o)/fsides)-(fofs*2*fyrep);
glTexCoord2f((i+1)/(fncount-1)*xrep, u);
glVertex3fv(@fverts[trenderItem(p),a]);
glTexCoord2f(i/(fncount-1)*xrep, u);
glVertex3fv(@fverts[trenderItem(p),b]);
[/pascal]

haven't tested yet, but it looks like it'll work probably best to still leave a border on the textures just to make sure