04 Jan 2008

This commit is contained in:
g-cont 2008-01-04 00:00:00 +03:00 committed by Alibek Omarov
parent f9b837d18b
commit 9503c8ed70
27 changed files with 1341 additions and 920 deletions

View File

@ -8,15 +8,19 @@ DDS Converter 2.1
1. не выводится текущее значение переменной в консоль OK
2. imglib не выводит сообщения в консоль OK
3. SC_ParseToken вылетает при парсинге сейв-файла
4. где-то бьется буффер при -dev 6
Имплементация idconv
1. Конвертация .spr -> xash spr OK
2. Конвертация .sp2 -> xash spr OK
3. Конвертация .pcx -> xash gfx OK
4. Конвертация .flat-> xash mip
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
Текущие задачи:
1. Доделать сохранялку шейдеров
1. Еще раз пересмотреть типы файлов для wadlib
2. подключить звуковой кодер к roqlib
3. Имплементация save-restore для физики
@ -27,6 +31,7 @@ DDS Converter 2.1
//==================================================
// то, что уже готово
//==================================================
+исправлена ошибка при -dev 6
+запущен в строй idconv (в дайльнейшем заменит половину утилит)
+добавлена поддержка текстур из первого дуума (с прозрачностью)
+запущена в строй wadlib

View File

@ -11,7 +11,7 @@
#define MAX_FRAMES 1024
#define MAX_FRAME_DIM 512
dsprite_t sprite;
dspritehl_t sprite;
byte *byteimage, *lbmpalette;
byte *spritepool;
int byteimagewidth, byteimageheight;
@ -60,7 +60,7 @@ void WriteSprite (vfile_t *f)
{
int i, curframe;
short cnt = 256;
dsprite_t spritetemp;
dspritehl_t spritetemp;
sprite.boundingradius = sqrt(((framesmaxs[0] >> 1) * (framesmaxs[0] >> 1)) + ((framesmaxs[1] >> 1) * (framesmaxs[1] >> 1)));
@ -307,7 +307,7 @@ void ResetSpriteInfo( void )
if (!lumpbuffer )lumpbuffer = Mem_Alloc(spritepool, (MAX_BUFFER_SIZE) * 2); // *2 for padding
plump = lumpbuffer;
sprite.version = SPRITE_VERSION;//normal sprite
sprite.version = SPRITEHL_VERSION;//normal sprite
sprite.type = SPR_VP_PARALLEL;
sprite.synctype = ST_RAND; // default
}

48
editor/editor.plg Normal file
View File

@ -0,0 +1,48 @@
<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>

View File

@ -1806,13 +1806,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;
dsprite_t *phdr;
dspritehl_t *phdr;
phdr = (dsprite_t *)buffer;
phdr = (dspritehl_t *)buffer;
if(phdr->version != SPRITE_VERSION )
if(phdr->version != SPRITEHL_VERSION )
{
MsgWarn("CM_SpriteModel: %s has wrong version number (%i should be %i)\n", name, phdr->version, SPRITE_VERSION );
MsgWarn("CM_SpriteModel: %s has wrong version number (%i should be %i)\n", name, phdr->version, SPRITEHL_VERSION );
return NULL;
}

187
engine/engine.plg Normal file
View File

@ -0,0 +1,187 @@
<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>

84
idconv/conv_bsplumps.c Normal file
View File

@ -0,0 +1,84 @@
//=======================================================================
// Copyright XashXT Group 2007 ©
// conv_bsplumps.c - convert bsp lumps
//=======================================================================
#include "idconv.h"
typedef struct
{
int version;
lump_t lumps[15];
} dbspheader_t;
typedef struct
{
int nummiptex;
int dataofs[4]; // [nummiptex]
} dmiptexlump_t;
byte* bsp_base;
bool bsp_halflife = false;
void Conv_BspTextures( lump_t *l )
{
dmiptexlump_t *m;
mip_t *mip;
int i, *dofs, size;
byte *buffer;
if(!l->filelen) return; // no textures stored
m = (dmiptexlump_t *)(bsp_base + l->fileofs);
m->nummiptex = LittleLong(m->nummiptex);
dofs = m->dataofs;
for (i = 0;i < m->nummiptex;i++)
{
dofs[i] = LittleLong(dofs[i]);
if (dofs[i] == -1) continue;
// needs to emulate directly loading
mip = (mip_t *)((byte *)m + dofs[i]);
if(!LittleLong(mip->offsets[0])) continue;
com.strnlwr(mip->name, mip->name, sizeof(mip->name)); // name
buffer = ((byte *)m + dofs[i]); // buffer
size = (int)sizeof(mip_t) + (((mip->width * mip->height) * 85)>>6);
if( bsp_halflife ) size += sizeof(short) + 768; // palette
ConvMIP(va("miptex/%s", mip->name ), buffer, size ); // convert it
}
}
/*
============
ConvBSP
============
*/
bool ConvBSP( const char *name, char *buffer, int filesize )
{
dbspheader_t *header = (dbspheader_t *)buffer;
int i = LittleLong( header->version );
switch( i )
{
case 28:
case 29:
bsp_halflife = false;
break;
case 30:
bsp_halflife = true;
break;
default:
return false; // another bsp version
}
bsp_base = (byte*)buffer;
for (i = 0; i < 15; i++)
{
header->lumps[i].fileofs = LittleLong(header->lumps[i].fileofs);
header->lumps[i].filelen = LittleLong(header->lumps[i].filelen);
}
Conv_BspTextures( &header->lumps[2]); // LUMP_TEXTURES
return true;
}

View File

