- lasttype=-1;
- lastspecial=-1;
- glEnable(GL_BLEND);
- glDisable(GL_LIGHTING);
- glDisable(GL_CULL_FACE);
- glEnable(GL_TEXTURE_2D);
- blend = 1;
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- glDepthMask(0);
- glAlphaFunc(GL_GREATER, 0.0001);
- for(i=0;i<sprites.size();i++){
- if(lasttype!=sprites[i]->type) {
- switch(sprites[i]->type) {
- case cloudsprite:
- glBindTexture( GL_TEXTURE_2D, cloudtexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- break;
- case cloudimpactsprite:
- glBindTexture( GL_TEXTURE_2D, cloudimpacttexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- break;
- case breathsprite:
- glBindTexture( GL_TEXTURE_2D, cloudimpacttexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- break;
- case smoketype:
- glBindTexture( GL_TEXTURE_2D, smoketexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- break;
- case bloodsprite:
- glBindTexture( GL_TEXTURE_2D, bloodtexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- break;
- case splintersprite :
- if(lastspecial!=sprites[i]->special) {
- if(sprites[i]->special==0)glBindTexture( GL_TEXTURE_2D, splintertexture);
- if(sprites[i]->special==1)glBindTexture( GL_TEXTURE_2D, leaftexture);
- if(sprites[i]->special==2)glBindTexture( GL_TEXTURE_2D, snowflaketexture);
- if(sprites[i]->special==3)glBindTexture( GL_TEXTURE_2D, toothtexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- }
- break;
- case snowsprite:
- glBindTexture( GL_TEXTURE_2D, snowflaketexture);
- if(!blend){
- blend=1;
- glAlphaFunc(GL_GREATER, 0.0001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
- }
- break;
- case weaponshinesprite:
- glBindTexture( GL_TEXTURE_2D, shinetexture);
- if(blend){
- blend=0;
- glAlphaFunc(GL_GREATER, 0.001);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE);
- }
- break;
- case flamesprite:
- case weaponflamesprite:
- glBindTexture( GL_TEXTURE_2D, flametexture);
- if(blend||lasttype==bloodflamesprite){
- blend=0;
- glAlphaFunc(GL_GREATER, 0.3);
- glBlendFunc(GL_SRC_ALPHA,GL_ONE);
- }
- break;
- case bloodflamesprite:
- glBindTexture( GL_TEXTURE_2D, bloodflametexture);
- if(blend){
- blend=0;
- glAlphaFunc(GL_GREATER, 0.3);
- glBlendFunc(GL_ONE,GL_ZERO);
- }
- break;
- }
- }
- if(sprites[i]->type==snowsprite)
- distancemult=(144-(findDistancefast(&tempviewer,&sprites[i]->position)-(144*fadestart))*(1/(1-fadestart)))/144;
- else
- distancemult=(viewdistsquared-(findDistancefast(&viewer,&sprites[i]->position)-(viewdistsquared*fadestart))*(1/(1-fadestart)))/viewdistsquared;
- if(sprites[i]->type==flamesprite){
- if(distancemult>=1) glColor4f(sprites[i]->color[0],sprites[i]->color[1],sprites[i]->color[2],sprites[i]->opacity);
- else glColor4f(sprites[i]->color[0],sprites[i]->color[1],sprites[i]->color[2],sprites[i]->opacity*distancemult);
- } else {
- if(distancemult>=1) glColor4f(sprites[i]->color[0]*lightcolor[0],sprites[i]->color[1]*lightcolor[1],sprites[i]->color[2]*lightcolor[2],sprites[i]->opacity);
- else glColor4f(sprites[i]->color[0]*lightcolor[0],sprites[i]->color[1]*lightcolor[1],sprites[i]->color[2]*lightcolor[2],sprites[i]->opacity*distancemult);
- }
- lasttype=sprites[i]->type;
- lastspecial=sprites[i]->special;
- glMatrixMode(GL_MODELVIEW); // Select The Modelview Matrix
- glPushMatrix();
- glTranslatef(sprites[i]->position.x,sprites[i]->position.y,sprites[i]->position.z);
- if((sprites[i]->type==flamesprite||sprites[i]->type==weaponflamesprite||sprites[i]->type==weaponshinesprite)){
- difference=viewer-sprites[i]->position;
- Normalise(&difference);
- glTranslatef(difference.x*sprites[i]->size/4, difference.y*sprites[i]->size/4, difference.z*sprites[i]->size/4);
- }
- if(sprites[i]->type==snowsprite){
- glRotatef(sprites[i]->rotation*.2,0,.3,1);
- glTranslatef(1,0,0);
- }
- glGetFloatv(GL_MODELVIEW_MATRIX,M);
- point.x=M[12];
- point.y=M[13];
- point.z=M[14];
- glLoadIdentity();
- glTranslatef(point.x, point.y, point.z);
+ lasttype = -1;
+ lastspecial = -1;
+ glEnable(GL_BLEND);
+ glDisable(GL_LIGHTING);
+ glDisable(GL_CULL_FACE);
+ glEnable(GL_TEXTURE_2D);
+ blend = 1;
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glDepthMask(0);
+ glAlphaFunc(GL_GREATER, 0.0001);
+ for (unsigned i = 0; i < sprites.size(); i++) {
+ if (lasttype != sprites[i]->type) {
+ switch (sprites[i]->type) {
+ case cloudsprite:
+ cloudtexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ break;
+ case cloudimpactsprite:
+ cloudimpacttexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ break;
+ case breathsprite:
+ cloudimpacttexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ break;
+ case smoketype:
+ smoketexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ break;
+ case bloodsprite:
+ bloodtexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ break;
+ case splintersprite :
+ if (lastspecial != sprites[i]->special) {
+ if (sprites[i]->special == 0)
+ splintertexture.bind();
+ if (sprites[i]->special == 1)
+ leaftexture.bind();
+ if (sprites[i]->special == 2)
+ snowflaketexture.bind();
+ if (sprites[i]->special == 3)
+ toothtexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ }
+ break;
+ case snowsprite:
+ snowflaketexture.bind();
+ if (!blend) {
+ blend = 1;
+ glAlphaFunc(GL_GREATER, 0.0001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ }
+ break;
+ case weaponshinesprite:
+ shinetexture.bind();
+ if (blend) {
+ blend = 0;
+ glAlphaFunc(GL_GREATER, 0.001);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ }
+ break;
+ case flamesprite:
+ case weaponflamesprite:
+ flametexture.bind();
+ if (blend || lasttype == bloodflamesprite) {
+ blend = 0;
+ glAlphaFunc(GL_GREATER, 0.3);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE);
+ }
+ break;
+ case bloodflamesprite:
+ bloodflametexture.bind();
+ if (blend) {
+ blend = 0;
+ glAlphaFunc(GL_GREATER, 0.3);
+ glBlendFunc(GL_ONE, GL_ZERO);
+ }
+ break;
+ }
+ }
+ if (sprites[i]->type == snowsprite)
+ distancemult = (144 - (distsq(&tempviewer, &sprites[i]->position) - (144 * fadestart)) * (1 / (1 - fadestart))) / 144;
+ else
+ distancemult = (viewdistsquared - (distsq(&viewer, &sprites[i]->position) - (viewdistsquared * fadestart)) * (1 / (1 - fadestart))) / viewdistsquared;
+ if (sprites[i]->type == flamesprite) {
+ if (distancemult >= 1)
+ glColor4f(sprites[i]->color[0], sprites[i]->color[1], sprites[i]->color[2], sprites[i]->opacity);
+ else
+ glColor4f(sprites[i]->color[0], sprites[i]->color[1], sprites[i]->color[2], sprites[i]->opacity * distancemult);
+ } else {
+ if (distancemult >= 1)
+ glColor4f(sprites[i]->color[0]*lightcolor[0], sprites[i]->color[1]*lightcolor[1], sprites[i]->color[2]*lightcolor[2], sprites[i]->opacity);
+ else
+ glColor4f(sprites[i]->color[0]*lightcolor[0], sprites[i]->color[1]*lightcolor[1], sprites[i]->color[2]*lightcolor[2], sprites[i]->opacity * distancemult);
+ }
+ lasttype = sprites[i]->type;
+ lastspecial = sprites[i]->special;
+ glMatrixMode(GL_MODELVIEW);
+ glPushMatrix();
+ glTranslatef(sprites[i]->position.x, sprites[i]->position.y, sprites[i]->position.z);
+ if ((sprites[i]->type == flamesprite || sprites[i]->type == weaponflamesprite || sprites[i]->type == weaponshinesprite)) {
+ difference = viewer - sprites[i]->position;
+ Normalise(&difference);
+ glTranslatef(difference.x * sprites[i]->size / 4, difference.y * sprites[i]->size / 4, difference.z * sprites[i]->size / 4);
+ }
+ if (sprites[i]->type == snowsprite) {
+ glRotatef(sprites[i]->rotation * .2, 0, .3, 1);
+ glTranslatef(1, 0, 0);
+ }
+ glGetFloatv(GL_MODELVIEW_MATRIX, M);
+ point.x = M[12];
+ point.y = M[13];
+ point.z = M[14];
+ glLoadIdentity();
+ glTranslatef(point.x, point.y, point.z);