05 Jan 2008
This commit is contained in:
parent
9503c8ed70
commit
bdaa7d5530
|
@ -3,24 +3,27 @@
|
|||
Ньютон - это просто пипец какой-то. С версии 1.3 до 1.53 левостороняя система координат сменилась на правую.
|
||||
Коллижен менеджер (который фейсы добавляет) на версии 1.53 вылетает при парсинге половины q2 карт почему-то.
|
||||
DDS Converter 2.1 некорректно высчитывает размер dds файла (баг в devil ?), юзаем только nvdxt
|
||||
SprExplorer писали редкостные идиоты - он у них не то что версию файла, он даже заголовок не проверяет,
|
||||
действительно, раз расширение spr, значит правильный ресурс. Если б программисты строили дома...
|
||||
|
||||
// замеченные баги
|
||||
1. не выводится текущее значение переменной в консоль OK
|
||||
2. imglib не выводит сообщения в консоль OK
|
||||
3. SC_ParseToken вылетает при парсинге сейв-файла
|
||||
|
||||
Имплементация idconv
|
||||
1. Конвертация .spr -> xash spr OK
|
||||
2. Конвертация .sp2 -> xash spr OK
|
||||
3. Конвертация .pcx -> xash gfx OK
|
||||
4. Конвертация .flat-> xash mip OK
|
||||
5. Конвертация .mip -> xash mip OK
|
||||
6. Конвертация .lmp -> xash gfx OK
|
||||
7. Конвертация .fnt -> xash gfx OK
|
||||
8. Конвертация .wal -> xash mip OK
|
||||
Имплементация XashSpriteFormat
|
||||
1. Переписать conv_sprite, для генерации qc скрипта OK
|
||||
2. Сжать кадры в spritegen OK
|
||||
3. распаковать кадры на рендере OK
|
||||
4. Разобраться с групами OK
|
||||
5. Удалить framerate (опять beamlength свободен) OK
|
||||
6. Добавить SPR_ANGLED, переработать заголовок, для SprExlorer Ok
|
||||
7. Сделать, чтобы последний кадр сохранялся в скрипт
|
||||
8. Придумать, как флипнуть кадр
|
||||
|
||||
|
||||
Текущие задачи:
|
||||
1. Доделать сохранялку шейдеров
|
||||
1. Перевести движок на spr32
|
||||
1. Еще раз пересмотреть типы файлов для wadlib
|
||||
2. подключить звуковой кодер к roqlib
|
||||
3. Имплементация save-restore для физики
|
||||
|
|
|
@ -10,17 +10,19 @@ bool ConvertImagePixels ( byte *mempool, const char *name, byte parms )
|
|||
{
|
||||
rgbdata_t *image = FS_LoadImage( name, NULL, 0 );
|
||||
char savename[MAX_QPATH];
|
||||
int w, h;
|
||||
char width[4], height[4];
|
||||
|
||||
if(!image || !image->buffer) return false;
|
||||
|
||||
com.strncpy( savename, name, sizeof(savename)-1);
|
||||
FS_StripExtension( savename ); // remove extension if needed
|
||||
FS_DefaultExtension( savename, ".tga" );// set new extension
|
||||
w = image->width, h = image->height;
|
||||
|
||||
FS_GetParmFromCmdLine("-w", width );
|
||||
FS_GetParmFromCmdLine("-h", height);
|
||||
if(FS_CheckParm("-resample"))
|
||||
Image_Processing( name, &image );
|
||||
{
|
||||
Image_Processing( name, &image, com.atoi(width), com.atoi(height));
|
||||
}
|
||||
|
||||
Msg("%s\n", name );
|
||||
FS_SaveImage( savename, image );// save as TGA
|
||||
|
|
|
@ -4,28 +4,32 @@
|
|||
//=======================================================================
|
||||
|
||||
#include "platform.h"
|
||||
#include "basefiles.h"
|
||||
#include "mathlib.h"
|
||||
#include "utils.h"
|
||||
|
||||
#define MAX_BUFFER_SIZE ((sizeof(frames) * MAX_FRAMES) + (MAX_FRAME_DIM * 2 * MAX_FRAMES))
|
||||
#define MAX_FRAMES 1024
|
||||
#define MAX_FRAMES 512
|
||||
#define MAX_FRAME_DIM 512
|
||||
#define MIN_INTERVAL 0.001f
|
||||
#define MAX_INTERVAL 64.0f
|
||||
|
||||
dspritehl_t sprite;
|
||||
byte *byteimage, *lbmpalette;
|
||||
dsprite_t sprite;
|
||||
byte *spritepool;
|
||||
int byteimagewidth, byteimageheight;
|
||||
rgbdata_t *byteimage;
|
||||
byte *lumpbuffer = NULL, *plump;
|
||||
char spriteoutname[MAX_SYSPATH];
|
||||
int framesmaxs[2];
|
||||
float frameinterval;
|
||||
int framecount;
|
||||
int origin_x;
|
||||
int origin_y;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int type; // single frame or group of frames
|
||||
void *pdata; // either a dspriteframe_t
|
||||
frametype_t type; // single frame or group of frames
|
||||
void *pdata; // either a dspriteframe_t or group info
|
||||
float interval; // only used for frames in groups
|
||||
int numgroupframes; // only used by group headers
|
||||
} spritepackage_t;
|
||||
|
||||
spritepackage_t frames[MAX_FRAMES];
|
||||
|
@ -35,63 +39,84 @@ spritepackage_t frames[MAX_FRAMES];
|
|||
WriteFrame
|
||||
============
|
||||
*/
|
||||
void WriteFrame (vfile_t *f, int framenum)
|
||||
void WriteFrame( file_t *f, int framenum )
|
||||
{
|
||||
dspriteframe_t *pframe;
|
||||
dspriteframe_t frametemp;
|
||||
dframe_t *pframe, frametemp;
|
||||
vfile_t *h = VFS_Open( f, "wz" );
|
||||
fs_offset_t hdrstart, bufstart, bufend;
|
||||
|
||||
pframe = (dspriteframe_t *)frames[framenum].pdata;
|
||||
pframe = (dframe_t *)frames[framenum].pdata;
|
||||
frametemp.origin[0] = LittleLong (pframe->origin[0]);
|
||||
frametemp.origin[1] = LittleLong (pframe->origin[1]);
|
||||
frametemp.width = LittleLong (pframe->width);
|
||||
frametemp.height = LittleLong (pframe->height);
|
||||
frametemp.compsize = 0; // not used
|
||||
|
||||
VFS_Write (f, &frametemp, sizeof(frametemp));
|
||||
VFS_Write (f, (byte *)(pframe + 1), pframe->height * pframe->width);
|
||||
hdrstart = FS_Tell(f);
|
||||
FS_Write(f, &frametemp, sizeof(frametemp));
|
||||
bufstart = FS_Tell(f);
|
||||
VFS_Write(h, (byte *)(pframe + 1), pframe->height * pframe->width * 4 );
|
||||
f = VFS_Close(h); // compress frame buffer
|
||||
bufend = FS_Tell(f);
|
||||
frametemp.compsize = bufend - bufstart; // size of compressed frame
|
||||
|
||||
FS_Seek(f, hdrstart, SEEK_SET );
|
||||
FS_Write(f, &frametemp, sizeof(frametemp)); // merge header
|
||||
FS_Seek(f, bufend, SEEK_SET ); // go to end of frame
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
============
|
||||
WriteSprite
|
||||
============
|
||||
*/
|
||||
void WriteSprite (vfile_t *f)
|
||||
void WriteSprite( file_t *f )
|
||||
{
|
||||
int i, curframe;
|
||||
short cnt = 256;
|
||||
dspritehl_t spritetemp;
|
||||
|
||||
sprite.boundingradius = sqrt(((framesmaxs[0] >> 1) * (framesmaxs[0] >> 1)) + ((framesmaxs[1] >> 1) * (framesmaxs[1] >> 1)));
|
||||
int i, curframe = 0, groupframe = 0;
|
||||
|
||||
// write out the sprite header
|
||||
spritetemp.type = LittleLong (sprite.type);
|
||||
spritetemp.texFormat = LittleLong (sprite.texFormat);
|
||||
spritetemp.boundingradius = LittleFloat (sprite.boundingradius);
|
||||
spritetemp.width = LittleLong (framesmaxs[0]);
|
||||
spritetemp.height = LittleLong (framesmaxs[1]);
|
||||
spritetemp.numframes = LittleLong (sprite.numframes);
|
||||
spritetemp.version = LittleLong (sprite.version);
|
||||
spritetemp.ident = LittleLong (IDSPRHLHEADER);
|
||||
spritetemp.beamlength = LittleFloat (sprite.beamlength);
|
||||
spritetemp.synctype = LittleFloat (sprite.synctype);
|
||||
|
||||
VFS_Write( f, &spritetemp, sizeof(spritetemp));
|
||||
|
||||
// Write out palette in 16bit mode
|
||||
VFS_Write( f, (void *)&cnt, sizeof(cnt));
|
||||
VFS_Write( f, lbmpalette, cnt * 3 );
|
||||
|
||||
// write out the frames
|
||||
curframe = 0;
|
||||
SwapBlock( (int *)&sprite, sizeof(dsprite_t));
|
||||
FS_Write( f, &sprite, sizeof(sprite));
|
||||
|
||||
for (i = 0; i < sprite.numframes; i++)
|
||||
{
|
||||
VFS_Write ( f, &frames[curframe].type, sizeof(frames[curframe].type));
|
||||
WriteFrame ( f, curframe); // only single frame supported
|
||||
curframe++;
|
||||
}
|
||||
FS_Write( f, &frames[curframe].type, sizeof(frames[curframe].type));
|
||||
if( frames[curframe].type == SPR_SINGLE )
|
||||
{
|
||||
// single (non-grouped) frame
|
||||
WriteFrame( f, curframe );
|
||||
curframe++;
|
||||
}
|
||||
else // angled or sequence
|
||||
{
|
||||
int j, numframes;
|
||||
dspritegroup_t dsgroup;
|
||||
float totinterval;
|
||||
|
||||
groupframe = curframe;
|
||||
curframe++;
|
||||
numframes = frames[groupframe].numgroupframes;
|
||||
|
||||
// set and write the group header
|
||||
dsgroup.numframes = LittleLong( numframes );
|
||||
FS_Write(f, &dsgroup, sizeof(dsgroup));
|
||||
totinterval = 0.0f; // write the interval array
|
||||
|
||||
for(j = 0; j < numframes; j++)
|
||||
{
|
||||
dspriteinterval_t temp;
|
||||
|
||||
totinterval += frames[groupframe+1+j].interval;
|
||||
temp.interval = LittleFloat(totinterval);
|
||||
FS_Write(f, &temp, sizeof(temp));
|
||||
}
|
||||
for(j = 0; j < numframes; j++)
|
||||
{
|
||||
WriteFrame(f, curframe);
|
||||
curframe++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -99,23 +124,21 @@ void WriteSprite (vfile_t *f)
|
|||
WriteSPRFile
|
||||
==============
|
||||
*/
|
||||
void WriteSPRFile (void)
|
||||
void WriteSPRFile( void )
|
||||
{
|
||||
vfile_t *vf;
|
||||
file_t *file;
|
||||
file_t *f;
|
||||
|
||||
if(sprite.numframes == 0) Sys_Error ("%s have no frames\n", spriteoutname );
|
||||
if(sprite.numframes == 0) MsgDev(D_WARN, "WriteSPRFile: create blank sprite %s\n", spriteoutname );
|
||||
if((plump - lumpbuffer) > MAX_BUFFER_SIZE)
|
||||
Sys_Error ("Can't write %s, sprite package too big", spriteoutname );
|
||||
Sys_Break("Can't write %s, sprite package too big", spriteoutname );
|
||||
|
||||
f = FS_Open( spriteoutname, "wb" );
|
||||
Msg("writing %s\n", spriteoutname );
|
||||
WriteSprite( f );
|
||||
FS_Close( f );
|
||||
|
||||
file = FS_Open( spriteoutname, "wb" );
|
||||
vf = VFS_Open( file, "wb" );
|
||||
Msg("writing %s\n", spriteoutname);
|
||||
WriteSprite( vf );
|
||||
file = VFS_Close( vf );
|
||||
FS_Close( file );
|
||||
|
||||
Msg("%d frame%s\n", sprite.numframes, sprite.numframes > 1 ? "s" : "" );
|
||||
Msg("%d ungrouped frame%s, including group headers\n", framecount, framecount > 1 ? "s" : "");
|
||||
spriteoutname[0] = 0;// clear for a new sprite
|
||||
}
|
||||
|
||||
|
@ -149,84 +172,261 @@ void Cmd_Texture ( void )
|
|||
{
|
||||
Com_GetToken (false);
|
||||
|
||||
if (Com_MatchToken( "additive")) sprite.texFormat = SPR_ADDITIVE;
|
||||
else if (Com_MatchToken( "normal")) sprite.texFormat = SPR_NORMAL;
|
||||
else if (Com_MatchToken( "indexalpha")) sprite.texFormat = SPR_INDEXALPHA;
|
||||
else if (Com_MatchToken( "alphatest")) sprite.texFormat = SPR_ALPHTEST;
|
||||
else if (Com_MatchToken( "glow")) sprite.texFormat = SPR_ADDGLOW;
|
||||
else sprite.texFormat = SPR_NORMAL; // default
|
||||
if (Com_MatchToken( "additive")) sprite.rendermode = SPR_ADDITIVE;
|
||||
else if (Com_MatchToken( "normal")) sprite.rendermode = SPR_NORMAL;
|
||||
else if (Com_MatchToken( "indexalpha")) sprite.rendermode = SPR_INDEXALPHA;
|
||||
else if (Com_MatchToken( "alphatest")) sprite.rendermode = SPR_ALPHTEST;
|
||||
else if (Com_MatchToken( "glow")) sprite.rendermode = SPR_ADDGLOW;
|
||||
else sprite.rendermode = SPR_NORMAL; // default
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Framerate
|
||||
|
||||
syntax: "$framerate value"
|
||||
===============
|
||||
*/
|
||||
void Cmd_Framerate( void )
|
||||
{
|
||||
float framerate = com.atof(Com_GetToken(false));
|
||||
if(framerate <= 0.0f) return; // negative framerate not allowed
|
||||
frameinterval = bound( MIN_INTERVAL, (1.0f/framerate), MAX_INTERVAL );
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Load
|
||||
|
||||
syntax "$load fire01.bmp"
|
||||
syntax "$load fire01.tga"
|
||||
===============
|
||||
*/
|
||||
void Cmd_Load( void )
|
||||
void Cmd_Load (void)
|
||||
{
|
||||
static byte origpalette[256*3];
|
||||
char *name = Com_GetToken ( false );
|
||||
dspriteframe_t *pframe;
|
||||
int x, y, w, h, pix;
|
||||
byte *screen_p;
|
||||
char *framename;
|
||||
|
||||
FS_DefaultExtension( name, ".bmp" );
|
||||
if( byteimage ) FS_FreeImage( byteimage ); // release old image
|
||||
framename = Com_GetToken(false);
|
||||
FS_DefaultExtension( framename, ".tga" );
|
||||
byteimage = FS_LoadImage( framename, NULL, 0 );
|
||||
if( !byteimage ) Sys_Break("Error: unable to load \"%s\"\n", framename );
|
||||
}
|
||||
|
||||
byteimage = ReadBMP (name, &lbmpalette, &byteimagewidth, &byteimageheight);
|
||||
if(!byteimage) Sys_Error( "unable to load file \"%s\"\n", name );
|
||||
void iMemSwap( byte *s1, byte *s2, const uint size )
|
||||
{
|
||||
const uint block_size = 4096;
|
||||
const uint blocks = size / block_size;
|
||||
uint i;
|
||||
|
||||
if(sprite.numframes == 0) Mem_Copy( origpalette, lbmpalette, sizeof( origpalette ));
|
||||
else if (memcmp( origpalette, lbmpalette, sizeof( origpalette )))
|
||||
MsgWarn("Cmd_Load: %s doesn't share a pallette with the previous frame\n", name );
|
||||
|
||||
w = byteimagewidth;
|
||||
h = byteimageheight;
|
||||
byte *block = Mem_Alloc( zonepool, block_size );
|
||||
|
||||
if ((w > MAX_FRAME_DIM) || (h > MAX_FRAME_DIM))
|
||||
Sys_Error ("Sprite has a dimension longer than %i", MAX_FRAME_DIM);
|
||||
|
||||
pframe = (dspriteframe_t *)plump;
|
||||
frames[framecount].pdata = pframe;
|
||||
frames[framecount].type = 0;//SPR_SINGLE
|
||||
|
||||
if((origin_x != 0) && (origin_y != 0))
|
||||
for( i = 0; i < blocks; i++ )
|
||||
{
|
||||
//write shared origin
|
||||
Mem_Copy( block, s1, block_size);
|
||||
Mem_Copy( s1, s2, block_size);
|
||||
Mem_Copy( s2, block, block_size);
|
||||
s1 += block_size;
|
||||
s1 += block_size;
|
||||
}
|
||||
i = size - i * block_size;
|
||||
if( i > 0 )
|
||||
{
|
||||
Mem_Copy(block, s1, i);
|
||||
Mem_Copy(s1, s2, i);
|
||||
Mem_Copy(s2, block, i);
|
||||
}
|
||||
Mem_Free( block );
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Frame
|
||||
|
||||
syntax "$frame xoffset yoffset width height <interval> <origin x> <origin y>"
|
||||
===============
|
||||
*/
|
||||
void Cmd_Frame( void )
|
||||
{
|
||||
int i, x, y, xl, yl, xh, yh, w, h;
|
||||
int pixels, linedelta;
|
||||
dframe_t *pframe;
|
||||
byte *fin;
|
||||
|
||||
if (framecount >= MAX_FRAMES) Sys_Error("Too many frames in package\n");
|
||||
if( !byteimage )
|
||||
{
|
||||
// frame not loaded, just skip arguments
|
||||
while(Com_TryToken());
|
||||
return;
|
||||
}
|
||||
|
||||
pixels = byteimage->width * byteimage->height;
|
||||
xl = atoi(Com_GetToken(false));
|
||||
yl = atoi(Com_GetToken(false));
|
||||
w = atoi(Com_GetToken(false));
|
||||
h = atoi(Com_GetToken(false));
|
||||
|
||||
if((xl & 0x07)||(yl & 0x07)||(w & 0x07)||(h & 0x07))
|
||||
{
|
||||
MsgWarn("frame dimensions not multiples of 8\n" );
|
||||
//return;
|
||||
}
|
||||
if ((w > MAX_FRAME_DIM) || (h > MAX_FRAME_DIM))
|
||||
{
|
||||
w = min(w, MAX_FRAME_DIM);
|
||||
h = min(h, MAX_FRAME_DIM);
|
||||
Image_Processing( "frame", &byteimage, w, h);
|
||||
}
|
||||
|
||||
xh = xl + w;
|
||||
yh = yl + h;
|
||||
|
||||
pframe = (dframe_t *)plump;
|
||||
frames[framecount].pdata = pframe;
|
||||
frames[framecount].type = SPR_SINGLE;
|
||||
|
||||
// get interval
|
||||
if(Com_TryToken())
|
||||
{
|
||||
frames[framecount].interval = bound(MIN_INTERVAL, com.atof(com_token), MAX_INTERVAL );
|
||||
|
||||
}
|
||||
else if(frameinterval != 0)
|
||||
{
|
||||
frames[framecount].interval = frameinterval;
|
||||
}
|
||||
else
|
||||
{
|
||||
// use default interval
|
||||
frames[framecount].interval = (float)0.05f;
|
||||
}
|
||||
|
||||
if(Com_TryToken())
|
||||
{
|
||||
pframe->origin[0] = -com.atoi(com_token);
|
||||
pframe->origin[1] = com.atoi(Com_GetToken(false));
|
||||
}
|
||||
else if((origin_x != 0) && (origin_y != 0))
|
||||
{
|
||||
// write shared origin
|
||||
pframe->origin[0] = -origin_x;
|
||||
pframe->origin[1] = origin_y;
|
||||
}
|
||||
else
|
||||
{
|
||||
//use center of image
|
||||
pframe->origin[0] = -(w >> 1);
|
||||
pframe->origin[1] = h >> 1;
|
||||
// use center of image
|
||||
pframe->origin[0] = -(w>>1);
|
||||
pframe->origin[1] = h>>1;
|
||||
}
|
||||
|
||||
if(Com_TryToken() && Com_MatchToken("flip_x"))
|
||||
{
|
||||
byte *Data, *DataPtr, *Temp;
|
||||
int c;
|
||||
|
||||
Temp = byteimage->buffer;
|
||||
DataPtr = Mem_Alloc( zonepool, pixels * 4 );
|
||||
for (y = 0; y < byteimage->height; y++)
|
||||
{
|
||||
for (x = byteimage->width - 1; x >= 0; x--)
|
||||
{
|
||||
for (c = 0; c < 4; c++, Temp++)
|
||||
{
|
||||
DataPtr[y * 4 + x * 4 + c] = *Temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
byteimage->buffer = DataPtr;
|
||||
/*for (x = byteimage->width - 1; x >= 0; x--)
|
||||
{
|
||||
in = byteimage->buffer + x * byteimage->height * 4;
|
||||
bufend = in + byteimage->height * 4;
|
||||
for ( ;in < bufend; in += 4)
|
||||
{
|
||||
*out++ = in[0];
|
||||
*out++ = in[1];
|
||||
*out++ = in[2];
|
||||
*out++ = in[3];
|
||||
}
|
||||
}
|
||||
for (y = byteimage->height - 1; y >= 0; y--)
|
||||
{
|
||||
in = byteimage->buffer + y * byteimage->width * 4;
|
||||
bufend = in + byteimage->width * 4;
|
||||
for ( ;in < bufend; in += 4)
|
||||
{
|
||||
*out++ = in[2];
|
||||
*out++ = in[1];
|
||||
*out++ = in[0];
|
||||
*out++ = in[3];
|
||||
}
|
||||
}*/
|
||||
}
|
||||
|
||||
pframe->width = w;
|
||||
pframe->height = h;
|
||||
|
||||
//adjust maxsize
|
||||
if (w > framesmaxs[0]) framesmaxs[0] = w;
|
||||
if (h > framesmaxs[1]) framesmaxs[1] = h;
|
||||
// adjust maxsize
|
||||
if (w > sprite.width) sprite.width = w;
|
||||
if (h > sprite.height) sprite.height = h;
|
||||
|
||||
plump = (byte *)(pframe + 1);
|
||||
screen_p = byteimage;
|
||||
plump = (byte *)(pframe + 1); // move pointer
|
||||
fin = byteimage->buffer + yl * byteimage->width + xl;
|
||||
linedelta = byteimage->width - w;
|
||||
|
||||
for (y = 0; y < byteimageheight; y++)
|
||||
for (y = yl; y < yh; y++)
|
||||
{
|
||||
for (x = 0; x < byteimagewidth; x++)
|
||||
{
|
||||
pix = *screen_p;
|
||||
*screen_p++ = 0;
|
||||
*plump++ = pix;
|
||||
}
|
||||
for( x = xl; x < xh; x++ )
|
||||
for( i = 0; i < 4; i++)
|
||||
*plump++ = *fin++;
|
||||
fin += linedelta * 4;
|
||||
}
|
||||
|
||||
framecount++;
|
||||
sprite.numframes++;
|
||||
if (framecount >= MAX_FRAMES) Sys_Error ("Too many frames in package\n");
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Group
|
||||
|
||||
syntax:
|
||||
$group or $angled
|
||||
{
|
||||
$load fire01.bmp
|
||||
$frame xoffset yoffset width height <interval> <origin x> <origin y>
|
||||
$load fire02.bmp
|
||||
$frame xoffset yoffset width height <interval> <origin x> <origin y>"
|
||||
$load fire03.bmp
|
||||
$frame xoffset yoffset width height <interval> <origin x> <origin y>
|
||||
}
|
||||
===============
|
||||
*/
|
||||
void Cmd_Group( bool angled )
|
||||
{
|
||||
int groupframe;
|
||||
int is_started = 0;
|
||||
|
||||
groupframe = framecount++;
|
||||
|
||||
frames[groupframe].type = angled ? SPR_ANGLED : SPR_GROUP;
|
||||
frames[groupframe].numgroupframes = 0;
|
||||
|
||||
while( 1 )
|
||||
{
|
||||
if(!Com_GetToken(true)) Sys_Error("End of file during group\n");
|
||||
|
||||
if(Com_MatchToken( "{" )) is_started = 1;
|
||||
else if(Com_MatchToken( "}" )) break; // end of group
|
||||
else if(Com_MatchToken( "$framerate" )) Cmd_Framerate();
|
||||
else if(Com_MatchToken("$frame"))
|
||||
{
|
||||
Cmd_Frame();
|
||||
frames[groupframe].numgroupframes++;
|
||||
}
|
||||
else if(Com_MatchToken("$load" )) Cmd_Load();
|
||||
else if(is_started) Sys_Break("missing }\n");
|
||||
else Sys_Break("$frame or $load expected\n");
|
||||
}
|
||||
if( frames[groupframe].numgroupframes == 0 ) MsgDev(D_WARN, "Cmd_Group: create blank group\n");
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -242,18 +442,6 @@ void Cmd_Offset (void)
|
|||
origin_y = atoi(Com_GetToken (false));
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
Cmd_Beamlength
|
||||
|
||||
syntax: "$beamlength length"
|
||||
===============
|
||||
*/
|
||||
void Cmd_Beamlength( void )
|
||||
{
|
||||
sprite.beamlength = com.atof(Com_GetToken(false));
|
||||
}
|
||||
|
||||
/*
|
||||
==============
|
||||
Cmd_Sync
|
||||
|
@ -275,7 +463,7 @@ syntax: "$spritename outname"
|
|||
*/
|
||||
void Cmd_Spritename (void)
|
||||
{
|
||||
strcpy( spriteoutname, Com_GetToken (false));
|
||||
strcpy( spriteoutname, Com_GetToken(false));
|
||||
FS_DefaultExtension( spriteoutname, ".spr" );
|
||||
}
|
||||
|
||||
|
@ -297,17 +485,19 @@ void ResetSpriteInfo( void )
|
|||
//set default sprite parms
|
||||
FS_FileBase(gs_mapname, spriteoutname );//kill path and ext
|
||||
FS_DefaultExtension( spriteoutname, ".spr" );//set new ext
|
||||
|
||||
|
||||
memset (&sprite, 0, sizeof(sprite));
|
||||
framecount = 0;
|
||||
memset(frames, 0, sizeof(frames));
|
||||
framecount = origin_x = origin_y = 0;
|
||||
frameinterval = 0.0f;
|
||||
|
||||
framesmaxs[0] = -9999999;
|
||||
framesmaxs[1] = -9999999;
|
||||
|
||||
if (!lumpbuffer )lumpbuffer = Mem_Alloc(spritepool, (MAX_BUFFER_SIZE) * 2); // *2 for padding
|
||||
if (!lumpbuffer ) lumpbuffer = Mem_Alloc( spritepool, (MAX_BUFFER_SIZE) * 2); // *2 for padding
|
||||
|
||||
plump = lumpbuffer;
|
||||
sprite.version = SPRITEHL_VERSION;//normal sprite
|
||||
sprite.width = -9999999;
|
||||
sprite.height = -9999999;
|
||||
sprite.ident = IDSPRITEHEADER;
|
||||
sprite.version = SPRITE_VERSION;
|
||||
sprite.type = SPR_VP_PARALLEL;
|
||||
sprite.synctype = ST_RAND; // default
|
||||
}
|
||||
|
@ -323,30 +513,34 @@ bool ParseSpriteScript (void)
|
|||
|
||||
while (1)
|
||||
{
|
||||
if(!Com_GetToken (true))break;
|
||||
|
||||
if(!Com_GetToken (true)) break;
|
||||
if (Com_MatchToken( "$spritename" )) Cmd_Spritename();
|
||||
else if (Com_MatchToken( "$texture" )) Cmd_Texture();
|
||||
else if (Com_MatchToken( "$origin" )) Cmd_Offset();
|
||||
else if (Com_MatchToken( "$load" )) Cmd_Load();
|
||||
else if (Com_MatchToken( "$type" )) Cmd_Type();
|
||||
else if (Com_MatchToken( "$beamlength" )) Cmd_Beamlength();
|
||||
else if (Com_MatchToken( "$sync" )) Cmd_Sync();
|
||||
else if (Com_MatchToken( "$frame" ))
|
||||
{
|
||||
Cmd_Frame();
|
||||
sprite.numframes++;
|
||||
}
|
||||
else if (Com_MatchToken( "$group" ))
|
||||
{
|
||||
Cmd_Group( false );
|
||||
sprite.numframes++;
|
||||
}
|
||||
else if (Com_MatchToken( "$angled" ))
|
||||
{
|
||||
Cmd_Group( true );
|
||||
sprite.numframes++;
|
||||
}
|
||||
else if (!Com_ValidScript( QC_SPRITEGEN )) return false;
|
||||
else Cmd_SpriteUnknown();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void ClearSprite( void )
|
||||
{
|
||||
origin_x = 0;
|
||||
origin_y = 0;
|
||||
|
||||
memset(frames, 0, sizeof(frames));
|
||||
if(lumpbuffer) Free( lumpbuffer );
|
||||
}
|
||||
|
||||
bool CompileCurrentSprite( const char *name )
|
||||
{
|
||||
bool load = false;
|
||||
|
@ -360,7 +554,6 @@ bool CompileCurrentSprite( const char *name )
|
|||
if(!ParseSpriteScript())
|
||||
return false;
|
||||
WriteSPRFile();
|
||||
ClearSprite();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
@ -1969,7 +1969,7 @@ syntax: $sequence "seqname"
|
|||
}
|
||||
==============
|
||||
*/
|
||||
int Cmd_Sequence( void )
|
||||
static int Cmd_Sequence( void )
|
||||
{
|
||||
int i, depth = 0;
|
||||
char smdfilename[4][1024];
|
||||
|
|
|
@ -32,14 +32,7 @@ int Lump_GetFileType( const char *name, byte *buf )
|
|||
|
||||
if(!buf) return TYPE_NONE;
|
||||
|
||||
switch(LittleLong(*(uint *)buf))
|
||||
{
|
||||
case IDSPRHLHEADER: return TYPE_SPRITE;
|
||||
case IDSTUDIOHEADER: return TYPE_STUDIO;
|
||||
case DDSHEADER: return TYPE_MIPDDS;
|
||||
}
|
||||
|
||||
// otherwise get file type by extension
|
||||
// get file type by extension
|
||||
if(!com.stricmp( ext, "tga" )) return TYPE_MIPTGA;
|
||||
else if(!com.stricmp( ext, "mip" ))
|
||||
{
|
||||
|
@ -47,6 +40,9 @@ int Lump_GetFileType( const char *name, byte *buf )
|
|||
return TYPE_MIPTEX2; // half-life texture
|
||||
return TYPE_MIPTEX; // quake1 texture
|
||||
}
|
||||
else if(!com.stricmp( ext, "dds" )) return TYPE_MIPDDS; // ms dds
|
||||
else if(!com.stricmp( ext, "mdl" )) return TYPE_STUDIO; // hl mdl
|
||||
else if(!com.stricmp( ext, "spr" )) return TYPE_SPRITE; // spr32
|
||||
else if(!com.stricmp( ext, "lmp" )) return TYPE_QPIC; // hud pics
|
||||
else if(!com.stricmp( ext, "pal" )) return TYPE_QPAL; // palette
|
||||
else if(!com.stricmp( ext, "wav" )) return TYPE_SOUND; // wav sound
|
||||
|
|
|
@ -1,48 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: editor - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP382.tmp" with contents
|
||||
[
|
||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\editor\!debug/" /Fo"..\temp\editor\!debug/" /Fd"..\temp\editor\!debug/" /FD /GZ /c
|
||||
"D:\XASH3D\src_main\!source\editor\editor.c"
|
||||
"D:\XASH3D\src_main\!source\editor\guiforms.c"
|
||||
"D:\XASH3D\src_main\!source\editor\guiutils.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\WINDOWS\Temp\RSP382.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP383.tmp" with contents
|
||||
[
|
||||
msvcrt.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib /nologo /dll /incremental:yes /pdb:"..\temp\editor\!debug/editor.pdb" /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\temp\editor\!debug/editor.dll" /implib:"..\temp\editor\!debug/editor.lib" /pdbtype:sept
|
||||
"\XASH3D\src_main\!source\temp\editor\!debug\editor.obj"
|
||||
"\XASH3D\src_main\!source\temp\editor\!debug\guiforms.obj"
|
||||
"\XASH3D\src_main\!source\temp\editor\!debug\guiutils.obj"
|
||||
"\XASH3D\src_main\!source\temp\editor\!debug\editor.res"
|
||||
]
|
||||
Creating command line "link.exe @C:\WINDOWS\Temp\RSP383.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP384.bat" with contents
|
||||
[
|
||||
@echo off
|
||||
copy \XASH3D\src_main\!source\temp\editor\!debug\editor.dll "D:\Xash3D\bin\editor.dll"
|
||||
]
|
||||
Creating command line "C:\WINDOWS\Temp\RSP384.bat"
|
||||
Compiling...
|
||||
editor.c
|
||||
guiforms.c
|
||||
guiutils.c
|
||||
Generating Code...
|
||||
Linking...
|
||||
<h3>Output Window</h3>
|
||||
Performing Custom Build Step on \XASH3D\src_main\!source\temp\editor\!debug\editor.dll
|
||||
‘ª®¯¨à®¢ ® ä ©«®¢: 1.
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
editor.dll - 0 error(s), 0 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
// cmodel.c -- model loading
|
||||
|
||||
#include "engine.h"
|
||||
#include "basefiles.h"
|
||||
#include "server.h"
|
||||
#include "collision.h"
|
||||
|
||||
|
@ -1806,13 +1807,13 @@ cmodel_t *CM_StudioModel( char *name, edict_t *ent, byte *buffer)
|
|||
cmodel_t *CM_SpriteModel( char *name, edict_t *ent, byte *buffer)
|
||||
{
|
||||
cmodel_t *out;
|
||||
dspritehl_t *phdr;
|
||||
dsprite_t *phdr;
|
||||
|
||||
phdr = (dspritehl_t *)buffer;
|
||||
phdr = (dsprite_t *)buffer;
|
||||
|
||||
if(phdr->version != SPRITEHL_VERSION )
|
||||
if(phdr->version != SPRITE_VERSION )
|
||||
{
|
||||
MsgWarn("CM_SpriteModel: %s has wrong version number (%i should be %i)\n", name, phdr->version, SPRITEHL_VERSION );
|
||||
MsgWarn("CM_SpriteModel: %s has wrong version number (%i should be %i)\n", name, phdr->version, SPRITE_VERSION );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -1871,7 +1872,7 @@ cmodel_t *CM_LoadModel( edict_t *ent )
|
|||
case IDSTUDIOHEADER:
|
||||
mod = CM_StudioModel( name, ent, buffer );
|
||||
break;
|
||||
case IDSPRHLHEADER:
|
||||
case IDSPRITEHEADER:
|
||||
mod = CM_SpriteModel( name, ent, buffer );
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: engine - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP386.tmp" with contents
|
||||
[
|
||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "uimenu" /I "server" /I "client" /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\engine\!debug/" /Fo"..\temp\engine\!debug/" /Fd"..\temp\engine\!debug/" /FD /c
|
||||
"D:\XASH3D\src_main\!source\engine\cg_user.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_cin.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_cmds.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_console.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_ents.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_fx.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_input.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_keys.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_main.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_newfx.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_parse.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_pred.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_scrn.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_sound.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_tent.c"
|
||||
"D:\XASH3D\src_main\!source\engine\client\cl_view.c"
|
||||
"D:\XASH3D\src_main\!source\engine\cmodel.c"
|
||||
"D:\XASH3D\src_main\!source\engine\common.c"
|
||||
"D:\XASH3D\src_main\!source\engine\host.c"
|
||||
"D:\XASH3D\src_main\!source\engine\uimenu\menu.c"
|
||||
"D:\XASH3D\src_main\!source\engine\net_chan.c"
|
||||
"D:\XASH3D\src_main\!source\engine\net_msg.c"
|
||||
"D:\XASH3D\src_main\!source\engine\net_wins.c"
|
||||
"D:\XASH3D\src_main\!source\engine\pmove.c"
|
||||
"D:\XASH3D\src_main\!source\engine\uimenu\qmenu.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_cmds.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_ents.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_init.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_main.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_phys.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_save.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_send.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_spawn.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_studio.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_user.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_utils.c"
|
||||
"D:\XASH3D\src_main\!source\engine\server\sv_world.c"
|
||||
"D:\XASH3D\src_main\!source\engine\system.c"
|
||||
"D:\XASH3D\src_main\!source\engine\uimenu\ui_cmds.c"
|
||||
"D:\XASH3D\src_main\!source\engine\uimenu\ui_main.c"
|
||||
"D:\XASH3D\src_main\!source\engine\vm_cmds.c"
|
||||
"D:\XASH3D\src_main\!source\engine\vm_edict.c"
|
||||
"D:\XASH3D\src_main\!source\engine\vm_exec.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\WINDOWS\Temp\RSP386.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP387.tmp" with contents
|
||||
[
|
||||
winmm.lib user32.lib msvcrt.lib ole32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\engine\!debug/engine.pdb" /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\temp\engine\!debug/engine.dll" /implib:"..\temp\engine\!debug/engine.lib" /pdbtype:sept
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cg_user.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_cin.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_cmds.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_console.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_ents.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_fx.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_input.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_keys.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_main.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_newfx.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_parse.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_pred.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_scrn.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_sound.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_tent.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cl_view.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\cmodel.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\common.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\host.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\menu.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\net_chan.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\net_msg.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\net_wins.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\pmove.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\qmenu.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_cmds.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_ents.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_init.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_main.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_phys.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_save.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_send.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_spawn.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_studio.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_user.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_utils.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\sv_world.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\system.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\ui_cmds.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\ui_main.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\vm_cmds.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\vm_edict.obj"
|
||||
"\XASH3D\src_main\!source\temp\engine\!debug\vm_exec.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\WINDOWS\Temp\RSP387.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP388.bat" with contents
|
||||
[
|
||||
@echo off
|
||||
copy \XASH3D\src_main\!source\temp\engine\!debug\engine.dll "D:\Xash3D\bin\engine.dll"
|
||||
]
|
||||
Creating command line "C:\WINDOWS\Temp\RSP388.bat"
|
||||
Compiling...
|
||||
cg_user.c
|
||||
cl_cin.c
|
||||
cl_cmds.c
|
||||
cl_console.c
|
||||
cl_ents.c
|
||||
cl_fx.c
|
||||
cl_input.c
|
||||
cl_keys.c
|
||||
cl_main.c
|
||||
cl_newfx.c
|
||||
cl_parse.c
|
||||
cl_pred.c
|
||||
cl_scrn.c
|
||||
cl_sound.c
|
||||
cl_tent.c
|
||||
cl_view.c
|
||||
cmodel.c
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1809) : error C2065: 'dsprite_t' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1809) : error C2065: 'phdr' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1809) : warning C4552: '*' : operator has no effect; expected operator with side-effect
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1811) : error C2059: syntax error : ')'
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1813) : error C2223: left of '->version' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1813) : error C2065: 'SPRITE_VERSION' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1815) : error C2223: left of '->version' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1820) : error C2223: left of '->numframes' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1825) : error C2223: left of '->width' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1826) : error C2223: left of '->width' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1827) : error C2223: left of '->height' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1828) : error C2223: left of '->height' must point to struct/union
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1834) : error C2143: syntax error : missing '{' before '*'
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1835) : error C2371: 'CM_LoadModel' : redefinition; different basic types
|
||||
d:\xash3d\src_main\!source\engine\collision.h(32) : see declaration of 'CM_LoadModel'
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1844) : warning C4133: 'return' : incompatible types - from 'struct cmodel_s *' to 'int *'
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1850) : warning C4133: 'return' : incompatible types - from 'struct cmodel_s *' to 'int *'
|
||||
d:\xash3d\src_main\!source\engine\cmodel.c(1878) : warning C4133: 'return' : incompatible types - from 'struct cmodel_s *' to 'int *'
|
||||
common.c
|
||||
host.c
|
||||
menu.c
|
||||
Generating Code...
|
||||
Compiling...
|
||||
net_chan.c
|
||||
net_msg.c
|
||||
net_wins.c
|
||||
pmove.c
|
||||
qmenu.c
|
||||
sv_cmds.c
|
||||
sv_ents.c
|
||||
sv_init.c
|
||||
sv_main.c
|
||||
sv_phys.c
|
||||
sv_save.c
|
||||
sv_send.c
|
||||
sv_spawn.c
|
||||
sv_studio.c
|
||||
sv_user.c
|
||||
sv_utils.c
|
||||
sv_world.c
|
||||
system.c
|
||||
ui_cmds.c
|
||||
ui_main.c
|
||||
Generating Code...
|
||||
Compiling...
|
||||
vm_cmds.c
|
||||
vm_edict.c
|
||||
vm_exec.c
|
||||
Generating Code...
|
||||
Error executing cl.exe.
|
||||
<h3>Output Window</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
engine.dll - 13 error(s), 4 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -196,6 +196,8 @@ void RunConvertor ( void )
|
|||
|
||||
void CloseConvertor( void )
|
||||
{
|
||||
// finalize qc-script
|
||||
Skin_FinalizeScript();
|
||||
Mem_Check(); // check for leaks
|
||||
Mem_FreePool( &basepool );
|
||||
Mem_FreePool( &zonepool );
|
||||
|
|
|
@ -4,6 +4,46 @@
|
|||
//=======================================================================
|
||||
|
||||
#include "idconv.h"
|
||||
#include "mathlib.h"
|
||||
#include "basefiles.h"
|
||||
|
||||
/*
|
||||
========================================================================
|
||||
|
||||
.SPR sprite file format
|
||||
|
||||
========================================================================
|
||||
*/
|
||||
#define IDSPRQ1HEADER (('P'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDSP"
|
||||
|
||||
#define SPRITEQ1_VERSION 1
|
||||
#define SPRITEHL_VERSION 2
|
||||
#define SPRITE32_VERSION 32
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident;
|
||||
int version;
|
||||
int type;
|
||||
int texFormat; // Half-Life stuff only
|
||||
float boundingradius; // software rendering stuff
|
||||
int width;
|
||||
int height;
|
||||
int numframes;
|
||||
float beamlength; // software rendering stuff
|
||||
synctype_t synctype;
|
||||
} dspritehl_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int origin[2];
|
||||
int width;
|
||||
int height;
|
||||
} dspriteframe_t;
|
||||
|
||||
//
|
||||
// sprite_decompiler.c
|
||||
//
|
||||
|
||||
int spr_type;
|
||||
int spr_texFormat;
|
||||
|
@ -13,17 +53,18 @@ int spr_numframes;
|
|||
int spr_sequence;
|
||||
byte spr_palette[256][4];
|
||||
bool spr_truecolor = false;
|
||||
float spr_framerate = 15.0f;
|
||||
string spr_framenames[256];
|
||||
string spr_groupnames[256];
|
||||
vec2_t spr_origin[256];
|
||||
vec2_t spr_size[256];
|
||||
|
||||
const char *SPR_RenderMode( void )
|
||||
{
|
||||
switch( spr_texFormat )
|
||||
{
|
||||
case SPR_ADDGLOW: return "glow";
|
||||
case SPR_ALPHTEST: return "decal";
|
||||
case SPR_INDEXALPHA: return "decal";
|
||||
case SPR_ALPHTEST: return "alphatest";
|
||||
case SPR_INDEXALPHA: return "indexalpha";
|
||||
case SPR_ADDITIVE: return "additive";
|
||||
case SPR_NORMAL: return "normal";
|
||||
default: return "normal";
|
||||
|
@ -64,7 +105,7 @@ void *SPR_ConvertFrame( const char *name, void *pin, int framenum )
|
|||
fout = Mem_Alloc( zonepool, width * height * 4 );
|
||||
// extract sprite name from path
|
||||
FS_FileBase( name, framename );
|
||||
com.strcat( framename, va("_#%i%i", framenum/10, framenum%10 ));
|
||||
com.strcat( framename, va("_%i", framenum ));
|
||||
memset( &pix, 0, sizeof(pix));
|
||||
|
||||
if( spr_truecolor )
|
||||
|
@ -91,6 +132,8 @@ void *SPR_ConvertFrame( const char *name, void *pin, int framenum )
|
|||
com.strncpy( spr_framenames[framenum], framename, MAX_STRING );
|
||||
spr_origin[framenum][0] = (float)LittleLong(pinframe->origin[0]);
|
||||
spr_origin[framenum][1] = (float)LittleLong(pinframe->origin[1]);
|
||||
spr_size[framenum][0] = (float)LittleLong(pinframe->width);
|
||||
spr_size[framenum][1] = (float)LittleLong(pinframe->height);
|
||||
|
||||
// preparing for write
|
||||
pix.width = width;
|
||||
|
@ -121,13 +164,9 @@ void *SPR_ConvertGroup( const char *name, void *pin, int framenum )
|
|||
numframes = LittleLong( pingroup->numframes );
|
||||
pin_intervals = (dspriteinterval_t *)(pingroup + 1);
|
||||
|
||||
for (i = 0; i < numframes; i++)
|
||||
for (i = 0; i < numframes; i++)
|
||||
{
|
||||
if(LittleFloat(pin_intervals->interval) <= 0.0)
|
||||
{
|
||||
Sys_Break("negative interval!\n");
|
||||
return NULL; // negate interval
|
||||
}
|
||||
//Msg("frame %d, interval %g\n", i, *pin_intervals );
|
||||
pin_intervals++;
|
||||
}
|
||||
|
||||
|
@ -145,40 +184,34 @@ void *SPR_ConvertGroup( const char *name, void *pin, int framenum )
|
|||
bool SPR_WriteScript( const char *name )
|
||||
{
|
||||
int i;
|
||||
file_t *f = FS_Open( va("%s/sprites/%s.txt", gs_gamedir, name ), "w" );
|
||||
file_t *f = FS_Open( va("%s/sprites/%s.qc", gs_gamedir, name ), "w" );
|
||||
|
||||
if( !f )
|
||||
{
|
||||
Msg("Can't write sprite header \"%s.txt\"\n", name );
|
||||
Msg("Can't generate qc-script \"%s.qc\"\n", name );
|
||||
return false;
|
||||
}
|
||||
|
||||
// description
|
||||
FS_Printf(f,"//=======================================================================\n");
|
||||
FS_Printf(f,"//\t\t\tCopyright XashXT Group 2007 ©\n");
|
||||
FS_Printf(f,"//\t\t\t%s.spr - Xash Sprite Format\n", name );
|
||||
FS_Printf(f,"//\t\t\twritten by Xash Miptex Decompiler\n", name );
|
||||
FS_Printf(f,"//=======================================================================\n");
|
||||
|
||||
// sprite header
|
||||
FS_Printf(f,"\nheader \"%s\"\n{\n\ttype\t\"%s\"\n\trender\t\"%s\"\n",name,SPR_RenderType(),SPR_RenderMode());
|
||||
FS_Printf(f,"\tframerate\t\"%.1f\"\n\tsequence\t\"%d\"\n}\n", spr_framerate, spr_sequence );
|
||||
FS_Printf(f, "\n$spritename\t%s.spr\n", name );
|
||||
FS_Printf(f, "$type\t\t%s\n",SPR_RenderType());
|
||||
FS_Printf(f, "$texture\t\t%s\n",SPR_RenderMode());
|
||||
|
||||
// frames description
|
||||
FS_Printf(f,"\nframes \"%s\"\n{\n", name );
|
||||
|
||||
for( i = 0; i < spr_numframes; i++)
|
||||
{
|
||||
FS_Printf(f,"\tframe\t\"sprites/%s\"", spr_framenames[i] );
|
||||
FS_Printf(f,"$load\t\t%s.tga\n", spr_framenames[i] );
|
||||
FS_Printf(f,"$frame\t\t0 0 %.f %.f", spr_size[i][0], spr_size[i][1] );
|
||||
if(!spr_origin[i][0] && !spr_origin[i][1]) FS_Print(f, "\n" );
|
||||
else FS_Printf(f, "\t%d\t%d\n", (int)spr_origin[i][0], (int)spr_origin[i][1] );
|
||||
else FS_Printf(f, " %.1f %.f %.f\n", 0.1f, fabs(spr_origin[i][0]), spr_origin[i][1] );
|
||||
}
|
||||
FS_Print(f,"}\n" );
|
||||
FS_Printf(f,"\nsequence 0\n{\n\tpattern\t" ); // default sequence
|
||||
|
||||
if(spr_numframes > 1) FS_Printf(f,"\"%d..%d\"", 0, spr_numframes - 1 );
|
||||
else FS_Print(f,"\"0\"" );
|
||||
FS_Print(f,"\n}\n" );
|
||||
|
||||
FS_Print(f,"\n" );
|
||||
FS_Close(f);
|
||||
Msg("%s.spr\n", name ); // echo to console about current sprite
|
||||
return true;
|
||||
|
@ -201,7 +234,7 @@ bool ConvSPR( const char *name, char *buffer, int filesize )
|
|||
pin = (dsprite_t *)buffer;
|
||||
version = LittleLong( pin->version );
|
||||
|
||||
if( pin->ident != IDSPRHLHEADER )
|
||||
if( pin->ident != IDSPRQ1HEADER )
|
||||
{
|
||||
Msg("\"%s.spr\" have invalid header\n", name );
|
||||
return false;
|
||||
|
@ -224,7 +257,7 @@ bool ConvSPR( const char *name, char *buffer, int filesize )
|
|||
break;
|
||||
case SPRITE32_VERSION:
|
||||
spr_numframes = LittleLong( pin->numframes );
|
||||
spr_texFormat = SPR_INDEXALPHA; // constant
|
||||
spr_texFormat = SPR_ADDITIVE; // constant
|
||||
spr_type = LittleLong( pin->type );
|
||||
spr_width = LittleLong( pin->width );
|
||||
spr_height = LittleLong( pin->height );
|
||||
|
|
|
@ -12,6 +12,9 @@
|
|||
|
||||
========================================================================
|
||||
*/
|
||||
#define SPRITEQ2_VERSION 2
|
||||
#define IDSPRQ2HEADER (('2'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDS2"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int width;
|
||||
|
@ -29,6 +32,10 @@ typedef struct
|
|||
dsprframeq2_t frames[1]; // variable sized
|
||||
} dspriteq2_t;
|
||||
|
||||
//
|
||||
// sprite2_decompiler.c
|
||||
//
|
||||
|
||||
int sprq2_width = 1;
|
||||
int sprq2_height = 1;
|
||||
int sprq2_numframes = 1;
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
//=======================================================================
|
||||
|
||||
#include "idconv.h"
|
||||
#include "mathlib.h"
|
||||
|
||||
/*
|
||||
============
|
||||
|
@ -25,6 +26,172 @@ bool ConvPAL( char *name, char *buffer, int filesize )
|
|||
return true;
|
||||
}
|
||||
|
||||
typedef struct angled_s
|
||||
{
|
||||
char name[10]; // copy of skin name
|
||||
|
||||
int width; // lumpwidth
|
||||
int height; // lumpheight
|
||||
int origin[2]; // monster origin
|
||||
byte xmirrored; // swap left and right
|
||||
} angled_t;
|
||||
|
||||
struct angledframe_s
|
||||
{
|
||||
angled_t frame[8]; // angled group or single frame
|
||||
byte angledframes; // count of angled frames max == 8
|
||||
byte normalframes; // count of anim frames max == 1
|
||||
|
||||
char membername[8]; // current model name, four characsters
|
||||
char animation; // current animation number
|
||||
bool in_progress; // current state
|
||||
} qc;
|
||||
|
||||
file_t *f;
|
||||
|
||||
void Skin_WriteSequence( void )
|
||||
{
|
||||
int i;
|
||||
|
||||
// time to dump frames :)
|
||||
if( qc.angledframes == 8 )
|
||||
{
|
||||
// angled group is full, dump it!
|
||||
FS_Print(f, "\n$angled\n{\n" );
|
||||
for( i = 0; i < 8; i++)
|
||||
{
|
||||
FS_Printf(f,"\t$load\t\t%s.tga\n", qc.frame[i].name );
|
||||
FS_Printf(f,"\t$frame\t\t0 0 %d %d", qc.frame[i].width, qc.frame[i].height );
|
||||
FS_Printf(f, " 0.1 %d %d", qc.frame[i].origin[0], qc.frame[i].origin[1]);
|
||||
if( qc.frame[i].xmirrored ) FS_Print(f, "\tflip_x\n" );
|
||||
else FS_Print(f, "\n" );
|
||||
}
|
||||
FS_Print(f, "}\n" );
|
||||
}
|
||||
else if( qc.normalframes == 1 )
|
||||
{
|
||||
Msg("write %s\n", qc.frame[0].name );
|
||||
|
||||
// single frame stored
|
||||
FS_Print(f, "\n" );
|
||||
FS_Printf(f,"$load\t\t%s.tga\n", qc.frame[0].name );
|
||||
FS_Printf(f,"$frame\t\t0 0 %d %d", qc.frame[0].width, qc.frame[0].height );
|
||||
FS_Printf(f, " 0.1 %d %d\n", qc.frame[0].origin[0], qc.frame[0].origin[1]);
|
||||
}
|
||||
|
||||
memset( &qc.frame, 0, sizeof(qc.frame));
|
||||
qc.angledframes = qc.normalframes = 0; // clear all
|
||||
}
|
||||
|
||||
void Skin_FindSequence( const char *name, rgbdata_t *pic )
|
||||
{
|
||||
int num, headlen;
|
||||
char header[8];
|
||||
|
||||
// create header from flat name
|
||||
com.strncpy( header, name, 9 );
|
||||
headlen = com.strlen( name );
|
||||
|
||||
if( qc.animation != header[4] )
|
||||
{
|
||||
// write animation
|
||||
Skin_WriteSequence();
|
||||
qc.animation = header[4];
|
||||
}
|
||||
|
||||
if( qc.animation == header[4] )
|
||||
{
|
||||
// continue collect frames
|
||||
if( headlen == 6 )
|
||||
{
|
||||
num = header[5] - '0';
|
||||
if(num == 0) qc.normalframes++; // animation frame
|
||||
if(num == 8) num = 0; // merge
|
||||
qc.angledframes++; // angleframe stored
|
||||
com.strncpy( qc.frame[num].name, header, 9 );
|
||||
qc.frame[num].width = pic->width;
|
||||
qc.frame[num].height = pic->height;
|
||||
qc.frame[num].origin[0] = pic->width>>1; // center
|
||||
qc.frame[num].origin[1] = pic->height; // floor
|
||||
qc.frame[num].xmirrored = false;
|
||||
}
|
||||
else if( headlen == 8 )
|
||||
{
|
||||
// normal image
|
||||
num = header[5] - '0';
|
||||
if(num == 8) num = 0; // merge
|
||||
com.strncpy( qc.frame[num].name, header, 9 );
|
||||
qc.frame[num].width = pic->width;
|
||||
qc.frame[num].height = pic->height;
|
||||
qc.frame[num].origin[0] = pic->width>>1; // center
|
||||
qc.frame[num].origin[1] = pic->height; // floor
|
||||
qc.frame[num].xmirrored = false;
|
||||
qc.angledframes++; // frame stored
|
||||
|
||||
// mirrored image
|
||||
num = header[7] - '0'; // angle it's a direct acess to group
|
||||
if(num == 8) num = 0; // merge
|
||||
com.strncpy( qc.frame[num].name, header, 9 );
|
||||
qc.frame[num].width = pic->width;
|
||||
qc.frame[num].height = pic->height;
|
||||
qc.frame[num].origin[0] = pic->width>>1; // center
|
||||
qc.frame[num].origin[1] = pic->height; // floor
|
||||
qc.frame[num].xmirrored = true; // it's mirror frame
|
||||
qc.angledframes++; // frame stored
|
||||
}
|
||||
else Sys_Break("Skin_CreateScript: invalid name %s\n", name );
|
||||
}
|
||||
}
|
||||
|
||||
void Skin_ProcessScript( const char *name )
|
||||
{
|
||||
if(qc.in_progress )
|
||||
{
|
||||
// finish script
|
||||
Skin_WriteSequence();
|
||||
FS_Close( f );
|
||||
qc.in_progress = false;
|
||||
}
|
||||
if(!qc.in_progress )
|
||||
{
|
||||
// start from scratch
|
||||
com.strncpy( qc.membername, name, 5 );
|
||||
f = FS_Open( va("%s/models/%s.qc", gs_gamedir, qc.membername ), "w" );
|
||||
qc.in_progress = true;
|
||||
|
||||
// write description
|
||||
FS_Print(f,"//=======================================================================\n");
|
||||
FS_Print(f,"//\t\t\tCopyright XashXT Group 2007 ©\n");
|
||||
FS_Print(f,"//\t\t\twritten by Xash Miptex Decompiler\n");
|
||||
FS_Print(f,"//=======================================================================\n");
|
||||
|
||||
// write sprite header
|
||||
FS_Printf(f, "\n$spritename\t%s.spr\n", qc.membername );
|
||||
FS_Print(f, "$type\t\tvp_parallel\n" ); // constant
|
||||
FS_Print(f, "$texture\t\tindexalpha\n");
|
||||
Msg("open script %s\n", qc.membername );
|
||||
}
|
||||
}
|
||||
|
||||
void Skin_FinalizeScript( void )
|
||||
{
|
||||
if(!qc.in_progress ) return;
|
||||
|
||||
// finish script
|
||||
Skin_WriteSequence();
|
||||
FS_Close( f );
|
||||
qc.in_progress = false;
|
||||
}
|
||||
|
||||
void Skin_CreateScript( const char *name, rgbdata_t *pic )
|
||||
{
|
||||
if(com.strnicmp( name, qc.membername, 4 ))
|
||||
Skin_ProcessScript( name );
|
||||
|
||||
if( qc.in_progress )
|
||||
Skin_FindSequence( name, pic );
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
ConvFLT
|
||||
|
@ -115,8 +282,8 @@ bool ConvSKN( const char *name, char *buffer, int filesize )
|
|||
{
|
||||
string skinpath;
|
||||
FS_FileBase( name, skinpath );
|
||||
FS_SaveImage(va("%s/textures/skins/%s.tga", gs_gamedir, skinpath ), pic );
|
||||
Conv_CreateShader( name, pic, NULL, 0, 0 );
|
||||
FS_SaveImage(va("%s/models/%s.tga", gs_gamedir, skinpath ), pic );
|
||||
Skin_CreateScript( skinpath, pic );
|
||||
Mem_Free( pic->buffer ); // release buffer
|
||||
Mem_Free( pic ); // release buffer
|
||||
Msg("%s.skin\n", skinpath ); // echo to console about current skin
|
||||
|
|
|
@ -41,6 +41,7 @@ bool ConvBSP( const char *name, char *buffer, int filesize );
|
|||
#define LUMP_DECAL 2
|
||||
#define LUMP_QFONT 3
|
||||
|
||||
void Skin_FinalizeScript( void );
|
||||
bool PCX_ConvertImage( const char *name, char *buffer, int filesize );
|
||||
bool Lump_ValidSize( char *name, rgbdata_t *pic, int maxwidth, int maxheight );
|
||||
bool Conv_Copy8bitRGBA(const byte *in, byte *out, int pixels);
|
||||
|
|
|
@ -317,12 +317,11 @@ byte *Image_Resample(uint *in, int inwidth, int inheight, int outwidth, int outh
|
|||
return (byte *)out;
|
||||
}
|
||||
|
||||
bool Image_Processing( const char *name, rgbdata_t **pix )
|
||||
bool Image_Processing( const char *name, rgbdata_t **pix, int width, int height )
|
||||
{
|
||||
int w, h;
|
||||
rgbdata_t *image = *pix;
|
||||
byte *out;
|
||||
char width[4], height[4];
|
||||
|
||||
// check for buffers
|
||||
if(!image || !image->buffer) return false;
|
||||
|
@ -330,11 +329,11 @@ bool Image_Processing( const char *name, rgbdata_t **pix )
|
|||
w = image->width;
|
||||
h = image->height;
|
||||
|
||||
if(FS_GetParmFromCmdLine("-w", width ) && FS_GetParmFromCmdLine("-h", height ))
|
||||
if(width && height)
|
||||
{
|
||||
// custom size
|
||||
w = bound(4, atoi(width), 1024 ); // maxwidth 1024
|
||||
h = bound(4, atoi(height), 1024); // maxheight 1024
|
||||
w = bound(4, width, 1024 ); // maxwidth 1024
|
||||
h = bound(4, height, 1024); // maxheight 1024
|
||||
}
|
||||
else Image_RoundDimensions( &w, &h ); // auto detect new size
|
||||
|
||||
|
|
|
@ -44,8 +44,7 @@ bool SC_AddScriptToStack(const char *name, byte *buffer, int size)
|
|||
|
||||
script++;
|
||||
com_strncpy(script->filename, name, sizeof(script->filename));
|
||||
script->buffer = Mem_Alloc( Sys.basepool, size );
|
||||
Mem_Move( Sys.basepool, &script->buffer, buffer, size );
|
||||
script->buffer = buffer;
|
||||
script->line = scriptline = 1;
|
||||
script->script_p = script->buffer;
|
||||
script->end_p = script->buffer + size;
|
||||
|
|
|
@ -245,7 +245,7 @@ bool FS_WriteFile (const char *filename, void *data, fs_offset_t len);
|
|||
rgbdata_t *FS_LoadImage(const char *filename, char *data, int size );
|
||||
void FS_SaveImage(const char *filename, rgbdata_t *buffer );
|
||||
void FS_FreeImage( rgbdata_t *pack );
|
||||
bool Image_Processing( const char *name, rgbdata_t **pix );
|
||||
bool Image_Processing( const char *name, rgbdata_t **pix, int width, int height );
|
||||
search_t *FS_Search(const char *pattern, int caseinsensitive );
|
||||
search_t *FS_SearchDirs(const char *pattern, int caseinsensitive );
|
||||
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: physic - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP39A.tmp" with contents
|
||||
[
|
||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\physic\!debug/" /Fo"..\temp\physic\!debug/" /Fd"..\temp\physic\!debug/" /FD /GZ /c
|
||||
"D:\XASH3D\src_main\!source\physic\cm_collision.c"
|
||||
"D:\XASH3D\src_main\!source\physic\physic.c"
|
||||
"D:\XASH3D\src_main\!source\physic\utils.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\WINDOWS\Temp\RSP39A.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP39B.tmp" with contents
|
||||
[
|
||||
user32.lib msvcrtd.lib newton.lib opengl32.lib /nologo /dll /incremental:yes /pdb:"..\temp\physic\!debug/physic.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /out:"..\temp\physic\!debug/physic.dll" /implib:"..\temp\physic\!debug/physic.lib" /pdbtype:sept /libpath:"../public/libs/"
|
||||
"\XASH3D\src_main\!source\temp\physic\!debug\cm_collision.obj"
|
||||
"\XASH3D\src_main\!source\temp\physic\!debug\physic.obj"
|
||||
"\XASH3D\src_main\!source\temp\physic\!debug\utils.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\WINDOWS\Temp\RSP39B.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP39C.bat" with contents
|
||||
[
|
||||
@echo off
|
||||
copy \XASH3D\src_main\!source\temp\physic\!debug\physic.dll "D:\Xash3D\bin\physic.dll"
|
||||
]
|
||||
Creating command line "C:\WINDOWS\Temp\RSP39C.bat"
|
||||
Compiling...
|
||||
cm_collision.c
|
||||
d:\xash3d\src_main\!source\physic\cm_collision.c(184) : warning C4101: 'i' : unreferenced local variable
|
||||
physic.c
|
||||
utils.c
|
||||
d:\xash3d\src_main\!source\physic\utils.c(66) : warning C4101: 'ang2' : unreferenced local variable
|
||||
d:\xash3d\src_main\!source\physic\utils.c(64) : warning C4101: 'vertices' : unreferenced local variable
|
||||
d:\xash3d\src_main\!source\physic\utils.c(65) : warning C4101: 'numvertices' : unreferenced local variable
|
||||
d:\xash3d\src_main\!source\physic\utils.c(66) : warning C4101: 'org2' : unreferenced local variable
|
||||
d:\xash3d\src_main\!source\physic\utils.c(66) : warning C4101: 'rot' : unreferenced local variable
|
||||
Generating Code...
|
||||
Linking...
|
||||
<h3>Output Window</h3>
|
||||
Performing Custom Build Step on \XASH3D\src_main\!source\temp\physic\!debug\physic.dll
|
||||
‘ª®¯¨à®¢ ® ä ©«®¢: 1.
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
physic.dll - 0 error(s), 6 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
|
@ -68,7 +68,6 @@ void() monster_army = {remove(pev);};
|
|||
void() monster_wizard = {remove(pev);};
|
||||
void() monster_dog = {remove(pev);};
|
||||
void() monster_zombie = {remove(pev);};
|
||||
void() monster_boss = {remove(pev);};
|
||||
void() monster_tarbaby = {remove(pev);};
|
||||
void() monster_hell_knight = {remove(pev);};
|
||||
void() monster_fish = {remove(pev);};
|
||||
|
@ -193,4 +192,13 @@ void env_sprite( void )
|
|||
pev->movetype = MOVETYPE_NONE;
|
||||
setmodel (pev, "sprites/explode01.spr");
|
||||
pev->frame = 5;
|
||||
}
|
||||
|
||||
void env_monster( void )
|
||||
{
|
||||
precache_model ("sprites/boss.spr");
|
||||
pev->owner = pev;
|
||||
pev->solid = SOLID_NOT;
|
||||
pev->movetype = MOVETYPE_NONE;
|
||||
setmodel (pev, "sprites/boss.spr");
|
||||
}
|
|
@ -8,35 +8,64 @@
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
.aur particle file format
|
||||
SPRITE MODELS
|
||||
|
||||
.spr extended version (non-paletted 32-bit sprites with zlib-compression for each frame)
|
||||
==============================================================================
|
||||
*/
|
||||
#define IDAURORAHEADER (('R'<<24)+('U'<<16)+('A'<<8)+'I') // little-endian "IAUR"
|
||||
#define AURORA_VERSION 1
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int width, height;
|
||||
int origin_x, origin_y; // raster coordinates inside pic
|
||||
char name[MAX_SKINNAME]; // name of pcx file
|
||||
} daurframe_t;
|
||||
#define IDSPRITEHEADER (('R'<<24)+('P'<<16)+('S'<<8)+'I') // little-endian "ISPR"
|
||||
#define SPRITE_VERSION 3
|
||||
|
||||
#define SPR_VP_PARALLEL_UPRIGHT 0
|
||||
#define SPR_FACING_UPRIGHT 1
|
||||
#define SPR_VP_PARALLEL 2
|
||||
#define SPR_ORIENTED 3 // all axis are valid
|
||||
#define SPR_VP_PARALLEL_ORIENTED 4
|
||||
|
||||
#define SPR_NORMAL 0 // solid sprite
|
||||
#define SPR_ADDITIVE 1
|
||||
#define SPR_INDEXALPHA 2
|
||||
#define SPR_ALPHTEST 3
|
||||
#define SPR_ADDGLOW 4 // same as additive, but without depthtest
|
||||
|
||||
typedef enum { ST_SYNC = 0, ST_RAND } synctype_t;
|
||||
typedef enum { SPR_SINGLE = 0, SPR_GROUP, SPR_ANGLED } frametype_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident;
|
||||
int version;
|
||||
int type;
|
||||
int rendermode; // was boundingradius
|
||||
int width;
|
||||
int height;
|
||||
int numframes;
|
||||
float beamlength; // not used
|
||||
synctype_t synctype;
|
||||
} dsprite_t;
|
||||
|
||||
// aurora description
|
||||
float startcolor[3]; // RGBA
|
||||
float finalcolor[3]; // RGBA
|
||||
float startalpha; // alpha-value
|
||||
float finalalpha;
|
||||
float framerate;
|
||||
byte rendermode;
|
||||
typedef struct
|
||||
{
|
||||
int origin[2];
|
||||
int width;
|
||||
int height;
|
||||
int compsize;
|
||||
} dframe_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numframes;
|
||||
} dspritegroup_t;
|
||||
|
||||
dsprframe_t frames[1]; // variable sized
|
||||
} daurora_t;
|
||||
typedef struct
|
||||
{
|
||||
float interval;
|
||||
} dspriteinterval_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
frametype_t type;
|
||||
} dframetype_t;
|
||||
|
||||
#endif//BASE_FILES_H
|
|
@ -146,7 +146,7 @@ typedef struct stdilib_api_s
|
|||
bool (*Com_WriteFile)(const char *path, void *data, long len); // write file into disk
|
||||
rgbdata_t *(*Com_LoadImage)(const char *path, char *data, int size ); // extract image into rgba buffer
|
||||
void (*Com_SaveImage)(const char *filename, rgbdata_t *buffer ); // save image into specified format
|
||||
bool (*Com_ProcessImage)( const char *name, rgbdata_t **pix ); // convert and resample image
|
||||
bool (*Com_ProcessImage)( const char *name, rgbdata_t **pix, int w, int h ); // resample image
|
||||
void (*Com_FreeImage)( rgbdata_t *pack ); // free image buffer
|
||||
bool (*Com_LoadLibrary)( dll_info_t *dll ); // load library
|
||||
bool (*Com_FreeLibrary)( dll_info_t *dll ); // free library
|
||||
|
|
|
@ -75,89 +75,6 @@ typedef struct roq_s
|
|||
/*
|
||||
==============================================================================
|
||||
|
||||
SPRITE MODELS
|
||||
==============================================================================
|
||||
*/
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
.spr Half-Life sprites
|
||||
==============================================================================
|
||||
*/
|
||||
#define SPRITEQ1_VERSION 1
|
||||
#define SPRITEQ2_VERSION 2
|
||||
#define SPRITEHL_VERSION 2
|
||||
#define SPRITE32_VERSION 32
|
||||
#define IDSPRHLHEADER (('P'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDSP"
|
||||
#define IDSPRQ2HEADER (('2'<<24)+('S'<<16)+('D'<<8)+'I') // little-endian "IDS2"
|
||||
|
||||
#define SPR_VP_PARALLEL_UPRIGHT 0
|
||||
#define SPR_FACING_UPRIGHT 1
|
||||
#define SPR_VP_PARALLEL 2
|
||||
#define SPR_ORIENTED 3 // all axis are valid
|
||||
#define SPR_VP_PARALLEL_ORIENTED 4
|
||||
|
||||
#define SPR_NORMAL 0 // solid sprite
|
||||
#define SPR_ADDITIVE 1
|
||||
#define SPR_INDEXALPHA 2
|
||||
#define SPR_ALPHTEST 3
|
||||
#define SPR_ADDGLOW 4 // same as additive, but without depthtest
|
||||
|
||||
typedef enum { ST_SYNC = 0, ST_RAND } synctype_t;
|
||||
typedef enum { SPR_SINGLE = 0, SPR_GROUP } frametype_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident;
|
||||
int version;
|
||||
int type;
|
||||
float boundingradius;
|
||||
int width;
|
||||
int height;
|
||||
int numframes;
|
||||
float beamlength;
|
||||
synctype_t synctype;
|
||||
} dsprite_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int ident;
|
||||
int version;
|
||||
int type;
|
||||
int texFormat; // Half-Life stuff only
|
||||
float boundingradius; // software rendering stuff
|
||||
int width;
|
||||
int height;
|
||||
int numframes;
|
||||
float beamlength; // software rendering stuff
|
||||
synctype_t synctype;
|
||||
} dspritehl_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int origin[2];
|
||||
int width;
|
||||
int height;
|
||||
} dspriteframe_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int numframes;
|
||||
} dspritegroup_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
float interval;
|
||||
} dspriteinterval_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
frametype_t type;
|
||||
} dframetype_t;
|
||||
|
||||
/*
|
||||
==============================================================================
|
||||
|
||||
STUDIO MODELS
|
||||
|
||||
Studio models are position independent, so the cache manager can move them.
|
||||
|
|
|
@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
// models.c -- model loading and caching
|
||||
|
||||
#include "gl_local.h"
|
||||
#include "basefiles.h"
|
||||
|
||||
model_t *loadmodel;
|
||||
int modfilelen;
|
||||
|
@ -251,7 +252,7 @@ model_t *Mod_ForName(char *name, bool crash)
|
|||
case IDSTUDIOHEADER:
|
||||
Mod_LoadStudioModel ( mod, buf );
|
||||
break;
|
||||
case IDSPRHLHEADER:
|
||||
case IDSPRITEHEADER:
|
||||
Mod_LoadSpriteModel ( mod, buf );
|
||||
break;
|
||||
default:
|
||||
|
|
|
@ -18,6 +18,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
*/
|
||||
|
||||
#include "basefiles.h"
|
||||
|
||||
/*
|
||||
|
||||
d*_t structures are on-disk representations
|
||||
|
@ -42,7 +44,14 @@ typedef struct mspriteframe_s
|
|||
|
||||
typedef struct
|
||||
{
|
||||
int frametype;
|
||||
int numframes;
|
||||
float *intervals;
|
||||
mspriteframe_t *frames[1];
|
||||
} mspritegroup_t;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
frametype_t type;
|
||||
mspriteframe_t *frameptr;
|
||||
} mspriteframedesc_t;
|
||||
|
||||
|
@ -53,8 +62,6 @@ typedef struct
|
|||
int maxwidth;
|
||||
int maxheight;
|
||||
int numframes;
|
||||
float framerate;
|
||||
vec4_t rgba;
|
||||
mspriteframedesc_t frames[1];
|
||||
} msprite_t;
|
||||
|
||||
|
|
|
@ -12,86 +12,122 @@
|
|||
|
||||
=============================================================
|
||||
*/
|
||||
|
||||
/*
|
||||
====================
|
||||
Sprite model loader
|
||||
====================
|
||||
*/
|
||||
void *R_SpriteLoadFrame (model_t *mod, void *pin, mspriteframe_t **ppframe, int framenum, byte *pal )
|
||||
dframetype_t *R_SpriteLoadFrame( model_t *mod, void *pin, mspriteframe_t **ppframe, int framenum )
|
||||
{
|
||||
dspriteframe_t *pinframe;
|
||||
dframe_t *pinframe;
|
||||
mspriteframe_t *pspriteframe;
|
||||
int width, height, size, origin[2];
|
||||
char name[64];
|
||||
rgbdata_t r_frame;
|
||||
rgbdata_t *spr_frame;
|
||||
image_t *image;
|
||||
|
||||
pinframe = (dspriteframe_t *)pin;
|
||||
pinframe = (dframe_t *)pin;
|
||||
|
||||
width = LittleLong (pinframe->width);
|
||||
height = LittleLong (pinframe->height);
|
||||
size = width * height;
|
||||
size = width * height * 4;
|
||||
|
||||
pspriteframe = Mem_Alloc(mod->mempool, sizeof (mspriteframe_t));
|
||||
memset (pspriteframe, 0, sizeof (mspriteframe_t));
|
||||
|
||||
spr_frame = (rgbdata_t *)Mem_Alloc( mod->mempool, sizeof(rgbdata_t));
|
||||
*ppframe = pspriteframe;
|
||||
|
||||
pspriteframe->width = r_frame.width = width;
|
||||
pspriteframe->height = r_frame.height = height;
|
||||
origin[0] = LittleLong (pinframe->origin[0]);
|
||||
origin[1] = LittleLong (pinframe->origin[1]);
|
||||
pspriteframe->width = spr_frame->width = width;
|
||||
pspriteframe->height = spr_frame->height = height;
|
||||
origin[0] = LittleLong(pinframe->origin[0]);
|
||||
origin[1] = LittleLong(pinframe->origin[1]);
|
||||
|
||||
pspriteframe->up = origin[1];
|
||||
pspriteframe->down = origin[1] - height;
|
||||
pspriteframe->left = origin[0];
|
||||
pspriteframe->right = width + origin[0];
|
||||
pspriteframe->texnum = 0;
|
||||
r_frame.type = PF_INDEXED_32;
|
||||
r_frame.numMips = 1;
|
||||
r_frame.flags = IMAGE_HAS_ALPHA;
|
||||
spr_frame->type = PF_RGBA_32;
|
||||
spr_frame->flags = IMAGE_HAS_ALPHA;
|
||||
spr_frame->numMips = 1;
|
||||
|
||||
// extract sprite name from path
|
||||
FS_FileBase( mod->name, name );
|
||||
strcat(name, va("_%i", framenum));
|
||||
r_frame.palette = pal;
|
||||
r_frame.size = width * height * 4; // for bounds checking
|
||||
r_frame.buffer = (byte *)(pinframe + 1);
|
||||
com.strcat(name, va("_%i", framenum ));
|
||||
spr_frame->size = width * height * 4; // for bounds checking
|
||||
spr_frame->buffer = (byte *)Mem_Alloc( mod->mempool, spr_frame->size );
|
||||
|
||||
image = R_LoadImage( name, &r_frame, it_sprite );
|
||||
|
||||
if(image)
|
||||
if(!VFS_Unpack((byte *)(pinframe + 1), pinframe->compsize, &spr_frame->buffer, spr_frame->size ))
|
||||
{
|
||||
FS_FreeImage( spr_frame );
|
||||
MsgDev(D_WARN, "R_SpriteLoadFrame: %s probably corrupted\n", name );
|
||||
return (void *)((byte *)(pinframe + 1) + pinframe->compsize);
|
||||
}
|
||||
|
||||
image = R_LoadImage( name, spr_frame, it_sprite );
|
||||
if( image )
|
||||
{
|
||||
pspriteframe->texnum = image->texnum[0];
|
||||
mod->skins[framenum] = image;
|
||||
}
|
||||
else MsgWarn("%s has null frame %d\n", image->name, framenum );
|
||||
|
||||
return (void *)((byte *)(pinframe+1) + size);
|
||||
else MsgDev(D_WARN, "%s has null frame %d\n", image->name, framenum );
|
||||
|
||||
FS_FreeImage( spr_frame );
|
||||
return (dframetype_t *)((byte *)(pinframe + 1) + pinframe->compsize);
|
||||
}
|
||||
|
||||
dframetype_t *R_SpriteLoadGroup (model_t *mod, void * pin, mspriteframe_t **ppframe, int framenum )
|
||||
{
|
||||
dspritegroup_t *pingroup;
|
||||
mspritegroup_t *pspritegroup;
|
||||
dspriteinterval_t *pin_intervals;
|
||||
float *poutintervals;
|
||||
int i, groupsize, numframes;
|
||||
void *ptemp;
|
||||
|
||||
pingroup = (dspritegroup_t *)pin;
|
||||
numframes = LittleLong(pingroup->numframes);
|
||||
|
||||
groupsize = sizeof(mspritegroup_t) + (numframes - 1) * sizeof(pspritegroup->frames[0]);
|
||||
pspritegroup = Mem_Alloc( mod->mempool, groupsize );
|
||||
pspritegroup->numframes = numframes;
|
||||
|
||||
*ppframe = (mspriteframe_t *)pspritegroup;
|
||||
pin_intervals = (dspriteinterval_t *)(pingroup + 1);
|
||||
poutintervals = Mem_Alloc(mod->mempool, numframes * sizeof (float));
|
||||
pspritegroup->intervals = poutintervals;
|
||||
|
||||
for (i = 0; i < numframes; i++)
|
||||
{
|
||||
*poutintervals = LittleFloat(pin_intervals->interval);
|
||||
if(*poutintervals <= 0.0) *poutintervals = 1.0f; // set error value
|
||||
poutintervals++;
|
||||
pin_intervals++;
|
||||
}
|
||||
|
||||
ptemp = (void *)pin_intervals;
|
||||
for (i = 0; i < numframes; i++ )
|
||||
{
|
||||
ptemp = R_SpriteLoadFrame(mod, ptemp, &pspritegroup->frames[i], framenum + i);
|
||||
}
|
||||
return (dframetype_t *)ptemp;
|
||||
}
|
||||
|
||||
void R_SpriteLoadModel( model_t *mod, void *buffer )
|
||||
{
|
||||
int i, size, version, numframes;
|
||||
dspritehl_t *pin;
|
||||
short *numi;
|
||||
dsprite_t *pin;
|
||||
msprite_t *psprite;
|
||||
dframetype_t *pframetype;
|
||||
byte pal[256][4];
|
||||
vec4_t rgbacolor;
|
||||
float framerate;
|
||||
int i, size, numframes;
|
||||
|
||||
pin = (dspritehl_t *)buffer;
|
||||
version = LittleLong (pin->version);
|
||||
pin = (dsprite_t *)buffer;
|
||||
i = LittleLong(pin->version);
|
||||
|
||||
if( version != SPRITEHL_VERSION)
|
||||
if( i != SPRITE_VERSION)
|
||||
{
|
||||
Msg("Warning: %s has wrong version number (%i should be %i)", mod->name, version, SPRITEHL_VERSION );
|
||||
Msg("Warning: %s has wrong version number (%i should be %i)\n", mod->name, i, SPRITE_VERSION );
|
||||
return;
|
||||
}
|
||||
ResetRGBA( rgbacolor );
|
||||
framerate = 15.0f;
|
||||
|
||||
numframes = LittleLong (pin->numframes);
|
||||
size = sizeof (msprite_t) + (numframes - 1) * sizeof (psprite->frames);
|
||||
|
@ -100,81 +136,16 @@ void R_SpriteLoadModel( model_t *mod, void *buffer )
|
|||
mod->extradata = psprite; //make link to extradata
|
||||
|
||||
psprite->type = LittleLong(pin->type);
|
||||
psprite->maxwidth = LittleLong (pin->width);
|
||||
psprite->maxheight = LittleLong (pin->height);
|
||||
psprite->rendermode = LittleLong (pin->texFormat);
|
||||
psprite->framerate = framerate;
|
||||
psprite->maxwidth = LittleLong(pin->width);
|
||||
psprite->maxheight = LittleLong(pin->height);
|
||||
psprite->rendermode = LittleLong(pin->rendermode);
|
||||
psprite->numframes = numframes;
|
||||
Mem_Copy(psprite->rgba, rgbacolor, sizeof(psprite->rgba));
|
||||
numi = (short *)(pin + 1);
|
||||
|
||||
mod->mins[0] = mod->mins[1] = -psprite->maxwidth / 2;
|
||||
mod->maxs[0] = mod->maxs[1] = psprite->maxwidth / 2;
|
||||
mod->mins[2] = -psprite->maxheight / 2;
|
||||
mod->maxs[2] = psprite->maxheight / 2;
|
||||
|
||||
if (LittleShort(*numi) == 256)
|
||||
{
|
||||
byte *src = (byte *)(numi+1);
|
||||
|
||||
switch( psprite->rendermode )
|
||||
{
|
||||
case SPR_NORMAL:
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
pal[i][0] = *src++;
|
||||
pal[i][1] = *src++;
|
||||
pal[i][2] = *src++;
|
||||
pal[i][3] = 0;
|
||||
}
|
||||
break;
|
||||
case SPR_ADDGLOW:
|
||||
case SPR_ADDITIVE:
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
pal[i][0] = *src++;
|
||||
pal[i][1] = *src++;
|
||||
pal[i][2] = *src++;
|
||||
pal[i][3] = 255;
|
||||
}
|
||||
break;
|
||||
case SPR_INDEXALPHA:
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
pal[i][0] = *src++;
|
||||
pal[i][1] = *src++;
|
||||
pal[i][2] = *src++;
|
||||
pal[i][3] = i;
|
||||
}
|
||||
break;
|
||||
case SPR_ALPHTEST:
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
pal[i][0] = *src++;
|
||||
pal[i][1] = *src++;
|
||||
pal[i][2] = *src++;
|
||||
pal[i][3] = 255;
|
||||
}
|
||||
pal[255][0] = pal[255][1] = pal[255][2] = pal[255][3] = 0;
|
||||
break;
|
||||
default:
|
||||
for (i = 0; i < 256; i++)
|
||||
{
|
||||
pal[i][0] = *src++;
|
||||
pal[i][1] = *src++;
|
||||
pal[i][2] = *src++;
|
||||
pal[i][3] = 0;
|
||||
}
|
||||
Msg("Warning: %s has unknown texFormat (%i, should be in range 0-4 )\n", mod->name, psprite->rendermode );
|
||||
break;
|
||||
}
|
||||
pframetype = (dframetype_t *)(src);
|
||||
}
|
||||
else
|
||||
{
|
||||
MsgWarn("%s has wrong number of palette colors %i (should be 256)\n", mod->name, numi);
|
||||
return;
|
||||
}
|
||||
pframetype = (dframetype_t *)(pin + 1);
|
||||
|
||||
if(numframes < 1)
|
||||
{
|
||||
MsgWarn("%s has invalid # of frames: %d\n", mod->name, numframes );
|
||||
|
@ -186,17 +157,20 @@ void R_SpriteLoadModel( model_t *mod, void *buffer )
|
|||
|
||||
for (i = 0; i < numframes; i++ )
|
||||
{
|
||||
int frametype;
|
||||
frametype_t frametype = LittleLong (pframetype->type);
|
||||
psprite->frames[i].type = frametype;
|
||||
|
||||
frametype = LittleLong (pframetype->type);
|
||||
psprite->frames[i].frametype = frametype;
|
||||
|
||||
if(frametype == 0)//SPR_SINGLE
|
||||
switch( frametype )
|
||||
{
|
||||
pframetype = (dframetype_t *)R_SpriteLoadFrame(mod, pframetype + 1, &psprite->frames[i].frameptr, i, (byte *)(&pal[0][0]));
|
||||
case SPR_SINGLE:
|
||||
pframetype = R_SpriteLoadFrame(mod, pframetype + 1, &psprite->frames[i].frameptr, i );
|
||||
break;
|
||||
case SPR_GROUP:
|
||||
case SPR_ANGLED:
|
||||
pframetype = R_SpriteLoadGroup(mod, pframetype + 1, &psprite->frames[i].frameptr, i );
|
||||
break;
|
||||
}
|
||||
else Sys_Error("R_SpriteLoadModel: group frames are not supported\n");
|
||||
if(pframetype == NULL) break;
|
||||
if(pframetype == NULL) break; // technically an error
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -208,8 +182,10 @@ R_GetSpriteFrame
|
|||
mspriteframe_t *R_GetSpriteFrame (entity_t *currententity)
|
||||
{
|
||||
msprite_t *psprite;
|
||||
mspritegroup_t *pspritegroup;
|
||||
mspriteframe_t *pspriteframe;
|
||||
int frame;
|
||||
int i, numframes, frame;
|
||||
float *pintervals, fullinterval, targettime, time;
|
||||
|
||||
psprite = currententity->model->extradata;
|
||||
frame = currententity->frame;
|
||||
|
@ -220,12 +196,36 @@ mspriteframe_t *R_GetSpriteFrame (entity_t *currententity)
|
|||
frame = 0;
|
||||
}
|
||||
|
||||
if (psprite->frames[frame].frametype == 0) // SPR_SINGLE
|
||||
if (psprite->frames[frame].type == SPR_SINGLE)
|
||||
{
|
||||
pspriteframe = psprite->frames[frame].frameptr;
|
||||
}
|
||||
else Sys_Error("R_GetSpriteFrame: group frames are not supported\n");
|
||||
else if (psprite->frames[frame].type == SPR_GROUP)
|
||||
{
|
||||
pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr;
|
||||
pintervals = pspritegroup->intervals;
|
||||
numframes = pspritegroup->numframes;
|
||||
fullinterval = pintervals[numframes-1];
|
||||
time = r_newrefdef.time;
|
||||
|
||||
// when loading in Mod_LoadSpriteGroup, we guaranteed all interval values
|
||||
// are positive, so we don't have to worry about division by zero
|
||||
targettime = time - ((int)(time / fullinterval)) * fullinterval;
|
||||
|
||||
for (i = 0; i < (numframes - 1); i++)
|
||||
{
|
||||
if (pintervals[i] > targettime)
|
||||
break;
|
||||
}
|
||||
pspriteframe = pspritegroup->frames[i];
|
||||
}
|
||||
else if (psprite->frames[frame].type == SPR_ANGLED)
|
||||
{
|
||||
// e.g. doom-style sprite monsters
|
||||
int angleframe = (int)((r_newrefdef.viewangles[1] - currententity->angles[1])/360*8 + 0.5 - 4) & 7;
|
||||
pspritegroup = (mspritegroup_t *)psprite->frames[frame].frameptr;
|
||||
pspriteframe = pspritegroup->frames[angleframe];
|
||||
}
|
||||
return pspriteframe;
|
||||
}
|
||||
|
||||
|
@ -259,10 +259,10 @@ void R_DrawSpriteModel( int passnum )
|
|||
{
|
||||
mspriteframe_t *frame;
|
||||
vec3_t point, forward, right, up;
|
||||
msprite_t *psprite;
|
||||
entity_t *e = currententity;
|
||||
model_t *mod = currentmodel;
|
||||
float realtime = r_newrefdef.time;
|
||||
float alpha = 1.0f, realtime = r_newrefdef.time;
|
||||
msprite_t *psprite;
|
||||
|
||||
if(!R_AcceptSpritePass( e, passnum )) return;
|
||||
|
||||
|
@ -270,27 +270,11 @@ void R_DrawSpriteModel( int passnum )
|
|||
// polygon without a surface cache
|
||||
|
||||
psprite = (msprite_t *)mod->extradata;
|
||||
|
||||
// xash auto-animate
|
||||
if(psprite->framerate > 0 && psprite->numframes > 1)
|
||||
{
|
||||
float frametime;
|
||||
|
||||
mod->prevanimtime = mod->animtime;
|
||||
mod->animtime = realtime;
|
||||
frametime = mod->animtime - mod->prevanimtime;
|
||||
if(frametime == 0 ) return;//first call
|
||||
|
||||
mod->frame += psprite->framerate * frametime;
|
||||
while (mod->frame > psprite->numframes) mod->frame -= psprite->numframes;
|
||||
while (mod->frame < 0) mod->frame += psprite->numframes;
|
||||
e->frame = mod->frame; // set properly frame
|
||||
}
|
||||
else e->frame = fmod(e->frame, psprite->numframes);
|
||||
e->frame = fmod(e->frame, psprite->numframes);
|
||||
frame = R_GetSpriteFrame(e);
|
||||
|
||||
// merge alpha value
|
||||
if( e->flags & RF_TRANSLUCENT ) psprite->rgba[3] = e->alpha;
|
||||
if( e->flags & RF_TRANSLUCENT ) alpha = e->alpha;
|
||||
if( e->scale == 0 ) e->scale = 1.0f; // merge scale
|
||||
|
||||
// setup oriented
|
||||
|
@ -343,9 +327,9 @@ void R_DrawSpriteModel( int passnum )
|
|||
break;
|
||||
}
|
||||
|
||||
GL_Bind(currentmodel->skins[(int)e->frame]->texnum[0]);
|
||||
GL_Bind( frame->texnum );
|
||||
GL_TexEnv( GL_MODULATE );
|
||||
qglColor4fv( psprite->rgba );
|
||||
qglColor4f( 1.0f, 1.0f, 1.0f, alpha );
|
||||
|
||||
qglDisable(GL_CULL_FACE);
|
||||
qglBegin (GL_QUADS);
|
||||
|
|
|
@ -1,197 +0,0 @@
|
|||
<html>
|
||||
<body>
|
||||
<pre>
|
||||
<h1>Build Log</h1>
|
||||
<h3>
|
||||
--------------------Configuration: render - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP39E.tmp" with contents
|
||||
[
|
||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "../public" /I "../platform/formats" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\render\!debug/" /Fo"..\temp\render\!debug/" /Fd"..\temp\render\!debug/" /FD /c
|
||||
"D:\XASH3D\src_main\!source\render\gl_draw.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_light.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_model.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_rmain.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_rmisc.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_rsurf.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_warp.c"
|
||||
"D:\XASH3D\src_main\!source\render\gl_widnt.c"
|
||||
"D:\XASH3D\src_main\!source\render\glw_imp.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_backend.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_bloom.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_bspmod.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_sprite.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_studio.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_texture.c"
|
||||
"D:\XASH3D\src_main\!source\render\r_utils.c"
|
||||
]
|
||||
Creating command line "cl.exe @C:\WINDOWS\Temp\RSP39E.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP39F.tmp" with contents
|
||||
[
|
||||
msvcrt.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\render\!debug/render.pdb" /debug /machine:I386 /nodefaultlib:"msvcrtd.lib" /out:"..\temp\render\!debug/render.dll" /implib:"..\temp\render\!debug/render.lib" /pdbtype:sept /libpath:"../public/libs/"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_draw.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_light.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_model.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_rmain.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_rmisc.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_rsurf.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_warp.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\gl_widnt.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\glw_imp.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_backend.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_bloom.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_bspmod.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_sprite.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_studio.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_texture.obj"
|
||||
"\XASH3D\src_main\!source\temp\render\!debug\r_utils.obj"
|
||||
]
|
||||
Creating command line "link.exe @C:\WINDOWS\Temp\RSP39F.tmp"
|
||||
Creating temporary file "C:\WINDOWS\Temp\RSP3A0.bat" with contents
|
||||
[
|
||||
@echo off
|
||||
copy \XASH3D\src_main\!source\temp\render\!debug\render.dll "D:\Xash3D\bin\render.dll"
|
||||
]
|
||||
Creating command line "C:\WINDOWS\Temp\RSP3A0.bat"
|
||||
Compiling...
|
||||
gl_draw.c
|
||||
gl_light.c
|
||||
gl_model.c
|
||||
gl_rmain.c
|
||||
gl_rmisc.c
|
||||
gl_rsurf.c
|
||||
gl_warp.c
|
||||
gl_widnt.c
|
||||
glw_imp.c
|
||||
r_backend.c
|
||||
r_bloom.c
|
||||
r_bspmod.c
|
||||
r_sprite.c
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(77) : error C2065: 'dsprite_t' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(77) : error C2065: 'pin' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(77) : warning C4552: '*' : operator has no effect; expected operator with side-effect
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(78) : error C2143: syntax error : missing ';' before 'type'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(79) : error C2275: 'msprite_t' : illegal use of this type as an expression
|
||||
d:\xash3d\src_main\!source\render\gl_model.h(59) : see declaration of 'msprite_t'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(79) : error C2065: 'psprite' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(80) : error C2275: 'dframetype_t' : illegal use of this type as an expression
|
||||
d:\xash3d\src_main\!source\public\stdref.h(156) : see declaration of 'dframetype_t'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(80) : error C2065: 'pframetype' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(81) : error C2275: 'byte' : illegal use of this type as an expression
|
||||
c:\program files\microsoft visual studio\vc98\include\rpcndr.h(172) : see declaration of 'byte'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(81) : error C2146: syntax error : missing ';' before identifier 'pal'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(81) : error C2065: 'pal' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(81) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(81) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(82) : error C2275: 'vec4_t' : illegal use of this type as an expression
|
||||
d:\xash3d\src_main\!source\public\basetypes.h(112) : see declaration of 'vec4_t'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(82) : error C2146: syntax error : missing ';' before identifier 'rgbacolor'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(82) : error C2065: 'rgbacolor' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(83) : error C2143: syntax error : missing ';' before 'type'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(85) : error C2059: syntax error : ')'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(86) : error C2223: left of '->version' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(88) : error C2065: 'SPRITE_VERSION' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(93) : warning C4047: 'function' : 'float *' differs in levels of indirection from 'int '
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(93) : warning C4024: 'ResetRGBA' : different types for formal and actual parameter 1
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(94) : error C2065: 'framerate' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(96) : error C2223: left of '->numframes' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(97) : error C2223: left of '->frames' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(99) : warning C4047: '=' : 'int ' differs in levels of indirection from 'void *'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(100) : warning C4047: '=' : 'void *' differs in levels of indirection from 'int '
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(102) : error C2223: left of '->type' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(102) : error C2223: left of '->type' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(103) : error C2223: left of '->maxwidth' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(103) : error C2223: left of '->width' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(104) : error C2223: left of '->maxheight' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(104) : error C2223: left of '->height' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(105) : error C2223: left of '->rendermode' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(105) : error C2223: left of '->texFormat' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(106) : error C2223: left of '->framerate' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(107) : error C2223: left of '->numframes' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(108) : error C2223: left of '->rgba' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(108) : warning C4022: 'com' : pointer mismatch for actual parameter 1
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(108) : error C2223: left of '->rgba' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(108) : error C2198: 'com' : too few actual parameters
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(109) : error C2065: 'numi' : undeclared identifier
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(109) : warning C4047: '=' : 'int ' differs in levels of indirection from 'short *'
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(111) : error C2223: left of '->maxwidth' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(112) : error C2223: left of '->maxwidth' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(113) : error C2223: left of '->maxheight' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(114) : error C2223: left of '->maxheight' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(116) : error C2100: illegal indirection
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(120) : error C2223: left of '->rendermode' must point to struct/union
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(125) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(125) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(125) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(126) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(126) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(126) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(127) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(127) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(127) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(128) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(128) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(128) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(135) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(135) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(135) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(136) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(136) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(136) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(137) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(137) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(137) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(138) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(138) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(138) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(144) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(144) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(144) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(145) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(145) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(145) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(146) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(146) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(146) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(147) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(147) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(147) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(153) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(153) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(153) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(154) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(154) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(154) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(155) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(155) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(155) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(156) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(156) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(156) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2109: subscript requires array or pointer type
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : error C2106: '=' : left operand must be l-value
|
||||
d:\xash3d\src_main\!source\render\r_sprite.c(158) : fatal error C1003: error count exceeds 100; stopping compilation
|
||||
r_studio.c
|
||||
r_texture.c
|
||||
r_utils.c
|
||||
Generating Code...
|
||||
Error executing cl.exe.
|
||||
<h3>Output Window</h3>
|
||||
|
||||
|
||||
|
||||
<h3>Results</h3>
|
||||
render.dll - 102 error(s), 7 warning(s)
|
||||
</pre>
|
||||
</body>
|
||||
</html>
|
Reference in New Issue