@ -1,276 +0,0 @@
//=======================================================================
// Copyright XashXT Group 2007 ©
// conv_hlsprite.c - convert half-life sprites
//=======================================================================
#include "idconv.h"
int sprhl_type = 0;
int sprhl_texFormat = 0;
int spr_width = 1;
int spr_height = 1;
int sprhl_numframes = 1;
int sprhl_sequence = 0;
byte sprhl_palette[256][4];
float sprhl_framerate = 15.0f;
string *sprhl_framenames;
vec2_t *sprhl_origin;
const char *SPR_RenderMode( void )
{
switch( sprhl_texFormat )
{
case SPR_ADDGLOW: return "glow";
case SPR_ALPHTEST: return "decal";
case SPR_INDEXALPHA: return "decal";
case SPR_ADDITIVE: return "additive";
case SPR_NORMAL: return "normal";
default: return "normal";
}
}
const char *SPR_RenderType( void )
{
switch( sprhl_type )
{
case SPR_ORIENTED: return "oriented";
case SPR_VP_PARALLEL: return "vp_parallel";
case SPR_FACING_UPRIGHT: return "facing_upright";
case SPR_VP_PARALLEL_UPRIGHT: return "vp_parallel_upright";
case SPR_VP_PARALLEL_ORIENTED: return "vp_parallel_oriented";
default: return "oriented";
}
}
void *SPR_ConvertFrame( const char *name, void *pin, int framenum )
{
rgbdata_t pix;
dspriteframe_t *pinframe;
char framename[256];
byte *fin, *fout, *fpal;
int i, p, pixels, width, height;
// extract sprite name from path
FS_FileBase( name, framename );
com.strcat( framename, va("_#%i%i", framenum/10, framenum%10 ));
memset( &pix, 0, sizeof(pix));
pinframe = (dspriteframe_t *)pin;
width = LittleLong (pinframe->width);
height = LittleLong (pinframe->height);
pixels = width * height;
fin = (byte *)(pinframe + 1);
fout = Mem_Alloc( zonepool, pixels * 4 );
fpal = (byte *)(&sprhl_palette[0][0]);
// expand image to 32-bit rgba buffer
for (i = 0; i < pixels; i++ )
{
p = fin[i];
fout[(i<<2)+0] = fpal[(p<<2)+0];
fout[(i<<2)+1] = fpal[(p<<2)+1];
fout[(i<<2)+2] = fpal[(p<<2)+2];
fout[(i<<2)+3] = fpal[(p<<2)+3];
}
// store framename
com.strncpy( sprhl_framenames[framenum], framename, MAX_STRING );
// store origin
sprhl_origin[framenum][0] = (float)LittleLong(pinframe->origin[0]);
sprhl_origin[framenum][1] = (float)LittleLong(pinframe->origin[1]);
// preparing for write
pix.width = width;
pix.height = height;
pix.numLayers = 1;
pix.numMips = 1;
pix.type = PF_RGBA_32;
pix.buffer = fout;
pix.size = pixels * 4;
if( sprhl_texFormat >= SPR_INDEXALPHA )
pix.flags |= IMAGE_HAS_ALPHA;
FS_SaveImage( va("%s/sprites/%s.tga", gs_gamedir, framename ), &pix );
Mem_Free( fout ); // release buffer
// jump to next frame
return (void *)((byte *)(pinframe + 1) + pixels ); // no mipmap stored
}
void *SPR_ConvertGroup( const char *name, void *pin, int framenum )
{
dspritegroup_t *pingroup;
int i, numframes;
dspriteinterval_t *pin_intervals;
float *poutintervals;
void *ptemp;
pingroup = (dspritegroup_t *)pin;
numframes = LittleLong( pingroup->numframes );
pin_intervals = (dspriteinterval_t *)(pingroup + 1);
poutintervals = Mem_Alloc(zonepool, numframes * sizeof(float));
for (i = 0; i < numframes; i++)
{
*poutintervals = LittleFloat(pin_intervals->interval);
if(*poutintervals <= 0.0) return NULL; // negate interval
poutintervals++;
pin_intervals++;
}
ptemp = (void *)pin_intervals;
for (i = 0; i < numframes; i++ )
{
ptemp = SPR_ConvertFrame( name, ptemp, framenum + i );
}
return ptemp;
}
bool SPR_WriteScript( const char *name )
{
int i;
file_t *f = FS_Open( va("%s/sprites/%s.txt", gs_gamedir, name ), "w" );
if( !f )
{
Msg("Can't write sprite header \"%s.txt\"\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,"//=======================================================================\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", sprhl_framerate, sprhl_sequence );
// frames description
FS_Printf(f,"\nframes \"%s\"\n{\n", name );
for( i = 0; i < sprhl_numframes; i++)
{
FS_Printf(f,"\tframe\t\"sprites/%s\"", sprhl_framenames[i] );
if(!sprhl_origin[i][0] && !sprhl_origin[i][1]) FS_Print(f, "\n" );
else FS_Printf(f, "\t%d\t%d\n", (int)sprhl_origin[i][0], (int)sprhl_origin[i][1] );
}
FS_Print(f,"}\n" );
FS_Printf(f,"\nsequence 0\n{\n\tpattern\t" ); // default sequence
if(sprhl_numframes > 1) FS_Printf(f,"\"%d..%d\"", 0, sprhl_numframes - 1 );
else FS_Print(f,"\"0\"" );
FS_Print(f,"\n}\n" );
FS_Close(f);
Mem_Free( sprhl_framenames );
Mem_Free( sprhl_origin );
Msg("%s.spr\n", name ); // echo to console about current sprite
return true;
}
/*
============
ConvSPR
============
*/
bool ConvSPR( const char *name, char *buffer, int filesize )
{
int i, version;
dframetype_t *pframetype;
dsprite_t *pin;
short *numi;
pin = (dsprite_t *)buffer;
version = LittleLong( pin->version );
if( pin->ident != IDSPRHLHEADER || pin->version != SPRITE_VERSION )
{
Msg("\"%s.spr\" it's not a Half-Life sprite\n", name );
return false;
}
sprhl_numframes = LittleLong( pin->numframes );
// maximum size of frame
sprhl_texFormat = LittleLong( pin->texFormat );
sprhl_type = LittleLong( pin->type );
numi = (short *)(pin + 1);
sprhl_framenames = Mem_Alloc( zonepool, sprhl_numframes * MAX_STRING );
sprhl_origin = Mem_Alloc( zonepool, sprhl_numframes * sizeof(vec2_t));
if( LittleShort(*numi) == 256 )
{
byte *src = (byte *)(numi + 1);
switch( sprhl_texFormat )
{
case SPR_ADDGLOW:
case SPR_ADDITIVE:
for (i = 0; i < 256; i++)
{
sprhl_palette[i][0] = *src++;
sprhl_palette[i][1] = *src++;
sprhl_palette[i][2] = *src++;
sprhl_palette[i][3] = 255;
}
break;
case SPR_INDEXALPHA:
for (i = 0; i < 256; i++)
{
sprhl_palette[i][0] = *src++;
sprhl_palette[i][1] = *src++;
sprhl_palette[i][2] = *src++;
sprhl_palette[i][3] = i;
}
break;
case SPR_ALPHTEST:
for (i = 0; i < 256; i++)
{
sprhl_palette[i][0] = *src++;
sprhl_palette[i][1] = *src++;
sprhl_palette[i][2] = *src++;
sprhl_palette[i][3] = 255;
}
memset( sprhl_palette[255], 0, sizeof(uint)); // last entry
break;
default:
Msg("Warning: %s.spr have unknown texFormat %i\n", name, sprhl_texFormat );
case SPR_NORMAL:
for (i = 0; i < 256; i++)
{
sprhl_palette[i][0] = *src++;
sprhl_palette[i][1] = *src++;
sprhl_palette[i][2] = *src++;
sprhl_palette[i][3] = 0;
}
break;
}
// get frametype for first frame
pframetype = (dframetype_t *)(src);
}
else
{
Msg("\"%s.spr\" have invalid palette size\n", name );
return false;
}
// save frames as normal images (.tga or .dds)
for (i = 0; i < sprhl_numframes; i++ )
{
frametype_t frametype = LittleLong( pframetype->type );
if( frametype == SPR_SINGLE )
{
pframetype = (dframetype_t *)SPR_ConvertFrame( name, pframetype + 1, i );
}
else if( frametype == SPR_GROUP )
{
pframetype = (dframetype_t *)SPR_ConvertFrame( name, pframetype + 1, i );
}
if( pframetype == NULL ) break; // technically an error
}
// write script file and out
return SPR_WriteScript( name );
}

View File

@ -12,6 +12,11 @@ byte *zonepool;
static double start, end;
uint app_name = 0;
string gs_gamedir;
string gs_searchmask;
#define MAX_SEARCHMASK 128
string searchmask[MAX_SEARCHMASK];
int num_searchmask = 0;
typedef struct convformat_s
{
@ -22,13 +27,17 @@ typedef struct convformat_s
convformat_t convert_formats[] =
{
{"%s.%s", "spr", ConvSPR}, // half-life sprite
{"%s.%s", "spr", ConvSPR}, // quake1/half-life sprite
{"%s.%s","spr32",ConvSPR}, // spr32 sprite
{"%s.%s", "sp2", ConvSP2}, // quake2 sprite
{"%s.%s", "pcx", ConvPCX}, // quake2 pics
{"%s.%s", "flt", ConvFLT}, // doom1 textures
{"%s.%s", "mip", ConvMIP}, // Quake1/Half-Life textures
{"%s.%s", "lmp", ConvLMP}, // Quake1/Half-Life graphics
{"%s.%s", "fnt", ConvFNT}, // Half-Life fonts
{"%s.%s", "wal", ConvWAL}, // Quake2 textures
{"%s.%s", "skn", ConvSKN}, // doom1 sprite models
{"%s.%s", "bsp", ConvBSP}, // Quake1\Half-Life map textures
{NULL, NULL } // list terminator
};
@ -67,6 +76,17 @@ bool ConvertResource( const char *filename )
return false;
}
void AddMask( const char *mask )
{
if( num_searchmask >= MAX_SEARCHMASK )
{
MsgDev(D_WARN, "AddMask: searchlist is full\n");
return;
}
com.strncpy( searchmask[num_searchmask], mask, MAX_STRING );
num_searchmask++;
}
/*
==================
CommonInit
@ -81,7 +101,7 @@ void InitConvertor ( uint funcname, int argc, char **argv )
basepool = Mem_AllocPool( "Temp" );
zonepool = Mem_AllocPool( "Zone" );
app_name = funcname;
switch( funcname )
{
case HOST_CONVERTOR:
@ -96,68 +116,82 @@ void InitConvertor ( uint funcname, int argc, char **argv )
void RunConvertor ( void )
{
search_t *search;
char filename[MAX_QPATH], typemod[16], errorstring[256];
string searchmask[16];
string errorstring;
int i, j, numConvertedRes = 0;
Mem_Set( searchmask, 0, MAX_STRING * 16 );
Mem_Set( searchmask, 0, MAX_STRING * MAX_SEARCHMASK );
Mem_Set( errorstring, 0, MAX_STRING );
switch(app_name)
{
case HOST_CONVERTOR:
strcpy(typemod, "resources" );
strcpy(searchmask[0], "sprites/*.spr" ); // half-life sprites
strcpy(searchmask[1], "sprites/*.sp2" ); // quake2 sprites
strcpy(searchmask[2], "pics/*.pcx" ); // quake2 menu images
strcpy(searchmask[3], "gfx/*.lmp" ); // quake1 menu images
strcpy(searchmask[4], "*.spr" ); // half-life sprites
strcpy(searchmask[5], "*.sp2" ); // half-life sprites
strcpy(searchmask[6], "*.pcx" ); // quake2 menu images
strcpy(searchmask[7], "*.flt" ); // doom1 textures
strcpy(searchmask[8], "*.mip" ); // quake1\half-life textures
strcpy(searchmask[9], "*.lmp" ); // quake1\half-life pictures
strcpy(searchmask[10],"*.fnt" ); // half-life fonts
Msg("Converting ...\n\n");
break;
case HOST_OFFLINE:
break;
default: return;
}
if(!FS_GetParmFromCmdLine("-game", gs_gamedir ))
com.strncpy(gs_gamedir, "xash", sizeof(gs_gamedir));
if(!FS_GetParmFromCmdLine("-file", filename ))
if(!FS_GetParmFromCmdLine("-mask", gs_searchmask ))
{
// search by mask
for( i = 0; i < 16; i++)
{
// skip blank mask
if(!com.strlen(searchmask[i])) continue;
search = FS_Search( searchmask[i], true );
if(!search) continue; // try next mask
for( j = 0; j < search->numfilenames; j++ )
{
if(ConvertResource( search->filenames[j] ))
numConvertedRes++;
}
}
if(numConvertedRes == 0)
{
for(j = 0; j < 16; j++)
{
if(!com.strlen(searchmask[j])) continue;
com.strcat(errorstring, va("%s ", searchmask[j]));
}
Sys_Break("no %sfound in this folder!\n", errorstring );
}
AddMask( "sprites/*.spr" );
AddMask( "sprites/*.sp2" );
AddMask( "sprites/*.spr32");
AddMask( "textures/*.wal" );
AddMask( "progs/*.spr32" );
AddMask( "progs/*.spr" );
AddMask( "pics/*.pcx" );
AddMask( "maps/*.bsp" );
AddMask( "gfx/*.lmp" );
AddMask( "*.spr" );
AddMask( "*.sp2" );
AddMask( "*.pcx" );
AddMask( "*.flt" );
AddMask( "*.mip" );
AddMask( "*.lmp" );
AddMask( "*.fnt" );
}
else AddMask( gs_searchmask ); // custom mask
// find subdirectories
search = FS_Search("textures/*", true );
if( search )
{
for(i = 0; i < search->numfilenames; i++)
AddMask(va("%s/*.wal", search->filenames[i]));
Mem_Free( search );
}
// directory to extract
com.strncpy(gs_gamedir, "~tmpXash", sizeof(gs_gamedir));
// search by mask
for( i = 0; i < num_searchmask; i++)
{
// skip blank mask
if(!com.strlen(searchmask[i])) continue;
search = FS_Search( searchmask[i], true );
if(!search) continue; // try next mask
for( j = 0; j < search->numfilenames; j++ )
{
if(ConvertResource( search->filenames[j] ))
numConvertedRes++;
}
Mem_Free( search );
}
if(numConvertedRes == 0)
{
for(j = 0; j < 16; j++)
{
if(!com.strlen(searchmask[j])) continue;
com.strncat(errorstring, va("%s ", searchmask[j]), MAX_STRING );
}
Sys_Break("no %sfound in this folder!\n", errorstring );
}
else ConvertResource( filename );
end = Sys_DoubleTime();
Msg ("%5.3f seconds elapsed\n", end - start);
if(numConvertedRes > 1) Msg("total %d %s compiled\n", numConvertedRes, typemod );
if(numConvertedRes > 1) Msg("total %d files compiled\n", numConvertedRes );
}
void CloseConvertor( void )

View File

@ -100,6 +100,7 @@ bool PCX_ConvertImage( const char *name, char *buffer, int filesize )
}
Mem_Free( pbuf ); // free compressed image
FS_StripExtension( (char *)name );
FS_SaveImage( va("%s/%s.tga", gs_gamedir, name ), &pic ); // save converted image
Mem_Free( pic.buffer ); // release buffer
@ -140,7 +141,7 @@ bool ConvPCX( const char *name, char *buffer, int filesize )
if(PCX_ConvertImage( path, buffer, filesize ))
{
Msg("%s.pcx\n", name ); // echo to console about current image
Msg("%s\n", name ); // echo to console about current image
return true;
}
return false;

View File

@ -6,6 +6,8 @@
#include "idconv.h"
#include "mathlib.h"
string nextanimchain;
vec_t Conv_NormalizeColor(vec3_t in, vec3_t out)
{
float max, scale;
@ -21,68 +23,14 @@ vec_t Conv_NormalizeColor(vec3_t in, vec3_t out)
return max;
}
bool Conv_CreateShader( const char *name, rgbdata_t *pic )
bool Conv_WriteShader( const char *shaderpath, const char *imagepath, float *rad, float scale, int flags, int contents )
{
string shadername, imagename;
string shaderpath, imagepath;
vec3_t radiocity = {0,0,0};
float intensity = 0;
int i, flags = 0;
file_t *f;
file_t *f;
// extract fodler name from path
FS_ExtractFilePath( name, shadername );
FS_FileBase( name, imagename );
com.snprintf( shaderpath, MAX_STRING, "%s/scripts/shaders/%s.txt", gs_gamedir, shadername );
com.snprintf( imagepath, MAX_STRING, "textures/%s", name );
// nothing to write
if(!flags && !contents && !com.strlen(nextanimchain))
return false;
if(com.strchr(imagename, '~') || stristr(imagename, "lit" ))
{
float r, scale;
vec3_t color = {0,0,0};
int texels = pic->width * pic->height;
// calculate reflectivity
for (i = 0; i < texels; i++ )
{
color[0] += pic->buffer[i*4+0];
color[1] += pic->buffer[i*4+1];
color[2] += pic->buffer[i+4+2];
}
for (i = 0; i < 3; i++)
{
r = color[i]/texels;
radiocity[i] = r;
}
// scale the reflectivity up, because the textures are so dim
scale = Conv_NormalizeColor( radiocity, radiocity );
intensity = texels * scale; // basic intensity value
flags |= SURF_LIGHT;
}
else if(imagename[0] == '!' || imagename[0] == '*') flags |= SURF_WARP; // liquids
else if(imagename[0] == '{') flags |= CONTENTS_TRANSLUCENT; // grates
else if(imagename[0] == '-')
{
// random tileing
Msg("%s it's random tileing texture\n", imagename );
}
else if(imagename[0] == '+')
{
// animchain
Msg("%s it's animation texture\n", imagename );
}
// search for keywords
if(!com.strnicmp(imagename, "sky", 3 )) flags |= SURF_SKY;
else if(!com.strnicmp(imagename, "origin",6)) flags |= CONTENTS_ORIGIN;
else if(!com.strnicmp(imagename, "hint", 4 )) flags |= SURF_HINT;
else if(!com.strnicmp(imagename, "skip", 4 )) flags |= SURF_SKIP;
else if(!com.strnicmp(imagename, "null", 4 )) flags |= SURF_NULL;
else if(!com.strnicmp(imagename, "translucent", 11 )) flags |= CONTENTS_TRANSLUCENT;
else if(!com.strnicmp(imagename, "mirror", 6 )) flags |= SURF_MIRROR;
if(!flags) return false;
if(FS_FileExists( shaderpath ))
{
// already exist, search for current shader
@ -98,26 +46,26 @@ bool Conv_CreateShader( const char *name, rgbdata_t *pic )
{
f = FS_Open( shaderpath, "w" ); // new file
// write description
FS_Printf(f,"//=======================================================================\n");
FS_Printf(f,"//\t\t\tCopyright XashXT Group 2007 ©\n");
FS_Printf(f,"//\t\t\t%s.txt - Shader Description\n", imagename );
FS_Printf(f,"//=======================================================================\n");
FS_Print(f,"//=======================================================================\n");
FS_Print(f,"//\t\t\tCopyright XashXT Group 2007 ©\n");
FS_Print(f,"//\t\t\t Created by Xash IdConvertor\n");
FS_Print(f,"//=======================================================================\n");
}
FS_Printf(f, "\n%s\n{\n", imagepath ); // writepath
if(flags & SURF_LIGHT)
{
FS_Print( f, "\tsurfaceparm\tlight\n" );
FS_Printf(f, "\tradiocity\t\t%.f %.f %.f\n", radiocity[0], radiocity[1], radiocity[2] );
FS_Printf(f, "\tintencity\t\t%.f %.f %.f\n", radiocity[0], radiocity[1], radiocity[2] );
if(!VectorIsNull(rad)) FS_Printf(f, "\tradiocity\t\t%.f %.f %.f\n", rad[0], rad[1], rad[2] );
if( scale ) FS_Printf(f, "\tintencity\t\t%.f\n", scale );
}
if(flags & SURF_WARP)
{
// server relevant contents
if(stristr(imagename, "water" ))
if(contents & CONTENTS_WATER)
FS_Print( f, "\tsurfaceparm\twater\n" );
else if(stristr(imagename, "slime" ))
else if(contents & CONTENTS_SLIME)
FS_Print( f, "\tsurfaceparm\tslime\n" );
else if(stristr(imagename, "lava" ))
else if(contents & CONTENTS_LAVA)
FS_Print( f, "\tsurfaceparm\tlava\n" );
else FS_Print( f, "\tsurfaceparm\twater\n" );
}
@ -125,12 +73,124 @@ bool Conv_CreateShader( const char *name, rgbdata_t *pic )
if(flags & SURF_HINT) FS_Print( f, "\tsurfaceparm\thint\n" );
if(flags & SURF_SKIP) FS_Print( f, "\tsurfaceparm\tskip\n" );
if(flags & SURF_NULL) FS_Print( f, "\tsurfaceparm\tnull\n" );
if(flags & CONTENTS_ORIGIN) FS_Print( f, "\tsurfaceparm\torigin\n" );
if(flags & CONTENTS_TRANSLUCENT) FS_Print( f, "\tsurfaceparm\ttrans\n" );
if(flags & SURF_MIRROR) FS_Print( f, "\tsurfaceparm\tmirror\n" );
if(flags & SURF_NODRAW) FS_Print( f, "\tsurfaceparm\tnodraw\n" );
if(flags & SURF_BLEND) FS_Print( f, "\tsurfaceparm\tblend\n" );
FS_Print( f, "}\n");
if(contents & CONTENTS_MONSTERCLIP && contents && CONTENTS_PLAYERCLIP)
FS_Print( f, "\tsurfaceparm\tclip\n" );
else if(contents & CONTENTS_MONSTERCLIP)
FS_Print( f, "\tsurfaceparm\tmonsterclip\n" );
else if(contents & CONTENTS_PLAYERCLIP)
FS_Print( f, "\tsurfaceparm\tplayerclip\n" );
if(contents & CONTENTS_WINDOW) FS_Print( f, "\tsurfaceparm\twindow\n" );
if(contents & CONTENTS_ORIGIN) FS_Print( f, "\tsurfaceparm\torigin\n" );
if(contents & CONTENTS_TRANSLUCENT) FS_Print( f, "\tsurfaceparm\ttrans\n" );
if(contents & CONTENTS_AREAPORTAL) FS_Print( f, "\tsurfaceparm\tareaportal\n" );
if(contents & CONTENTS_DETAIL) FS_Print( f, "\tsurfaceparm\tdetail\n" );
if(com.strlen(nextanimchain)) FS_Printf( f, "\tnextframe\t\t%s\n", nextanimchain );
FS_Print( f, "}\n"); // close shader
FS_Close( f );
return true;
}
bool Conv_ShaderGetFlags( const char *imagename, const char *shadername, int *flags, int *contents )
{
if(*flags || *contents) return false; // wally flags already exist
// try to exctract contents and flags directly form mip-name
if(imagename[0] == '!' || imagename[0] == '*') *flags |= SURF_WARP; // liquids
else if(imagename[0] == '{') *contents |= CONTENTS_TRANSLUCENT; // grates
else if(imagename[0] == '+')
{
char c1 = imagename[1], c2;
string temp1, temp2;
com.strncpy( temp1, imagename, MAX_STRING );
com.strncpy( temp2, imagename, MAX_STRING );
if(c1 == 'a' || c1 == 'A') c2 = '0';
if(c1 == '0' ) c2 = 'A';
c1++; // go to next symbol
temp1[1] = c1; // replace
temp2[1] = c2; // replace
// make animchain
if(FS_FileExists( va("textures/%s/%s.mip", shadername, temp1 )))
com.snprintf( nextanimchain, MAX_STRING, "%s/%s", shadername, temp1 );
else if(FS_FileExists( va("textures/%s/%s.mip", shadername, temp2 )))
com.snprintf( nextanimchain, MAX_STRING, "%s/%s", shadername, temp2 );
else
{
temp1[1] = '0'; // hmmm ...
com.snprintf( nextanimchain, MAX_STRING, "%s/%s", shadername, temp1 );
}
}
// light definition
if(com.strchr(imagename, '~')) *flags |= SURF_LIGHT;
// search for keywords
if(!com.strnicmp(imagename, "sky", 3 )) *flags |= SURF_SKY;
else if(!com.strnicmp(imagename, "origin",6)) *contents |= CONTENTS_ORIGIN;
else if(!com.strnicmp(imagename, "clip", 4 )) *contents |= (CONTENTS_CLIP);
else if(!com.strnicmp(imagename, "hint", 4 )) *flags |= SURF_HINT;
else if(!com.strnicmp(imagename, "skip", 4 )) *flags |= SURF_SKIP;
else if(!com.strnicmp(imagename, "null", 4 )) *flags |= SURF_NULL;
else if(!com.strnicmp(imagename, "translucent", 11 )) *flags |= CONTENTS_TRANSLUCENT;
else if(!com.strnicmp(imagename, "mirror", 6 )) *flags |= SURF_MIRROR;
return true;
}
bool Conv_CreateShader( const char *name, rgbdata_t *pic, const char *animchain, int imageflags, int imagecontents )
{
string shadername, imagename;
string shaderpath, imagepath;
vec3_t radiocity = {0,0,0};
float intencity = 0;
int i, flags = 0, contents = 0;
// extract fodler name from path
FS_ExtractFilePath( name, shadername );
FS_FileBase( shadername, shadername ); // remove "textures" from path
FS_FileBase( name, imagename );
com.snprintf( shaderpath, MAX_STRING, "%s/scripts/shaders/%s.txt", gs_gamedir, shadername );
if(stristr(name, "textures")) com.snprintf( imagepath, MAX_STRING, "%s", name ); // full path
else com.snprintf( imagepath, MAX_STRING, "textures/%s", name ); // build full path
nextanimchain[0] = 0; // clear chain
if(animchain && com.strlen(animchain)) // wally animname
com.strncpy( nextanimchain, animchain, MAX_STRING );
flags |= imageflags; // .wal can transmit flags here
contents |= imagecontents;
Conv_ShaderGetFlags( imagename, shadername, &flags, &contents );
if(flags & SURF_LIGHT)
{
float r, scale;
vec3_t color = {0,0,0};
int texels = pic->width * pic->height;
// needs calculate reflectivity
for (i = 0; i < texels; i++ )
{
color[0] += pic->buffer[i*4+0];
color[1] += pic->buffer[i*4+1];
color[2] += pic->buffer[i+4+2];
}
for (i = 0; i < 3; i++)
{
r = color[i]/texels;
radiocity[i] = r;
}
// scale the reflectivity up, because the textures are so dim
scale = Conv_NormalizeColor( radiocity, radiocity );
intencity = texels * 255.0 / scale; // basic intensity value
}
return Conv_WriteShader( shaderpath, imagepath, radiocity, intencity, flags, contents );
}

327
idconv/conv_sprite.c Normal file
View File

@ -0,0 +1,327 @@
//=======================================================================
// Copyright XashXT Group 2007 ©
// conv_sprite.c - convert q1\hl\spr32 sprites
//=======================================================================
#include "idconv.h"
int spr_type;
int spr_texFormat;
int spr_width;
int spr_height;
int spr_numframes;
int spr_sequence;
byte spr_palette[256][4];
bool spr_truecolor = false;
float spr_framerate = 15.0f;
string spr_framenames[256];
vec2_t spr_origin[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_ADDITIVE: return "additive";
case SPR_NORMAL: return "normal";
default: return "normal";
}
}
const char *SPR_RenderType( void )
{
switch( spr_type )
{
case SPR_ORIENTED: return "oriented";
case SPR_VP_PARALLEL: return "vp_parallel";
case SPR_FACING_UPRIGHT: return "facing_upright";
case SPR_VP_PARALLEL_UPRIGHT: return "vp_parallel_upright";
case SPR_VP_PARALLEL_ORIENTED: return "vp_parallel_oriented";
default: return "oriented";
}
}
void *SPR_ConvertFrame( const char *name, void *pin, int framenum )
{
rgbdata_t pix;
dspriteframe_t *pinframe;
char framename[256];
byte *fin, *fout, *fpal;
int i, p, pixels, width, height;
pinframe = (dspriteframe_t *)pin;
width = LittleLong (pinframe->width);
height = LittleLong (pinframe->height);
fin = (byte *)(pinframe + 1);
if( width <= 0 || height <= 0 )
{
// Note: in Q1 exist sprites with blank frames
spr_numframes--;
return (void *)((byte *)(pinframe + 1));
}
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 ));
memset( &pix, 0, sizeof(pix));
if( spr_truecolor )
{
pixels = width * height * 4;
Mem_Copy( fout, fin, pixels );
}
else
{
pixels = width * height;
fpal = (byte *)(&spr_palette[0][0]);
// expand image to 32-bit rgba buffer
for (i = 0; i < pixels; i++ )
{
p = fin[i];
fout[(i<<2)+0] = fpal[(p<<2)+0];
fout[(i<<2)+1] = fpal[(p<<2)+1];
fout[(i<<2)+2] = fpal[(p<<2)+2];
fout[(i<<2)+3] = fpal[(p<<2)+3];
}
}
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]);
// preparing for write
pix.width = width;
pix.height = height;
pix.numLayers = 1;
pix.numMips = 1;
pix.type = PF_RGBA_32;
pix.buffer = fout;
pix.size = width * height * 4;
if( spr_texFormat >= SPR_INDEXALPHA )
pix.flags |= IMAGE_HAS_ALPHA;
FS_SaveImage( va("%s/sprites/%s.tga", gs_gamedir, framename ), &pix );
Mem_Free( fout ); // release buffer
// jump to next frame
return (void *)((byte *)(pinframe + 1) + pixels ); // no mipmap stored
}
void *SPR_ConvertGroup( const char *name, void *pin, int framenum )
{
dspritegroup_t *pingroup;
int i, numframes;
dspriteinterval_t *pin_intervals;
void *ptemp;
pingroup = (dspritegroup_t *)pin;
numframes = LittleLong( pingroup->numframes );
pin_intervals = (dspriteinterval_t *)(pingroup + 1);
for (i = 0; i < numframes; i++)
{
if(LittleFloat(pin_intervals->interval) <= 0.0)
{
Sys_Break("negative interval!\n");
return NULL; // negate interval
}
pin_intervals++;
}
// update global numframes
spr_numframes += numframes - 1;
ptemp = (void *)pin_intervals;
for (i = 0; i < numframes; i++ )
{
ptemp = SPR_ConvertFrame( name, ptemp, framenum + i );
}
return ptemp;
}
bool SPR_WriteScript( const char *name )
{
int i;
file_t *f = FS_Open( va("%s/sprites/%s.txt", gs_gamedir, name ), "w" );
if( !f )
{
Msg("Can't write sprite header \"%s.txt\"\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,"//=======================================================================\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 );
// 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] );
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] );
}
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_Close(f);
Msg("%s.spr\n", name ); // echo to console about current sprite
return true;
}
/*
============
ConvSPR
============
*/
bool ConvSPR( const char *name, char *buffer, int filesize )
{
int i, version;
dframetype_t *pframetype;
string scriptname;
dsprite_t *pin;
dspritehl_t *pinhl;
short *numi;
pin = (dsprite_t *)buffer;
version = LittleLong( pin->version );
if( pin->ident != IDSPRHLHEADER )
{
Msg("\"%s.spr\" have invalid header\n", name );
return false;
}
switch( version )
{
case SPRITEQ1_VERSION:
spr_numframes = LittleLong( pin->numframes );
spr_texFormat = SPR_INDEXALPHA; // constant
spr_type = LittleLong( pin->type );
spr_width = LittleLong( pin->width );
spr_height = LittleLong( pin->height );
// palette setup
Conv_GetPaletteQ1(); // setup palette
Mem_Copy( spr_palette, d_currentpal, 1024 );
pframetype = (dframetype_t *)(pin + 1);
spr_truecolor = false;
break;
case SPRITE32_VERSION:
spr_numframes = LittleLong( pin->numframes );
spr_texFormat = SPR_INDEXALPHA; // constant
spr_type = LittleLong( pin->type );
spr_width = LittleLong( pin->width );
spr_height = LittleLong( pin->height );
pframetype = (dframetype_t *)(pin + 1);
spr_truecolor = true;
break;
case SPRITEHL_VERSION:
pinhl = (dspritehl_t *)buffer; // reorganize header
spr_numframes = LittleLong( pinhl->numframes );
spr_texFormat = LittleLong( pinhl->texFormat );
spr_width = LittleLong( pinhl->width );
spr_height = LittleLong( pinhl->height );
spr_type = LittleLong( pinhl->type );
numi = (short *)(pinhl + 1);
spr_truecolor = false;
if( LittleShort(*numi) == 256 )
{
byte *src = (byte *)(numi + 1);
switch( spr_texFormat )
{
case SPR_ADDGLOW:
case SPR_ADDITIVE:
for (i = 0; i < 256; i++)
{
spr_palette[i][0] = *src++;
spr_palette[i][1] = *src++;
spr_palette[i][2] = *src++;
spr_palette[i][3] = 255;
}
break;
case SPR_INDEXALPHA:
for (i = 0; i < 256; i++)
{
spr_palette[i][0] = *src++;
spr_palette[i][1] = *src++;
spr_palette[i][2] = *src++;
spr_palette[i][3] = i;
}
break;
case SPR_ALPHTEST:
for (i = 0; i < 256; i++)
{
spr_palette[i][0] = *src++;
spr_palette[i][1] = *src++;
spr_palette[i][2] = *src++;
spr_palette[i][3] = 255;
}
memset( spr_palette[255], 0, sizeof(uint)); // last entry
break;
default: Msg("Warning: %s.spr have unknown texFormat %i\n", name, spr_texFormat );
case SPR_NORMAL:
for (i = 0; i < 256; i++)
{
spr_palette[i][0] = *src++;
spr_palette[i][1] = *src++;
spr_palette[i][2] = *src++;
spr_palette[i][3] = 0;
}
break;
}
// get frametype for first frame
pframetype = (dframetype_t *)(src);
}
else
{
Msg("\"%s.spr\" have invalid palette size\n", name );
return false;
}
break;
default:
Msg("\"%s.spr\" unknown version\n", name );
return false;
}
memset(spr_framenames, 0, 256 * MAX_STRING );
memset(spr_origin, 0, 256 * sizeof(vec2_t) );
// save frames as normal images
for (i = 0; i < spr_numframes; i++ )
{
frametype_t frametype = LittleLong( pframetype->type );
if( frametype == SPR_SINGLE )
{
pframetype = (dframetype_t *)SPR_ConvertFrame( name, (pframetype + 1), i );
}
else if( frametype == SPR_GROUP )
{
pframetype = (dframetype_t *)SPR_ConvertGroup( name, (pframetype + 1), i );
}
if( pframetype == NULL ) break; // technically an error
}
// write script file and out
FS_FileBase( name, scriptname );
return SPR_WriteScript( scriptname );
}

View File

@ -1,6 +1,6 @@
//=======================================================================
// Copyright XashXT Group 2007 ©
// conv_q2sprite.c - convert quake2 sprites
// conv_sprite2.c - convert quake2 sprites
//=======================================================================
#include "idconv.h"
@ -90,7 +90,7 @@ bool SP2_WriteScript( const char *name )
// because q2 sprites already have "sprites/" in the path
FS_Printf(f,"\tframe\t\"%s\"", sprq2_framenames[i] );
if(!sprq2_origin[i][0] && !sprq2_origin[i][1]) FS_Print(f, "\n" );
else FS_Printf(f, "\t%d\t%d\n", (int)sprq2_origin[i][0], (int)sprq2_origin[i][1] );
else FS_Printf(f, "\t-%d\t%d\n", (int)sprq2_origin[i][0], (int)sprq2_origin[i][1] );
}
FS_Print(f,"}\n" );
FS_Printf(f,"\nsequence 0\n{\n\tpattern\t" ); // default sequence
@ -114,11 +114,12 @@ ConvSP2
bool ConvSP2( const char *name, char *buffer, int filesize )
{
dspriteq2_t *pin;
string scriptname;
int i;
pin = (dspriteq2_t *)buffer;
if( LittleLong(pin->ident) != IDSPRQ2HEADER || LittleLong(pin->version) != SPRITE_VERSION )
if( LittleLong(pin->ident) != IDSPRQ2HEADER || LittleLong(pin->version) != SPRITEQ2_VERSION )
{
Msg("\"%s.spr\" it's not a Quake2 sprite\n", name );
return false;
@ -137,5 +138,6 @@ bool ConvSP2( const char *name, char *buffer, int filesize )
}
// write script file and out
return SP2_WriteScript( name );
FS_FileBase( name, scriptname );
return SP2_WriteScript( scriptname );
}

View File

@ -30,38 +30,38 @@ bool ConvPAL( char *name, char *buffer, int filesize )
ConvFLT
============
*/
bool ConvFLT( const char *name, char *buffer, int filesize )
rgbdata_t *Conv_FlatImage( const char *name, char *buffer, int filesize )
{
flat_t flat;
vfile_t *f;
word column_loop, row_loop;
int i, column_offset, pointer_position, first_pos, pixels;
byte *Data, post, topdelta, length;
rgbdata_t pic;
rgbdata_t *pic = Mem_Alloc( zonepool, sizeof(*pic));
if(filesize < (int)sizeof(flat))
{
MsgWarn("LoadFLAT: file (%s) have invalid size\n", name );
return false;
return NULL;
}
memset( &pic, 0, sizeof(pic));
// stupid copypaste from DevIL, but it works
f = VFS_Create( buffer, filesize );
first_pos = VFS_Tell( f );
VFS_Read(f, &flat, sizeof(flat));
pic.width = LittleShort( flat.width );
pic.height = LittleShort( flat.height );
pic->width = LittleShort( flat.width );
pic->height = LittleShort( flat.height );
flat.desc[0] = LittleShort( flat.desc[0] );
flat.desc[1] = LittleShort( flat.desc[1] );
if(!Lump_ValidSize( (char *)name, &pic, 256, 256 )) return false;
Data = (byte *)Mem_Alloc( zonepool, pic.width * pic.height );
memset( Data, 247, pic.width * pic.height ); // default mask
pic.numLayers = 1;
pic.type = PF_RGBA_32;
if(!Lump_ValidSize( (char *)name, pic, 256, 256 ))
return NULL;
Data = (byte *)Mem_Alloc( zonepool, pic->width * pic->height );
memset( Data, 247, pic->width * pic->height ); // default mask
pic->numLayers = 1;
pic->type = PF_RGBA_32;
for( column_loop = 0; column_loop < pic.width; column_loop++ )
for( column_loop = 0; column_loop < pic->width; column_loop++ )
{
VFS_Read(f, &column_offset, sizeof(int));
pointer_position = VFS_Tell( f );
@ -69,16 +69,16 @@ bool ConvFLT( const char *name, char *buffer, int filesize )
while( 1 )
{
if(VFS_Read(f, &topdelta, 1) != 1) return false;
if(VFS_Read(f, &topdelta, 1) != 1) return NULL;
if(topdelta == 255) break;
if(VFS_Read(f, &length, 1) != 1) return false;
if(VFS_Read(f, &post, 1) != 1) return false;
if(VFS_Read(f, &length, 1) != 1) return NULL;
if(VFS_Read(f, &post, 1) != 1) return NULL;
for (row_loop = 0; row_loop < length; row_loop++)
{
if(VFS_Read(f, &post, 1) != 1) return false;
if(row_loop + topdelta < pic.height)
Data[(row_loop + topdelta) * pic.width + column_loop] = post;
if(VFS_Read(f, &post, 1) != 1) return NULL;
if(row_loop + topdelta < pic->height)
Data[(row_loop + topdelta) * pic->width + column_loop] = post;
}
VFS_Read(f, &post, 1);
}
@ -87,30 +87,59 @@ bool ConvFLT( const char *name, char *buffer, int filesize )
VFS_Close( f );
// scan for transparency
for (i = 0; i < pic.width * pic.height; i++)
for (i = 0; i < pic->width * pic->height; i++)
{
if( Data[i] == 247 )
{
pic.flags |= IMAGE_HAS_ALPHA;
pic->flags |= IMAGE_HAS_ALPHA;
break;
}
}
pixels = pic.width * pic.height;
pic.size = pixels * 4;
pic.buffer = (byte *)Mem_Alloc( zonepool, pic.size );
pixels = pic->width * pic->height;
pic->size = pixels * 4;
pic->buffer = (byte *)Mem_Alloc( zonepool, pic->size );
Conv_GetPaletteD1();
Conv_Copy8bitRGBA( Data, pic.buffer, pixels );
Conv_Copy8bitRGBA( Data, pic->buffer, pixels );
Mem_Free( Data );
FS_StripExtension( (char *)name );
FS_SaveImage(va("%s/textures/%s.tga", gs_gamedir, name ), &pic ); // save converted image
Conv_CreateShader( name, &pic );
Mem_Free( pic.buffer ); // release buffer
Msg("%s.flat\n", name ); // echo to console about current texture
return pic;
}
return true;
bool ConvSKN( const char *name, char *buffer, int filesize )
{
rgbdata_t *pic = Conv_FlatImage( name, buffer, filesize );
if( pic )
{
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 );
Mem_Free( pic->buffer ); // release buffer
Mem_Free( pic ); // release buffer
Msg("%s.skin\n", skinpath ); // echo to console about current skin
return true;
}
return false;
}
bool ConvFLT( const char *name, char *buffer, int filesize )
{
rgbdata_t *pic = Conv_FlatImage( name, buffer, filesize );
if( pic )
{
FS_StripExtension( (char *)name );
FS_SaveImage(va("%s/textures/%s.tga", gs_gamedir, name ), pic );
Conv_CreateShader( name, pic, NULL, 0, 0 );
Mem_Free( pic->buffer ); // release buffer
Mem_Free( pic ); // release buffer
Msg("%s.flat\n", name ); // echo to console about current texture
return true;
}
return false;
}
/*
@ -191,7 +220,7 @@ bool ConvMIP( const char *name, char *buffer, int filesize )
FS_StripExtension( (char *)name );
FS_SaveImage(va("%s/textures/%s.tga", gs_gamedir, name ), &pic ); // save converted image
Conv_CreateShader( name, &pic );
Conv_CreateShader( name, &pic, NULL, 0, 0 );
Mem_Free( pic.buffer ); // release buffer
Msg("%s.mip\n", name ); // echo to console about current texture

62
idconv/conv_wally.c Normal file
View File

@ -0,0 +1,62 @@
//=======================================================================
// Copyright XashXT Group 2007 ©
// conv_pcximage.c - convert pcximages
//=======================================================================
#include "idconv.h"
/*
============
ConvWAL
============
*/
bool ConvWAL( const char *name, char *buffer, int filesize )
{
wal_t wal;
int pixels, ofs[4], mipsize;
int i, flags, value, contents; // wal additional parms
string shadername;
rgbdata_t pic;
if (filesize < (int)sizeof(wal))
{
MsgWarn("LoadWAL: file (%s) have invalid size\n", name );
return false;
}
Mem_Copy(&wal, buffer, sizeof(wal));
memset( &pic, 0, sizeof(pic));
flags = LittleLong(wal.flags);
value = LittleLong(wal.value);
contents = LittleLong(wal.contents);
pic.width = LittleLong(wal.width);
pic.height = LittleLong(wal.height);
for(i = 0; i < 4; i++) ofs[i] = LittleLong(wal.offsets[i]);
if(!Lump_ValidSize((char *)name, &pic, 512, 512 ))
return false;
pixels = pic.width * pic.height;
pic.size = pixels * 4;
mipsize = (int)sizeof(wal) + ofs[0] + pixels;
if( pixels > 256 && filesize < mipsize )
{
// note: wal's with dimensions < 32 have invalid sizes.
MsgWarn("LoadWAL: file (%s) have invalid size\n", name );
return false;
}
pic.buffer = Mem_Alloc( zonepool, pic.size );
pic.numLayers = 1;
pic.type = PF_RGBA_32;
Conv_GetPaletteQ2(); // hardcoded
Conv_Copy8bitRGBA( buffer + ofs[0], pic.buffer, pixels );
FS_StripExtension( (char *)name );
FS_SaveImage(va("%s/%s.tga", gs_gamedir, name ), &pic ); // save converted image
FS_FileBase( name, shadername );
Conv_CreateShader( name, &pic, wal.animname, flags, contents );
Mem_Free( pic.buffer ); // release buffer
Msg("%s.wal\n", name ); // echo to console about current texture
return true;
}

View File

@ -113,7 +113,7 @@ SOURCE="$(InputPath)"
# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
# Begin Source File
SOURCE=.\conv_hlsprite.c
SOURCE=.\conv_bsplumps.c
# End Source File
# Begin Source File
@ -129,16 +129,24 @@ SOURCE=.\conv_pcximage.c
# End Source File
# Begin Source File
SOURCE=.\conv_q2sprite.c
# End Source File
# Begin Source File
SOURCE=.\conv_shader.c
# End Source File
# Begin Source File
SOURCE=.\conv_sprite.c
# End Source File
# Begin Source File
SOURCE=.\conv_sprite2.c
# End Source File
# Begin Source File
SOURCE=.\conv_wadlumps.c
# End Source File
# Begin Source File
SOURCE=.\conv_wally.c
# End Source File
# End Group
# Begin Group "Header Files"

View File

@ -29,9 +29,9 @@ bool ConvFLT( const char *name, char *buffer, int filesize );
bool ConvMIP( const char *name, char *buffer, int filesize );
bool ConvLMP( const char *name, char *buffer, int filesize );
bool ConvFNT( const char *name, char *buffer, int filesize );
// image common utils
bool PCX_ConvertImage( const char *name, char *buffer, int filesize );
bool ConvWAL( const char *name, char *buffer, int filesize );
bool ConvSKN( const char *name, char *buffer, int filesize );
bool ConvBSP( const char *name, char *buffer, int filesize );
//=====================================
// lump utils
@ -41,9 +41,10 @@ bool PCX_ConvertImage( const char *name, char *buffer, int filesize );
#define LUMP_DECAL 2
#define LUMP_QFONT 3
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);
bool Conv_CreateShader( const char *name, rgbdata_t *pic );
bool Conv_CreateShader( const char *name, rgbdata_t *pic, const char *animchain, int imageflags, int contents );
void Conv_GetPaletteLMP( byte *pal, int rendermode );
void Conv_GetPalettePCX( byte *pal );
void Conv_GetPaletteQ2( void );

