X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=plugins%2Fimagehl%2Fsprite.cpp;h=195d952832793552ea8afc27c37e04aba792daf5;hp=613b90a5eef7889f59440e99b88c03c09b833284;hb=cd6613e5171544b68d4ae70546c90a15c99b22a5;hpb=cd7ff1a1798cfae5d14811a310f56d2f1908490b diff --git a/plugins/imagehl/sprite.cpp b/plugins/imagehl/sprite.cpp index 613b90a5..195d9528 100644 --- a/plugins/imagehl/sprite.cpp +++ b/plugins/imagehl/sprite.cpp @@ -44,45 +44,45 @@ typedef unsigned char byte; ============================================================================ */ -typedef enum { ST_SYNC = 0, ST_RAND } synctype_t; +typedef enum {ST_SYNC = 0, ST_RAND } synctype_t; typedef enum { SPR_SINGLE = 0, SPR_GROUP } spriteframetype_t; typedef struct dspriteheader_s { - int ident; - int version; + int ident; + int version; } dspriteheader_t; // Quake1 typedef struct { - int type; - float boundingradius; - int width; - int height; - int numframes; - float beamlength; - synctype_t synctype; + int type; + float boundingradius; + int width; + int height; + int numframes; + float beamlength; + synctype_t synctype; } dspritev1_t; // Halflife typedef struct { - int type; - int texFormat; - float boundingradius; - int width; - int height; - int numframes; - float beamlength; - synctype_t synctype; + int type; + int texFormat; + float boundingradius; + int width; + int height; + int numframes; + float beamlength; + synctype_t synctype; } dspritev2_t; typedef struct { - int origin[2]; - int width; - int height; + int origin[2]; + int width; + int height; } dspriteframe_t; typedef struct { - short type; + short type; } dspriteframetype_t; /* @@ -91,7 +91,7 @@ typedef struct { } dpalette_t; */ -const int IDSPRITEHEADER = (('P' << 24) + ('S' << 16) + ('D' << 8) + 'I'); +const int IDSPRITEHEADER = ( ( 'P' << 24 ) + ( 'S' << 16 ) + ( 'D' << 8 ) + 'I' ); // little-endian "IDSP" /* @@ -100,119 +100,122 @@ const int IDSPRITEHEADER = (('P' << 24) + ('S' << 16) + ('D' << 8) + 'I'); ============= */ -Image *LoadIDSPBuff(byte *buffer) -{ - byte *buf_p; - int columns, rows; - byte *pixbuf; - - int row, column; - byte *palette; - unsigned char red, green, blue, alphabyte; - - dspriteheader_t *header; - dspritev1_t *pinv1; - dspritev2_t *pinv2; - dspriteframetype_t *pframetype; - int version; - int numframes; - dspriteframe_t *spriteframe; - - header = (dspriteheader_t *) buffer; - - if (header->ident != IDSPRITEHEADER) { - globalErrorStream() << "WARNING: IDSP file has wrong header\n"; - return 0; - } - - version = header->version; - if (version != 1 && version != 2) { - globalErrorStream() << "WARNING: IDSP file has wrong version number " - "(" << version << " should be 1 or 2)\n"; - return 0; - } - - // initialise variables depending on the sprite version. - switch (version) { - case 1: - pinv1 = (dspritev1_t *) (header + 1); - numframes = pinv1->numframes; - columns = pinv1->width; - rows = pinv1->height; - pframetype = (dspriteframetype_t *) (pinv1 + 1); - break; - case 2: - pinv2 = (dspritev2_t *) (header + 1); - numframes = pinv2->numframes; - columns = pinv2->width; - rows = pinv2->height; - pframetype = (dspriteframetype_t *) (pinv2 + 1); - break; - default: - globalErrorStream() << "WARNING: IDSP file has unsupported version\n"; - return 0; - } - if (numframes > 1) { - globalErrorStream() << "WARNING: IDSP file has multiple frames, only the first frame will be used.\n"; - } - - // palette = buffer+mipdatasize+2; - // buf_p = buffer+lpMip->offsets[0]; - - RGBAImage *image = new RGBAImage(columns, rows); +Image* LoadIDSPBuff( byte *buffer ){ + byte *buf_p; + int columns, rows; + byte *pixbuf; + + int row, column; + byte *palette; + unsigned char red, green, blue, alphabyte; + + dspriteheader_t *header; + dspritev1_t *pinv1; + dspritev2_t *pinv2; + dspriteframetype_t *pframetype; + int version; + int numframes; + dspriteframe_t *spriteframe; + + header = (dspriteheader_t *)buffer; + + if ( header->ident != IDSPRITEHEADER ) { + globalErrorStream() << "WARNING: IDSP file has wrong header\n"; + return 0; + } + + version = header->version; + if ( version != 1 && version != 2 ) { + globalErrorStream() << "WARNING: IDSP file has wrong version number " + "(" << version << " should be 1 or 2)\n"; + return 0; + } + + // initialise variables depending on the sprite version. + switch ( version ) + { + case 1: + pinv1 = (dspritev1_t *)( header + 1 ); + numframes = pinv1->numframes; + columns = pinv1->width; + rows = pinv1->height; + pframetype = (dspriteframetype_t *)( pinv1 + 1 ); + break; + case 2: + pinv2 = (dspritev2_t *)( header + 1 ); + numframes = pinv2->numframes; + columns = pinv2->width; + rows = pinv2->height; + pframetype = (dspriteframetype_t *)( pinv2 + 1 ); + break; + default: + globalErrorStream() << "WARNING: IDSP file has unsupported version\n"; + return 0; + } + if ( numframes > 1 ) { + globalErrorStream() << "WARNING: IDSP file has multiple frames, only the first frame will be used.\n"; + } + + // palette = buffer+mipdatasize+2; + // buf_p = buffer+lpMip->offsets[0]; + + RGBAImage* image = new RGBAImage( columns, rows ); #ifdef DEBUG - frametype = spriteframetype_t( pframetype->type ); - if ( frametype == SPR_SINGLE ) { - globalOutputStream() << "Single Frame\n"; - } - else if ( frametype == SPR_GROUP ) { - globalOutputStream() << "Group of Frames\n"; - } - else - { - globalOutputStream() << "Bleh!\n"; // <-- we always get this, wtf! - } + frametype = spriteframetype_t( pframetype->type ); + if ( frametype == SPR_SINGLE ) { + globalOutputStream() << "Single Frame\n"; + } + else if ( frametype == SPR_GROUP ) { + globalOutputStream() << "Group of Frames\n"; + } + else + { + globalOutputStream() << "Bleh!\n"; // <-- we always get this, wtf! + } #endif - palette = (byte *) (pframetype + 1); - spriteframe = (dspriteframe_t *) (palette + (256 * 3) + 4); // what are those 4 extra bytes ? what's missing ? - buf_p = (byte *) (spriteframe + 1); + palette = (byte *)( pframetype + 1 ); + spriteframe = (dspriteframe_t *)( palette + ( 256 * 3 ) + 4 ); // what are those 4 extra bytes ? what's missing ? + buf_p = (byte *)( spriteframe + 1 ); - for (row = 0; row < rows; row++) { - pixbuf = image->getRGBAPixels() + row * columns * 4; + for ( row = 0; row < rows; row++ ) + { + pixbuf = image->getRGBAPixels() + row * columns * 4; - for (column = 0; column < columns; column++) { - int palIndex; + for ( column = 0; column < columns; column++ ) + { + int palIndex; - palIndex = *buf_p++; + palIndex = *buf_p++; - red = *(palette + (palIndex * 3)); - green = *(palette + (palIndex * 3) + 1); - blue = *(palette + (palIndex * 3) + 2); + red = *( palette + ( palIndex * 3 ) ); + green = *( palette + ( palIndex * 3 ) + 1 ); + blue = *( palette + ( palIndex * 3 ) + 2 ); - // HalfLife engine makes pixels that are BLUE transparent. (RGB = 0x0000FF) - // So show them that way in the editor. - if (blue == 0xff && red == 0x00 && green == 0x00) { - alphabyte = 0xff; //FIXME: backwards? (so sprite models to render correctly) - blue = 0x00; // don't set the resulting pixel to blue - } else { - alphabyte = 0x00; //FIXME: backwards? (so sprite models to render correctly) - } + // HalfLife engine makes pixels that are BLUE transparent. (RGB = 0x0000FF) + // So show them that way in the editor. + if ( blue == 0xff && red == 0x00 && green == 0x00 ) { + alphabyte = 0xff; //FIXME: backwards? (so sprite models to render correctly) + blue = 0x00; // don't set the resulting pixel to blue + } + else + { + alphabyte = 0x00; //FIXME: backwards? (so sprite models to render correctly) + } - *pixbuf++ = red; - *pixbuf++ = green; - *pixbuf++ = blue; + *pixbuf++ = red; + *pixbuf++ = green; + *pixbuf++ = blue; - *pixbuf++ = alphabyte; - } - } + *pixbuf++ = alphabyte; + } + } - return image; + return image; } -Image *LoadIDSP(ArchiveFile &file) -{ - ScopedArchiveBuffer buffer(file); - return LoadIDSPBuff(buffer.buffer); +Image* LoadIDSP( ArchiveFile& file ){ + ScopedArchiveBuffer buffer( file ); + return LoadIDSPBuff( buffer.buffer ); }