View File

@ -441,12 +441,12 @@ void stringlistappend(stringlist_t *list, char *text)
{
oldstrings = list->strings;
list->maxstrings += 4096;
list->strings = Malloc(list->maxstrings * sizeof(*list->strings));
list->strings = Mem_Alloc(fs_mempool, list->maxstrings * sizeof(*list->strings));
if (list->numstrings) Mem_Copy(list->strings, oldstrings, list->numstrings * sizeof(*list->strings));
if (oldstrings) Mem_Free(oldstrings);
if (oldstrings) Mem_Free( oldstrings );
}
textlen = com_strlen(text) + 1;
list->strings[list->numstrings] = Malloc(textlen);
list->strings[list->numstrings] = Mem_Alloc( fs_mempool, textlen);
Mem_Copy(list->strings[list->numstrings], text, textlen);
list->numstrings++;
}
@ -683,7 +683,7 @@ pack_t *FS_LoadPackPAK(const char *packfile)
return NULL;
}
info = (dpackfile_t *)Malloc( sizeof(*info) * numpackfiles);
info = (dpackfile_t *)Mem_Alloc( fs_mempool, sizeof(*info) * numpackfiles);
lseek (packhandle, header.dirofs, SEEK_SET);
if(header.dirlen != read (packhandle, (void *)info, header.dirlen))
{
@ -759,7 +759,7 @@ pack_t *FS_LoadPackPK2(const char *packfile)
return NULL;
}
info = (dpak2file_t *)Malloc( sizeof(*info) * numpackfiles);
info = (dpak2file_t *)Mem_Alloc( fs_mempool, sizeof(*info) * numpackfiles);
lseek (packhandle, header.dirofs, SEEK_SET);
if(header.dirlen != read(packhandle, (void *)info, header.dirlen))
{
@ -2373,7 +2373,7 @@ int FS_Seek (file_t* file, fs_offset_t offset, int whence)
// We need a big buffer to force inflating into it directly
buffersize = 2 * sizeof (file->buff);
buffer = (unsigned char *)Malloc(buffersize);
buffer = (byte *)Malloc(buffersize );
// Skip all data until we reach the requested offset
while (offset > file->position)
@ -2539,7 +2539,40 @@ Look for a file in the packages and in the filesystem
*/
bool FS_FileExists (const char *filename)
{
return (FS_FindFile(filename, NULL, true) != NULL);
if(FS_FindFile( filename, NULL, true))
return true;
if( fs_searchwads )
{
wadtype_t *type;
wadfile_t *w; // names will be associated with lump types
const char *ext = FS_FileExtension( filename );
string lumpname;
int k, i;
FS_FileBase( filename, lumpname );
// lookup all wads in list
for( k = 0; k < Mem_ArraySize( fs_searchwads ); k++ )
{
w = (wadfile_t *)Mem_GetElement( fs_searchwads, k );
if( !w ) continue;
for(i = 0; i < (uint)w->numlumps; i++)
{
for (type = wad_types; type->ext; type++)
{
// associate extension with lump->type
if((!com_stricmp( ext, type->ext ) && type->type == (int)w->lumps[i].type))
{
if(!com_stricmp( lumpname, w->lumps[i].name ))
return true;
}
}
}
}
}
return false;
}

View File

@ -350,443 +350,6 @@ bool Image_Processing( const char *name, rgbdata_t **pix )
return false;
}
/*
============
LoadPAL
============
*/
bool LoadPAL( char *name, char *buffer, int filesize )
{
if( filesize != 768 )
{
MsgWarn("LoadPAL: file (%s) have invalid size\n", name );
return false;
}
// not a real image, just palette lump
Image_GetPaletteLMP( buffer, LUMP_NORMAL );
return true;
}
/*
============
LoadFNT
============
*/
bool LoadFNT( char *name, char *buffer, int filesize )
{
qfont_t font;
byte *pal, *fin;
int i, pixels, fullsize;
int numcolors;
if(filesize < (int)sizeof(font))
{
MsgWarn("LoadFNT: file (%s) have invalid size\n", name );
return false;
}
Mem_Copy(&font, buffer, sizeof(font));
// swap lumps
font.width = LittleShort(font.width);
font.height = LittleShort(font.height);
font.rowcount = LittleShort(font.rowcount);
font.rowheight = LittleShort(font.rowheight);
for(i = 0; i < 256; i++)
{
font.fontinfo[i].startoffset = LittleShort( font.fontinfo[i].startoffset );
font.fontinfo[i].charwidth = LittleShort( font.fontinfo[i].charwidth );
}
// last sixty four bytes - what the hell ????
fullsize = sizeof(qfont_t)-4+(128 * font.width * QCHAR_WIDTH) + sizeof(short) + 768 + 64;
if( fullsize != filesize )
{
// oldstyle font: "conchars" or "creditsfont"
image_width = 256; // hardcoded
image_height = font.height;
}
else
{
// Half-Life 1.1.0.0 font style (qfont_t)
image_width = font.width * QCHAR_WIDTH;
image_height = font.height;
}
image_num_layers = 1;
image_type = PF_RGBA_32;
if(!Image_ValidSize( name )) return false;
fin = buffer + sizeof(font) - 4;
pixels = ( image_width * image_height );
pal = fin + pixels;
numcolors = BuffLittleShort( pal ), pal += sizeof(short);
image_flags |= IMAGE_HAS_ALPHA; // fonts always have transparency
if( numcolors == 768 )
{
// newstyle font
Image_GetPaletteLMP( pal, LUMP_QFONT );
}
else if( numcolors == 256 )
{
// oldstyle font
Image_GetPaletteLMP( pal, LUMP_TRANSPARENT );
}
else
{
MsgWarn("LoadFNT: file (%s) have invalid palette size %d\n", name, numcolors );
return false;
}
// FIXME: convert this to quake-style conchars ?
return FS_AddMipmapToPack( fin, image_width, image_height );
}
/*
==============
LoadWAL
==============
*/
bool LoadWAL( char *name, char *buffer, int filesize )
{
wal_t wal;
int pixels, ofs[4], mipsize;
int i, flags, value, contents; // wal additional parms
if (filesize < (int)sizeof(wal))
{
MsgWarn("LoadWAL: file (%s) have invalid size\n", name );
return false;
}
Mem_Copy(&wal, buffer, sizeof(wal));
flags = LittleLong(wal.flags);
value = LittleLong(wal.value);
contents = LittleLong(wal.contents);
image_width = LittleLong(wal.width);
image_height = LittleLong(wal.height);
for(i = 0; i < 4; i++) ofs[i] = LittleLong(wal.offsets[i]);
if(!Image_ValidSize( name )) return false;
pixels = image_width * image_height;
mipsize = (int)sizeof(wal) + ofs[0] + pixels;
if( pixels > 256 && filesize < mipsize )
{
// note: wal's with dimensions < 32 have invalid sizes.
MsgWarn("LoadWAL: file (%s) have invalid size\n", name );
return false;
}
image_num_layers = 1;
image_type = PF_RGBA_32;
Image_GetPaletteQ2(); // hardcoded
return FS_AddMipmapToPack( buffer + ofs[0], image_width, image_height );
}
bool LoadFLT( char *name, char *buffer, int filesize )
{
flat_t flat;
vfile_t *f;
word column_loop, row_loop;
int i, column_offset, pointer_position, first_pos;
byte *Data, post, topdelta, length;
if(filesize < (int)sizeof(flat))
{
MsgWarn("LoadFLAT: file (%s) have invalid size\n", name );
return false;
}
// stupid copypaste from DevIL, but it works
f = VFS_Create( buffer, filesize );
first_pos = VFS_Tell( f );
VFS_Read(f, &flat, sizeof(flat));
image_width = LittleShort( flat.width );
image_height = LittleShort( flat.height );
flat.desc[0] = LittleShort( flat.desc[0] );
flat.desc[1] = LittleShort( flat.desc[1] );
if(!Image_ValidSize( name )) return false;
Data = (byte *)Mem_Alloc( Sys.imagepool, image_width * image_height );
memset( Data, 247, image_width * image_height ); // set default transparency
image_num_layers = 1;
image_type = PF_RGBA_32;
for( column_loop = 0; column_loop < image_width; column_loop++ )
{
VFS_Read(f, &column_offset, sizeof(int));
pointer_position = VFS_Tell( f );
VFS_Seek( f, first_pos + column_offset, SEEK_SET );
while( 1 )
{
if(VFS_Read(f, &topdelta, 1) != 1) return false;
if(topdelta == 255) break;
if(VFS_Read(f, &length, 1) != 1) return false;
if(VFS_Read(f, &post, 1) != 1) return false;
for (row_loop = 0; row_loop < length; row_loop++)
{
if(VFS_Read(f, &post, 1) != 1) return false;
if(row_loop + topdelta < image_height)
Data[(row_loop + topdelta) * image_width + column_loop] = post;
}
VFS_Read(f, &post, 1);
}
VFS_Seek(f, pointer_position, SEEK_SET );
}
VFS_Close( f );
// scan for transparency
for (i = 0; i < image_width * image_height; i++)
{
if( Data[i] == 247 )
{
image_flags |= IMAGE_HAS_ALPHA;
break;
}
}
Image_GetPaletteD1();
FS_AddMipmapToPack( Data, image_width, image_height );
Mem_Free( Data );
return true;
}
/*
============
LoadLMP
============
*/
bool LoadLMP( char *name, char *buffer, int filesize )
{
lmp_t lmp;
byte *fin, *pal;
int pixels;
if (filesize < (int)sizeof(lmp))
{
MsgWarn("LoadLMP: file (%s) have invalid size\n", name );
return false;
}
fin = buffer;
Mem_Copy(&lmp, fin, sizeof(lmp));
image_width = LittleLong(lmp.width);
image_height = LittleLong(lmp.height);
fin += sizeof(lmp);
pixels = image_width * image_height;
if (filesize < (int)sizeof(lmp) + pixels)
{
MsgWarn("LoadLMP: file (%s) have invalid size %d\n", name, filesize );
return false;
}
if(!Image_ValidSize( name )) return false;
image_size = pixels * 4;
image_num_mips = 1;
image_rgba = (byte *)Mem_Alloc(Sys.imagepool, image_size );
image_num_layers = 1;
image_type = PF_RGBA_32;
// half-life 1.0.0.1 lmp version with palette
if( filesize > (int)sizeof(lmp) + pixels )
{
int numcolors;
pal = fin + pixels;
numcolors = BuffLittleShort( pal );
if( numcolors != 256 ) pal = NULL; // corrupted lump ?
else pal += sizeof(short);
}
else pal = NULL;
if(fin[0] == 255) image_flags |= IMAGE_HAS_ALPHA;
Image_GetPaletteLMP( pal, LUMP_NORMAL );
Image_Copy8bitRGBA( fin, image_rgba, pixels );
return true;
}
/*
============
LoadMIP
============
*/
bool LoadMIP( char *name, char *buffer, int filesize )
{
mip_t mip;
byte *fin, *pal;
int ofs[4], rendermode;
int i, pixels, numcolors;
if (filesize < (int)sizeof(mip))
{
MsgWarn("LoadMIP: file (%s) have invalid size\n", name );
return false;
}
Mem_Copy(&mip, buffer, sizeof(mip));
image_width = LittleLong(mip.width);
image_height = LittleLong(mip.height);
for(i = 0; i < 4; i++) ofs[i] = LittleLong(mip.offsets[i]);
pixels = image_width * image_height;
image_num_layers = 1;
image_type = PF_RGBA_32;
if(!com_stricmp( name, "conchars" ))
{
// greatest hack from id software
image_width = image_height = 128;
image_flags |= IMAGE_HAS_ALPHA;
rendermode = LUMP_QFONT;
pal = NULL; // clear palette
fin = buffer;
}
else if(filesize >= (int)sizeof(mip) + ((pixels * 85)>>6) + sizeof(short) + 768)
{
// half-life 1.0.0.1 mip version with palette
fin = buffer + mip.offsets[0];
pal = buffer + mip.offsets[0] + (((image_width * image_height) * 85)>>6);
numcolors = BuffLittleShort( pal );
if(numcolors != 256) pal = NULL; // corrupted mip ?
else pal += sizeof(short); // skip colorsize
// detect rendermode
if( name[0] == '{' )
{
// qlumpy used this color for transparent textures, otherwise it's decals
if(pal[255*3+0] == 0 && pal[255*3+1] == 0 && pal[255*3+2] == 255)
rendermode = LUMP_TRANSPARENT;
else rendermode = LUMP_DECAL;
image_flags |= IMAGE_HAS_ALPHA;
}
else rendermode = LUMP_NORMAL;
}
else if(filesize >= (int)sizeof(mip) + ((pixels * 85)>>6))
{
// quake1 1.01 mip version without palette
pal = NULL; // clear palette
rendermode = LUMP_NORMAL;
fin = buffer + mip.offsets[0];
}
else
{
MsgWarn("LoadMIP: lump (%s) is corrupted\n", name );
return false;
}
if(!Image_ValidSize( name )) return false;
Image_GetPaletteLMP( pal, rendermode );
return FS_AddMipmapToPack( fin, image_width, image_height );
}
/*
============
LoadPCX
============
*/
bool LoadPCX( char *name, char *buffer, int filesize )
{
pcx_t pcx;
uint *trans;
int s, i, p, x, y, x2, dataByte;
byte *pix, *pbuf, *palette, *fin, *enddata;
fin = buffer;
Mem_Copy(&pcx, fin, sizeof(pcx));
fin += sizeof(pcx);
// probably it's not pcx file
if (pcx.manufacturer != 0x0a || pcx.version != 5 || pcx.encoding != 1 ) return false;
if (filesize < (int)sizeof(pcx) + 768)
{
MsgWarn("LoadPCX: file (%s) have invalid size\n", name );
return false;
}
pcx.xmax = LittleShort (pcx.xmax);
pcx.xmin = LittleShort (pcx.xmin);
pcx.ymax = LittleShort (pcx.ymax);
pcx.ymin = LittleShort (pcx.ymin);
pcx.hres = LittleShort (pcx.hres);
pcx.vres = LittleShort (pcx.vres);
pcx.bytes_per_line = LittleShort (pcx.bytes_per_line);
pcx.palette_type = LittleShort (pcx.palette_type);
image_width = pcx.xmax + 1 - pcx.xmin;
image_height = pcx.ymax + 1 - pcx.ymin;
if( pcx.bits_per_pixel != 8 || pcx.manufacturer != 0x0a || pcx.version != 5 || pcx.encoding != 1)
{
MsgWarn("LoadPCX: (%s) have illegal pixel size '%d'\n", name, pcx.bits_per_pixel );
return false;
}
if(!Image_ValidSize( name )) return false;
palette = buffer + filesize - 768;
image_num_layers = 1;
image_num_mips = 1;
image_type = PF_RGBA_32;
if(palette)
{
image_palette = Mem_Alloc( Sys.imagepool, 768 );
Mem_Copy( image_palette, palette, 768 );
}
s = image_width * image_height;
image_size = image_width * image_height * 4;
pbuf = (byte *)Mem_Alloc( Sys.imagepool, s );
image_rgba = (byte *)Mem_Alloc( Sys.imagepool, image_size );
trans = (uint *)image_rgba;
enddata = palette;
for (y = 0; y < image_height && fin < enddata; y++)
{
pix = pbuf + y * image_width;
for (x = 0; x < image_width && fin < enddata;)
{
dataByte = *fin++;
if(dataByte >= 0xC0)
{
if (fin >= enddata) break;
x2 = x + (dataByte & 0x3F);
dataByte = *fin++;
if (x2 > image_width) x2 = image_width; // technically an error
while(x < x2) pix[x++] = dataByte;
}
else pix[x++] = dataByte;
}
// the number of bytes per line is always forced to an even number
fin += pcx.bytes_per_line - image_width;
while(x < image_width) pix[x++] = 0;
}
Image_GetPalettePCX( palette );
// convert to rgba
for (i = 0; i < s; i++)
{
p = pbuf[i];
if (p == 255)
{
image_flags |= IMAGE_HAS_ALPHA; // found alpha channel
((byte *)&trans[i])[0] = ((byte *)&d_currentpal[0])[0];
((byte *)&trans[i])[1] = ((byte *)&d_currentpal[0])[1];
((byte *)&trans[i])[2] = ((byte *)&d_currentpal[0])[2];
((byte *)&trans[i])[3] = ((byte *)&d_currentpal[p])[3];
}
else trans[i] = d_currentpal[p];
}
Mem_Free( pbuf ); // free compressed image
return true;
}
/*
=============
LoadTGA
@ -1909,23 +1472,9 @@ loadformat_t load_formats[] =
{"textures/%s%s.%s", "dds", LoadDDS},
{"textures/%s%s.%s", "tga", LoadTGA},
{"textures/%s%s.%s", "jpg", LoadJPG},
{"textures/%s%s.%s", "mip", LoadMIP},
{"textures/%s%s.%s", "wal", LoadWAL},
{"textures/%s%s.%s", "pcx", LoadPCX},
{"textures/%s%s.%s", "lmp", LoadLMP},
{"textures/%s%s.%s", "fnt", LoadFNT},
{"textures/%s%s.%s", "flt", LoadFLT},
{"textures/%s%s.%s", "pal", LoadPAL},
{"%s%s.%s", "dds", LoadDDS},
{"%s%s.%s", "tga", LoadTGA},
{"%s%s.%s", "jpg", LoadJPG},
{"%s%s.%s", "mip", LoadMIP},
{"%s%s.%s", "wal", LoadWAL},
{"%s%s.%s", "pcx", LoadPCX},
{"%s%s.%s", "lmp", LoadLMP},
{"%s%s.%s", "fnt", LoadFNT},
{"%s%s.%s", "flt", LoadFLT},
{"%s%s.%s", "pal", LoadPAL},
{NULL, NULL}
};

View File

@ -202,7 +202,7 @@ static void _mem_freeblock(memheader_t *mem, const char *filename, int fileline)
// memheader has been unlinked, do the actual free now
pool->totalsize -= mem->size;
if ((clump = mem->clump))
if((clump = mem->clump))
{
if (clump->sentinel1 != MEMCLUMP_SENTINEL)
Sys_Error("Mem_Free: trashed clump sentinel 1 (free at %s:%i)", filename, fileline);

View File

@ -44,7 +44,8 @@ bool SC_AddScriptToStack(const char *name, byte *buffer, int size)
script++;
com_strncpy(script->filename, name, sizeof(script->filename));
script->buffer = buffer;
script->buffer = Mem_Alloc( Sys.basepool, size );
Mem_Move( Sys.basepool, &script->buffer, buffer, size );
script->line = scriptline = 1;
script->script_p = script->buffer;
script->end_p = script->buffer + size;

View File

@ -500,8 +500,8 @@ print into window console
void Sys_Print(const char *pMsg)
{
const char *msg;
char buffer[MAX_INPUTLINE * 2];
char logbuf[MAX_INPUTLINE * 2];
char buffer[MAX_INPUTLINE * 8];
char logbuf[MAX_INPUTLINE * 8];
char *b = buffer;
char *c = logbuf;
int i = 0;
@ -584,7 +584,7 @@ void Sys_MsgDev( int level, const char *pMsg, ... )
com_vsprintf (text, pMsg, argptr);
va_end (argptr);
switch(level)
switch( level )
{
case D_INFO:
Sys_Print( text );
@ -602,7 +602,7 @@ void Sys_MsgDev( int level, const char *pMsg, ... )
Sys_Print( text );
break;
case D_MEMORY:
Sys_Print(va("^6Mem: ^7%s", text));
Sys_Print( text );
break;
}
}

View File

@ -4,4 +4,4 @@
#include "../rundll.h"
Run32( host_convertor );
Run( host_convertor );

View File

@ -14,7 +14,7 @@ RES = $(MAINTARGET).rc
default: $(MAINTARGET).exe
$(MAINTARGET).exe: $(MAINTARGET).obj idconv.res
$(link) $(OBJS) idconv.res /out:"idconv.exe" /subsystem:windows /opt:nowin98 /nodefaultlib:"libc.lib"
$(link) $(OBJS) idconv.res /out:"idconv.exe" /subsystem:console /opt:nowin98 /nodefaultlib:"libc.lib"
@del $(MAINTARGET).obj $(MAINTARGET).lib $(MAINTARGET).exp $(MAINTARGET).res > nul
@copy $(MAINTARGET).exe D:\Xash3D\bin\$(MAINTARGET).exe
@del $(MAINTARGET).exe

53
physic/physic.plg Normal file
View File

@ -0,0 +1,53 @@
<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>

View File

@ -84,7 +84,10 @@ SPRITE MODELS
.spr Half-Life sprites
==============================================================================
*/
#define SPRITE_VERSION 2
#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"
@ -103,6 +106,19 @@ SPRITE MODELS
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;
@ -115,7 +131,7 @@ typedef struct
int numframes;
float beamlength; // software rendering stuff
synctype_t synctype;
} dsprite_t;
} dspritehl_t;
typedef struct
{

View File

@ -74,7 +74,7 @@ void *R_SpriteLoadFrame (model_t *mod, void *pin, mspriteframe_t **ppframe, int
void R_SpriteLoadModel( model_t *mod, void *buffer )
{
int i, size, version, numframes;
dsprite_t *pin;
dspritehl_t *pin;
short *numi;
msprite_t *psprite;
dframetype_t *pframetype;
@ -82,12 +82,12 @@ void R_SpriteLoadModel( model_t *mod, void *buffer )
vec4_t rgbacolor;
float framerate;
pin = (dsprite_t *)buffer;
pin = (dspritehl_t *)buffer;
version = LittleLong (pin->version);
if( version != SPRITE_VERSION)
if( version != SPRITEHL_VERSION)
{
Msg("Warning: %s has wrong version number (%i should be %i)", mod->name, version, SPRITE_VERSION );
Msg("Warning: %s has wrong version number (%i should be %i)", mod->name, version, SPRITEHL_VERSION );
return;
}
ResetRGBA( rgbacolor );

197
render/render.plg Normal file
View File

@ -0,0 +1,197 @@
<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>