12 Aug 2007

This commit is contained in:
g-cont 2007-08-12 00:00:00 +04:00 committed by Alibek Omarov
parent 4ae8e99b83
commit 571c2d208c
74 changed files with 3894 additions and 3699 deletions

View File

@ -1,10 +1,3 @@
//==================================================
// DELETE
//==================================================
1. убить формат md2
//==================================================
// FIXME
//==================================================
@ -13,39 +6,23 @@ render.dll
2. Избавиться от pcx совсем
3. упорядочить типы загрузки
4. избавиться от LightImageScale
5. пофиксить баг с высвобождением моделей OK
6. переписать refexport\refimport OK
7. погасить рендер при фатальной ошибке OK
8. наладить установку прозрачности
engine.dll
1. избавиться от Com_Sprintf
2. заменить в Net_msg код на BuffBigShort
3. полный дебуг MSG_Read\MSG_Write OK
4. пофиксить проблему с qport OK
5. разобраться с SZ Overflow
1. избавиться от Com_Sprintf OK
2. убить все ссылки на .md2(заменить на mdl)
launcher.dll
1. Сделать read-only консоли OK
2. Пофиксить утечки win консоли OK
3. Оставить только одну консоль win32 OK
4. Сделать HOOK для определения типа вывода OK
5. подключить кастомный хандлер для ошибок
1. подключить кастомный хандлер для ошибок
platform.dll
1. разобраться наконец с записью файлов
2. переписать LoadJPG чтобы он читал из буффера OK
3. переписать загрузчик, чтобы он грузил кубемапы в один буффер OK
4. Довести до ума виртуальную файловую систему OK
5. Сделать валидатор game-директорий
6. Переписать SC_ParseToken
2. Сделать валидатор game-директорий
3. Переписать SC_ParseToken
4. пофиксить странный вылет c компилом в релизе
{
studiomdl - апгрейд до версии 0.2
1. тщательный тест всех возможностей OK
2. заменить идиоцкие пути на Add_GameHierarchy OK
3. Окончательно настроить все лимиты
1. Окончательно настроить все лимиты
bsplib
1. сделать парсинг "ambient" из карты
@ -64,6 +41,7 @@ platform.dll
//==================================================
// то, что уже готово
//==================================================
+пофикшен баг с автоматическим рассчетом хулла для первой энтити на карте
+существенное уменьшение размера сейвов
+новая организация сейвов
+добавлен новый интерфейс - виртуальная файловая система

View File

@ -6,6 +6,41 @@
--------------------Configuration: editor - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating command line "rc.exe /l 0x409 /fo"..\temp\editor\!debug/editor.res" /d "_DEBUG" "D:\XASH3D\src_main\!source\editor\editor.rc""
Creating temporary file "C:\Temp\RSP5CC.tmp" with contents
[
/nologo /MTd /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\guiutils.c"
"D:\XASH3D\src_main\!source\editor\guiforms.c"
]
Creating command line "cl.exe @C:\Temp\RSP5CC.tmp"
Creating temporary file "C:\Temp\RSP5CD.tmp" with contents
[
kernel32.lib user32.lib gdi32.lib comctl32.lib comdlg32.lib /nologo /dll /incremental:yes /pdb:"..\temp\editor\!debug/editor.pdb" /debug /machine:I386 /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\guiutils.obj"
"\XASH3D\src_main\!source\temp\editor\!debug\guiforms.obj"
"\XASH3D\src_main\!source\temp\editor\!debug\editor.res"
]
Creating command line "link.exe @C:\Temp\RSP5CD.tmp"
Creating temporary file "C:\Temp\RSP5CE.bat" with contents
[
@echo off
copy \XASH3D\src_main\!source\temp\editor\!debug\editor.dll "D:\Xash3D\bin\editor.dll"
]
Creating command line "C:\Temp\RSP5CE.bat"
Compiling resources...
Compiling...
editor.c
guiutils.c
guiforms.c
Generating Code...
Linking...
Creating library ..\temp\editor\!debug/editor.lib and object ..\temp\editor\!debug/editor.exp
<h3>Output Window</h3>
Performing Custom Build Step on \XASH3D\src_main\!source\temp\editor\!debug\editor.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.

View File

@ -579,7 +579,7 @@ void SCR_PlayCinematic (char *arg)
dot = strstr (arg, ".");
if (dot && !strcmp (dot, ".pcx"))
{ // static pcx image
Com_sprintf (name, sizeof(name), "pics/%s", arg);
sprintf (name, "pics/%s", arg);
SCR_LoadPCX (name, &cin.pic, &palette, &cin.width, &cin.height);
cl.cinematicframe = -1;
cl.cinematictime = 1;
@ -598,7 +598,7 @@ void SCR_PlayCinematic (char *arg)
return;
}
Com_sprintf (name, sizeof(name), "video/%s", arg);
sprintf (name, "video/%s", arg);
cl.cinematic_file = FS_Open(name, "rb" );
if (!cl.cinematic_file)
{

View File

@ -206,7 +206,7 @@ Returns the entity number and the header bits
=================
*/
int bitcounts[32]; /// just for protocol profiling
int CL_ParseEntityBits (unsigned *bits)
int CL_ParseEntityBits (uint *bits)
{
unsigned b, total;
int i;
@ -230,14 +230,11 @@ int CL_ParseEntityBits (unsigned *bits)
}
// count the bits for net profiling
for (i=0 ; i<32 ; i++)
if (total&(1<<i))
bitcounts[i]++;
for (i = 0; i < 32; i++)
if (total&(1<<i)) bitcounts[i]++;
if (total & U_NUMBER16)
number = MSG_ReadShort (&net_message);
else
number = MSG_ReadByte (&net_message);
if (total & U_NUMBER16) number = MSG_ReadShort (&net_message);
else number = MSG_ReadByte (&net_message);
*bits = total;
@ -259,71 +256,44 @@ void CL_ParseDelta (entity_state_t *from, entity_state_t *to, int number, int bi
VectorCopy (from->origin, to->old_origin);
to->number = number;
if (bits & U_MODEL)
to->modelindex = MSG_ReadByte (&net_message);
if (bits & U_WEAPONMODEL)
to->weaponmodel = MSG_ReadByte (&net_message);
if (bits & U_BODY)
to->body = MSG_ReadByte (&net_message);
if (bits & U_SEQUENCE)
to->sequence = MSG_ReadByte (&net_message);
if (bits & U_MODEL) to->modelindex = MSG_ReadByte (&net_message);
if (bits & U_WEAPONMODEL) to->weaponmodel = MSG_ReadByte (&net_message);
if (bits & U_FRAME8)
to->frame = MSG_ReadByte (&net_message);
if (bits & U_FRAME16)
to->frame = MSG_ReadShort (&net_message);
if (bits & U_FRAME8 ) to->frame = MSG_ReadByte (&net_message);
if (bits & U_FRAME16) to->frame = MSG_ReadShort (&net_message);
if ((bits & U_SKIN8) && (bits & U_SKIN16)) //used for laser colors
to->skinnum = MSG_ReadLong(&net_message);
else if (bits & U_SKIN8)
to->skinnum = MSG_ReadByte(&net_message);
else if (bits & U_SKIN16)
to->skinnum = MSG_ReadShort(&net_message);
if (bits & U_SKIN8 ) to->skin = MSG_ReadByte(&net_message);
if (bits & U_SKIN16) to->skin = MSG_ReadShort(&net_message);
if ( (bits & (U_EFFECTS8|U_EFFECTS16)) == (U_EFFECTS8|U_EFFECTS16) )
to->effects = MSG_ReadLong(&net_message);
else if (bits & U_EFFECTS8)
to->effects = MSG_ReadByte(&net_message);
else if (bits & U_EFFECTS16)
to->effects = MSG_ReadShort(&net_message);
else if (bits & U_EFFECTS8 ) to->effects = MSG_ReadByte(&net_message);
else if (bits & U_EFFECTS16) to->effects = MSG_ReadShort(&net_message);
if ( (bits & (U_RENDERFX8|U_RENDERFX16)) == (U_RENDERFX8|U_RENDERFX16) )
to->renderfx = MSG_ReadLong(&net_message);
else if (bits & U_RENDERFX8)
to->renderfx = MSG_ReadByte(&net_message);
else if (bits & U_RENDERFX16)
to->renderfx = MSG_ReadShort(&net_message);
else if (bits & U_RENDERFX8 ) to->renderfx = MSG_ReadByte(&net_message);
else if (bits & U_RENDERFX16) to->renderfx = MSG_ReadShort(&net_message);
if (bits & U_ORIGIN1)
to->origin[0] = MSG_ReadCoord (&net_message);
if (bits & U_ORIGIN2)
to->origin[1] = MSG_ReadCoord (&net_message);
if (bits & U_ORIGIN3)
to->origin[2] = MSG_ReadCoord (&net_message);
if (bits & U_ORIGIN1) to->origin[0] = MSG_ReadCoord (&net_message);
if (bits & U_ORIGIN2) to->origin[1] = MSG_ReadCoord (&net_message);
if (bits & U_ORIGIN3) to->origin[2] = MSG_ReadCoord (&net_message);
if (bits & U_ANGLE1)
to->angles[0] = MSG_ReadAngle(&net_message);
if (bits & U_ANGLE2)
to->angles[1] = MSG_ReadAngle(&net_message);
if (bits & U_ANGLE3)
to->angles[2] = MSG_ReadAngle(&net_message);
if (bits & U_ANGLE1) to->angles[0] = MSG_ReadAngle(&net_message);
if (bits & U_ANGLE2) to->angles[1] = MSG_ReadAngle(&net_message);
if (bits & U_ANGLE3) to->angles[2] = MSG_ReadAngle(&net_message);
if (bits & U_OLDORIGIN)
MSG_ReadPos (&net_message, to->old_origin);
if (bits & U_OLDORIGIN) MSG_ReadPos (&net_message, to->old_origin);
if (bits & U_SOUND)
to->sound = MSG_ReadByte (&net_message);
if (bits & U_SEQUENCE) to->sequence = MSG_ReadByte (&net_message);
if (bits & U_SOLID) to->solid = MSG_ReadShort (&net_message);
if (bits & U_ALPHA) to->alpha = MSG_ReadFloat (&net_message);
if (bits & U_SOUND) to->sound = MSG_ReadByte (&net_message);
if (bits & U_EVENT) to->event = MSG_ReadByte (&net_message);
else to->event = 0;
if (bits & U_EVENT)
to->event = MSG_ReadByte (&net_message);
else
to->event = 0;
if (bits & U_SOLID)
to->solid = MSG_ReadShort (&net_message);
if (bits & U_ALPHA)
to->alpha = MSG_ReadFloat (&net_message);
if (bits & U_BODY) to->body = MSG_ReadByte (&net_message);
}
/*
@ -825,19 +795,20 @@ struct model_s *S_RegisterSexedModel (entity_state_t *ent, char *base)
if (!model[0])
strcpy(model, "male");
Com_sprintf (buffer, sizeof(buffer), "players/%s/%s", model, base+1);
sprintf (buffer, "players/%s/%s", model, base+1);
mdl = re.RegisterModel(buffer);
if (!mdl) {
// not found, try default weapon model
Com_sprintf (buffer, sizeof(buffer), "players/%s/weapon.md2", model);
sprintf (buffer, "players/%s/weapon.md2", model);
mdl = re.RegisterModel(buffer);
if (!mdl) {
if (!mdl)
{
// no, revert to the male model
Com_sprintf (buffer, sizeof(buffer), "players/%s/%s", "male", base+1);
sprintf (buffer, "players/%s/%s", "male", base+1);
mdl = re.RegisterModel(buffer);
if (!mdl) {
// last try, default male weapon.md2
Com_sprintf (buffer, sizeof(buffer), "players/male/weapon.md2");
sprintf (buffer, "players/male/weapon.md2");
mdl = re.RegisterModel(buffer);
}
}
@ -951,9 +922,9 @@ void CL_AddPacketEntities (frame_t *frame)
// tweak the color of beams
if ( renderfx & RF_BEAM )
{ // the four beam colors are encoded in 32 bits of skinnum (hack)
{ // the four beam colors are encoded in 32 bits of skin (hack)
ent.alpha = 0.30;
ent.skinnum = (s1->skinnum >> ((rand() % 4)*8)) & 0xff;
ent.skin = (s1->skin >> ((rand() % 4)*8)) & 0xff;
ent.model = NULL;
}
else
@ -961,8 +932,8 @@ void CL_AddPacketEntities (frame_t *frame)
// set skin
if (s1->modelindex == 255)
{ // use custom player skin
ent.skinnum = 0;
ci = &cl.clientinfo[s1->skinnum & 0xff];
ent.skin = 0;
ci = &cl.clientinfo[s1->skin & 0xff];
ent.image = ci->skin;
ent.model = ci->model;
if (!ent.image || !ent.model)
@ -996,7 +967,7 @@ void CL_AddPacketEntities (frame_t *frame)
}
else
{
ent.skinnum = s1->skinnum;
ent.skin = s1->skin;
ent.image = NULL;
ent.model = cl.model_draw[s1->modelindex];
}
@ -1105,7 +1076,7 @@ void CL_AddPacketEntities (frame_t *frame)
}
ent.image = NULL; // never use a custom skin on others
ent.skinnum = 0;
ent.skin = 0;
ent.flags = 0;
ent.alpha = 0;
@ -1115,8 +1086,8 @@ void CL_AddPacketEntities (frame_t *frame)
if (s1->weaponmodel == 255)
{
// custom weapon
ci = &cl.clientinfo[s1->skinnum & 0xff];
i = (s1->skinnum >> 8); // 0 is default weapon model
ci = &cl.clientinfo[s1->skin & 0xff];
i = (s1->skin >> 8); // 0 is default weapon model
if (!cl_vwep->value || i > MAX_CLIENTWEAPONMODELS - 1)
i = 0;
ent.model = ci->weaponmodel[i];

View File

@ -288,7 +288,7 @@ void CL_ParseMuzzleFlash (void)
break;
case MZ_MACHINEGUN:
dl->color[0] = 1;dl->color[1] = 1;dl->color[2] = 0;
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0);
break;
case MZ_SHOTGUN:
@ -303,27 +303,27 @@ void CL_ParseMuzzleFlash (void)
case MZ_CHAINGUN1:
dl->radius = 200 + (rand()&31);
dl->color[0] = 1;dl->color[1] = 0.25;dl->color[2] = 0;
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0);
break;
case MZ_CHAINGUN2:
dl->radius = 225 + (rand()&31);
dl->color[0] = 1;dl->color[1] = 0.5;dl->color[2] = 0;
dl->die = cl.time + 0.1; // long delay
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0);
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0.05);
break;
case MZ_CHAINGUN3:
dl->radius = 250 + (rand()&31);
dl->color[0] = 1;dl->color[1] = 1;dl->color[2] = 0;
dl->die = cl.time + 0.1; // long delay
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0);
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0.033);
Com_sprintf(soundname, sizeof(soundname), "weapons/machgf%ib.wav", (rand() % 5) + 1);
sprintf(soundname, "weapons/machgf%ib.wav", (rand() % 5) + 1);
S_StartSound (NULL, i, CHAN_WEAPON, S_RegisterSound(soundname), volume, ATTN_NORM, 0.066);
break;
case MZ_RAILGUN:
@ -607,7 +607,7 @@ void CL_ParseMuzzleFlash2 (void)
dl->color[0] = 1;dl->color[1] = 1;dl->color[2] = 0;
CL_ParticleEffect (origin, vec3_origin, 0, 40);
CL_SmokeAndFlash(origin);
Com_sprintf(soundname, sizeof(soundname), "tank/tnkatk2%c.wav", 'a' + rand() % 5);
sprintf(soundname, "tank/tnkatk2%c.wav", 'a' + rand() % 5);
S_StartSound (NULL, ent, CHAN_WEAPON, S_RegisterSound(soundname), 1, ATTN_NORM, 0);
break;

View File

@ -114,7 +114,7 @@ void CL_DrawInventory (void)
{
item = index[i];
// search for a binding
Com_sprintf (binding, sizeof(binding), "use %s", cl.configstrings[CS_ITEMS+item]);
sprintf (binding, "use %s", cl.configstrings[CS_ITEMS+item]);
bind = "";
for (j=0 ; j<256 ; j++)
if (keybindings[j] && !strcasecmp (keybindings[j], binding))
@ -123,7 +123,7 @@ void CL_DrawInventory (void)
break;
}
Com_sprintf (string, sizeof(string), "%6s %3i %s", bind, cl.inventory[item],
sprintf (string, "%6s %3i %s", bind, cl.inventory[item],
cl.configstrings[CS_ITEMS+item] );
if (item != selected)
SetStringHighBit (string);

View File

@ -185,10 +185,8 @@ void CL_Record_f (void)
return;
}
//
// open the demo file
//
Com_sprintf (name, sizeof(name), "demos/%s.dm2", Cmd_Argv(1));
sprintf (name, "demos/%s.dm2", Cmd_Argv(1));
Msg ("recording to %s.\n", name);
cls.demofile = FS_Open (name, "wb");
@ -827,9 +825,9 @@ void CL_PingServers_f (void)
}
// send a packet to each address book entry
for (i=0 ; i<16 ; i++)
for (i = 0; i < 16; i++)
{
Com_sprintf (name, sizeof(name), "adr%i", i);
sprintf (name, "adr%i", i);
adrstring = Cvar_VariableString (name);
if (!adrstring || !adrstring[0])
continue;
@ -1194,40 +1192,43 @@ void CL_RequestNextDownload (void)
}
precache_check = CS_SOUNDS;
}
if (precache_check >= CS_SOUNDS && precache_check < CS_SOUNDS+MAX_SOUNDS) {
if (allow_download_sounds->value) {
if (precache_check == CS_SOUNDS)
precache_check++; // zero is blank
while (precache_check < CS_SOUNDS+MAX_SOUNDS &&
cl.configstrings[precache_check][0]) {
if (cl.configstrings[precache_check][0] == '*') {
if (precache_check >= CS_SOUNDS && precache_check < CS_SOUNDS+MAX_SOUNDS)
{
if (allow_download_sounds->value)
{
if (precache_check == CS_SOUNDS) precache_check++; // zero is blank
while (precache_check < CS_SOUNDS+MAX_SOUNDS && cl.configstrings[precache_check][0])
{
if (cl.configstrings[precache_check][0] == '*')
{
precache_check++;
continue;
}
Com_sprintf(fn, sizeof(fn), "sound/%s", cl.configstrings[precache_check++]);
if (!CL_CheckOrDownloadFile(fn))
return; // started a download
sprintf(fn, "sound/%s", cl.configstrings[precache_check++]);
if (!CL_CheckOrDownloadFile(fn)) return; // started a download
}
}
precache_check = CS_IMAGES;
}
if (precache_check >= CS_IMAGES && precache_check < CS_IMAGES+MAX_IMAGES) {
if (precache_check == CS_IMAGES)
precache_check++; // zero is blank
while (precache_check < CS_IMAGES+MAX_IMAGES &&
cl.configstrings[precache_check][0]) {
Com_sprintf(fn, sizeof(fn), "pics/%s.pcx", cl.configstrings[precache_check++]);
if (!CL_CheckOrDownloadFile(fn))
return; // started a download
if (precache_check >= CS_IMAGES && precache_check < CS_IMAGES+MAX_IMAGES)
{
if (precache_check == CS_IMAGES) precache_check++; // zero is blank
while (precache_check < CS_IMAGES+MAX_IMAGES && cl.configstrings[precache_check][0])
{
sprintf(fn, "pics/%s.pcx", cl.configstrings[precache_check++]);
if (!CL_CheckOrDownloadFile(fn)) return; // started a download
}
precache_check = CS_PLAYERSKINS;
}
// skins are special, since a player has three things to download:
// model, weapon model and skin
// so precache_check is now *3
if (precache_check >= CS_PLAYERSKINS && precache_check < CS_PLAYERSKINS + MAX_CLIENTS * PLAYER_MULT) {
if (allow_download_players->value) {
while (precache_check < CS_PLAYERSKINS + MAX_CLIENTS * PLAYER_MULT) {
if (precache_check >= CS_PLAYERSKINS && precache_check < CS_PLAYERSKINS + MAX_CLIENTS * PLAYER_MULT)
{
if (allow_download_players->value)
{
while (precache_check < CS_PLAYERSKINS + MAX_CLIENTS * PLAYER_MULT)
{
int i, n;
char model[MAX_QPATH], skin[MAX_QPATH], *p;
@ -1241,22 +1242,24 @@ void CL_RequestNextDownload (void)
if ((p = strchr(cl.configstrings[CS_PLAYERSKINS+i], '\\')) != NULL)
p++;
else
p = cl.configstrings[CS_PLAYERSKINS+i];
else p = cl.configstrings[CS_PLAYERSKINS+i];
strcpy(model, p);
p = strchr(model, '/');
if (!p)
p = strchr(model, '\\');
if (p) {
if (p)
{
*p++ = 0;
strcpy(skin, p);
} else
*skin = 0;
}
else *skin = 0;
switch (n) {
switch (n)
{
case 0: // model
Com_sprintf(fn, sizeof(fn), "players/%s/tris.md2", model);
if (!CL_CheckOrDownloadFile(fn)) {
sprintf(fn, "players/%s/tris.md2", model);
if (!CL_CheckOrDownloadFile(fn))
{
precache_check = CS_PLAYERSKINS + i * PLAYER_MULT + 1;
return; // started a download
}
@ -1264,8 +1267,9 @@ void CL_RequestNextDownload (void)
/*FALL THROUGH*/
case 1: // weapon model
Com_sprintf(fn, sizeof(fn), "players/%s/weapon.md2", model);
if (!CL_CheckOrDownloadFile(fn)) {
sprintf(fn, "players/%s/weapon.md2", model);
if (!CL_CheckOrDownloadFile(fn))
{
precache_check = CS_PLAYERSKINS + i * PLAYER_MULT + 2;
return; // started a download
}
@ -1273,8 +1277,9 @@ void CL_RequestNextDownload (void)
/*FALL THROUGH*/
case 2: // weapon skin
Com_sprintf(fn, sizeof(fn), "players/%s/weapon.pcx", model);
if (!CL_CheckOrDownloadFile(fn)) {
sprintf(fn, "players/%s/weapon.pcx", model);
if (!CL_CheckOrDownloadFile(fn))
{
precache_check = CS_PLAYERSKINS + i * PLAYER_MULT + 3;
return; // started a download
}
@ -1282,8 +1287,9 @@ void CL_RequestNextDownload (void)
/*FALL THROUGH*/
case 3: // skin
Com_sprintf(fn, sizeof(fn), "players/%s/%s.pcx", model, skin);
if (!CL_CheckOrDownloadFile(fn)) {
sprintf(fn, "players/%s/%s.pcx", model, skin);
if (!CL_CheckOrDownloadFile(fn))
{
precache_check = CS_PLAYERSKINS + i * PLAYER_MULT + 4;
return; // started a download
}
@ -1291,8 +1297,9 @@ void CL_RequestNextDownload (void)
/*FALL THROUGH*/
case 4: // skin_i
Com_sprintf(fn, sizeof(fn), "players/%s/%s_i.pcx", model, skin);
if (!CL_CheckOrDownloadFile(fn)) {
sprintf(fn, "players/%s/%s_i.pcx", model, skin);
if (!CL_CheckOrDownloadFile(fn))
{
precache_check = CS_PLAYERSKINS + i * PLAYER_MULT + 5;
return; // started a download
}
@ -1305,54 +1312,56 @@ void CL_RequestNextDownload (void)
precache_check = ENV_CNT;
}
if (precache_check == ENV_CNT) {
if (precache_check == ENV_CNT)
{
precache_check = ENV_CNT + 1;
CM_LoadMap (cl.configstrings[CS_MODELS+1], true, &map_checksum);
if (map_checksum != atoi(cl.configstrings[CS_MAPCHECKSUM])) {
Com_Error (ERR_DROP, "Local map version differs from server: %i != '%s'\n",
map_checksum, cl.configstrings[CS_MAPCHECKSUM]);
if (map_checksum != atoi(cl.configstrings[CS_MAPCHECKSUM]))
{
Com_Error (ERR_DROP, "Local map version differs from server: %i != '%s'\n", map_checksum, cl.configstrings[CS_MAPCHECKSUM]);
return;
}
}
if (precache_check > ENV_CNT && precache_check < TEXTURE_CNT) {
if (allow_download->value && allow_download_maps->value) {
while (precache_check < TEXTURE_CNT) {
if (precache_check > ENV_CNT && precache_check < TEXTURE_CNT)
{
if (allow_download->value && allow_download_maps->value)
{
while (precache_check < TEXTURE_CNT)
{
int n = precache_check++ - ENV_CNT - 1;
if (n & 1)
Com_sprintf(fn, sizeof(fn), "env/%s%s.pcx",
cl.configstrings[CS_SKY], env_suf[n/2]);
else
Com_sprintf(fn, sizeof(fn), "env/%s%s.tga",
cl.configstrings[CS_SKY], env_suf[n/2]);
if (!CL_CheckOrDownloadFile(fn))
return; // started a download
if (n & 1) sprintf(fn, "env/%s%s.pcx", cl.configstrings[CS_SKY], env_suf[n/2]);
else sprintf(fn, "env/%s%s.tga", cl.configstrings[CS_SKY], env_suf[n/2]);
if (!CL_CheckOrDownloadFile(fn)) return; // started a download
}
}
precache_check = TEXTURE_CNT;
}
if (precache_check == TEXTURE_CNT) {
if (precache_check == TEXTURE_CNT)
{
precache_check = TEXTURE_CNT+1;
precache_tex = 0;
}
// confirm existance of textures, download any that don't exist
if (precache_check == TEXTURE_CNT+1) {
if (precache_check == TEXTURE_CNT+1)
{
// from common/cmodel.c
extern int numtexinfo;
extern int numtexinfo;
extern mapsurface_t map_surfaces[];
if (allow_download->value && allow_download_maps->value) {
while (precache_tex < numtexinfo) {
if (allow_download->value && allow_download_maps->value)
{
while (precache_tex < numtexinfo)
{
char fn[MAX_OSPATH];
sprintf(fn, "textures/%s.jpg", map_surfaces[precache_tex++].rname);
if (!CL_CheckOrDownloadFile(fn))
return; // started a download
if (!CL_CheckOrDownloadFile(fn)) return; // started a download
}
}
precache_check = TEXTURE_CNT+999;

View File

@ -139,7 +139,7 @@ void CL_Download_f (void)
return;
}
Com_sprintf(filename, sizeof(filename), "%s", Cmd_Argv(1));
sprintf(filename, "%s", Cmd_Argv(1));
if (strstr (filename, ".."))
{
@ -393,10 +393,10 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
if (cl_noskins->value || *s == 0)
{
Com_sprintf (model_filename, sizeof(model_filename), "players/male/tris.md2");
Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/male/weapon.md2");
Com_sprintf (skin_filename, sizeof(skin_filename), "players/male/grunt.pcx");
Com_sprintf (ci->iconname, sizeof(ci->iconname), "/players/male/grunt_i.pcx");
sprintf (model_filename, "players/male/tris.md2");
sprintf (weapon_filename, "players/male/weapon.md2");
sprintf (skin_filename, "players/male/grunt.pcx");
sprintf (ci->iconname, "/players/male/grunt_i.pcx");
ci->model = re.RegisterModel (model_filename);
memset(ci->weaponmodel, 0, sizeof(ci->weaponmodel));
ci->weaponmodel[0] = re.RegisterModel (weapon_filename);
@ -418,17 +418,17 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
strcpy (skin_name, s + strlen(model_name) + 1);
// model file
Com_sprintf (model_filename, sizeof(model_filename), "players/%s/tris.md2", model_name);
sprintf (model_filename, "players/%s/tris.md2", model_name);
ci->model = re.RegisterModel (model_filename);
if (!ci->model)
{
strcpy(model_name, "male");
Com_sprintf (model_filename, sizeof(model_filename), "players/male/tris.md2");
sprintf (model_filename, "players/male/tris.md2");
ci->model = re.RegisterModel (model_filename);
}
// skin file
Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/%s.pcx", model_name, skin_name);
sprintf (skin_filename, "players/%s/%s.pcx", model_name, skin_name);
ci->skin = re.RegisterSkin (skin_filename);
// if we don't have the skin and the model wasn't male,
@ -437,11 +437,11 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
{
// change model to male
strcpy(model_name, "male");
Com_sprintf (model_filename, sizeof(model_filename), "players/male/tris.md2");
sprintf (model_filename, "players/male/tris.md2");
ci->model = re.RegisterModel (model_filename);
// see if the skin exists for the male model
Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/%s.pcx", model_name, skin_name);
sprintf (skin_filename, "players/%s/%s.pcx", model_name, skin_name);
ci->skin = re.RegisterSkin (skin_filename);
}
@ -449,17 +449,17 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
// it, so default to grunt
if (!ci->skin) {
// see if the skin exists for the male model
Com_sprintf (skin_filename, sizeof(skin_filename), "players/%s/grunt.pcx", model_name, skin_name);
sprintf (skin_filename, "players/%s/grunt.pcx", model_name, skin_name);
ci->skin = re.RegisterSkin (skin_filename);
}
// weapon file
for (i = 0; i < num_cl_weaponmodels; i++) {
Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/%s/%s", model_name, cl_weaponmodels[i]);
sprintf (weapon_filename, "players/%s/%s", model_name, cl_weaponmodels[i]);
ci->weaponmodel[i] = re.RegisterModel(weapon_filename);
if (!ci->weaponmodel[i] && strcmp(model_name, "cyborg") == 0) {
// try male
Com_sprintf (weapon_filename, sizeof(weapon_filename), "players/male/%s", cl_weaponmodels[i]);
sprintf (weapon_filename, "players/male/%s", cl_weaponmodels[i]);
ci->weaponmodel[i] = re.RegisterModel(weapon_filename);
}
if (!cl_vwep->value)
@ -467,7 +467,7 @@ void CL_LoadClientinfo (clientinfo_t *ci, char *s)
}
// icon file
Com_sprintf (ci->iconname, sizeof(ci->iconname), "/players/%s/%s_i.pcx", model_name, skin_name);
sprintf (ci->iconname, "/players/%s/%s_i.pcx", model_name, skin_name);
ci->icon = re.RegisterPic (ci->iconname);
}

View File

@ -890,7 +890,7 @@ void SCR_DrawField (int x, int y, int color, int width, int value)
SCR_AddDirtyPoint (x, y);
SCR_AddDirtyPoint (x+width*CHAR_WIDTH+2, y+23);
Com_sprintf (num, sizeof(num), "%i", value);
sprintf (num, "%i", value);
l = strlen(num);
if (l > width)
l = width;
@ -932,7 +932,7 @@ void SCR_TouchPics (void)
if (crosshair->value > 3 || crosshair->value < 0)
crosshair->value = 3;
Com_sprintf (crosshair_pic, sizeof(crosshair_pic), "ch%i", (int)(crosshair->value));
sprintf (crosshair_pic, "ch%i", (int)(crosshair->value));
re.DrawGetPicSize (&crosshair_width, &crosshair_height, crosshair_pic);
if (!crosshair_width)
crosshair_pic[0] = 0;

View File

@ -151,7 +151,7 @@ void CL_RegisterTEntSounds (void)
for (i=0 ; i<4 ; i++)
{
Com_sprintf (name, sizeof(name), "player/step%i.wav", i+1);
sprintf (name, "player/step%i.wav", i+1);
cl_sfx_footsteps[i] = S_RegisterSound (name);
}

View File

@ -403,7 +403,7 @@ void V_Gun_Model_f (void)
gun_model = NULL;
return;
}
Com_sprintf (name, sizeof(name), "models/%s/tris.md2", Cmd_Argv(1));
sprintf (name, "models/%s/tris.md2", Cmd_Argv(1));
gun_model = re.RegisterModel (name);
}

View File

@ -51,7 +51,6 @@ size_t strlcat(char *dst, const char *src, size_t siz);
typedef struct sizebuf_s
{
bool allowoverflow; // if false, do a Com_Error
bool overflowed; // set to true if the buffer size failed
byte *data;
int maxsize;
@ -299,7 +298,7 @@ enum clc_ops_e
#define U_ANGLE2 (1<<2)
#define U_ANGLE3 (1<<3)
#define U_FRAME8 (1<<4) // frame is a byte
#define U_EVENT (1<<5)
#define U_SKIN8 (1<<5)
#define U_REMOVE (1<<6) // REMOVE this entity, don't add it
#define U_MOREBITS1 (1<<7) // read one additional byte
@ -313,7 +312,7 @@ enum clc_ops_e
#define U_MOREBITS2 (1<<15) // read one additional byte
// third byte
#define U_SKIN8 (1<<16)
#define U_SKIN16 (1<<16)
#define U_FRAME16 (1<<17) // frame is a short
#define U_RENDERFX16 (1<<18) // 8 + 16 = 32
#define U_EFFECTS16 (1<<19) // 8 + 16 = 32
@ -324,10 +323,11 @@ enum clc_ops_e
// fourth byte
#define U_OLDORIGIN (1<<24) // FIXME: get rid of this
#define U_SKIN16 (1<<25)
#define U_SOUND (1<<26)
#define U_SOLID (1<<27)
#define U_ALPHA (1<<28) //alpha value
#define U_SOUND (1<<25)
#define U_SOLID (1<<26)
#define U_ALPHA (1<<27) // alpha value
#define U_EVENT (1<<28) // remove this
#define U_MOREBITS4 (1<<31) // read one additional byte
/*
==============================================================
@ -449,8 +449,8 @@ NET
#define PORT_ANY -1
#define MAX_MSGLEN 1400 // max length of a message
#define PACKET_HEADER 10 // two ints and a short
#define MAX_MSGLEN 1600 // max length of a message
#define PACKET_HEADER 10 // two ints and a short
typedef enum {NA_LOOPBACK, NA_BROADCAST, NA_IP, NA_IPX, NA_BROADCAST_IPX} netadrtype_t;
@ -548,8 +548,7 @@ CMODEL
cmodel_t *CM_LoadMap (char *name, bool clientload, unsigned *checksum);
cmodel_t *CM_InlineModel (char *name); // *1, *2, etc
stmodel_t *CM_StudioModel (char *name); //studio models server copy
stmodel_t *CM_SpriteModel (char *name); //sprite models some info (minmaxs, numframes e.t.c)
cmodel_t *CM_LoadModel (char *name);
extern byte portalopen[MAX_MAP_AREAPORTALS];

View File

@ -69,26 +69,24 @@ cbrushside_t map_brushsides[MAX_MAP_BRUSHSIDES];
int numtexinfo;
mapsurface_t map_surfaces[MAX_MAP_TEXINFO];
int numplanes;
int numplanes;
cplane_t map_planes[MAX_MAP_PLANES+6]; // extra for box hull
int numnodes;
cnode_t map_nodes[MAX_MAP_NODES+6]; // extra for box hull
int numnodes;
cnode_t map_nodes[MAX_MAP_NODES+6]; // extra for box hull
int numleafs = 1; // allow leaf funcs to be called without a map
cleaf_t map_leafs[MAX_MAP_LEAFS];
int emptyleaf, solidleaf;
int numleafs = 1; // allow leaf funcs to be called without a map
cleaf_t map_leafs[MAX_MAP_LEAFS];
int emptyleaf, solidleaf;
int numleafbrushes;
int numleafbrushes;
word map_leafbrushes[MAX_MAP_LEAFBRUSHES];
int numcmodels;
int numcmodels;
int numsmodels; //numcmodels+numsmodels
cmodel_t map_cmodels[MAX_MAP_MODELS];
int numsmodels;
stmodel_t studio_models[MAX_MAP_MODELS];
int numbrushes;
int numbrushes;
cbrush_t map_brushes[MAX_MAP_BRUSHES];
int numvisibility;
@ -138,17 +136,15 @@ void CMod_LoadSubmodels (lump_t *l)
{
dmodel_t *in;
cmodel_t *out;
int i, j, count;
int i, j, count;
in = (void *)(cmod_base + l->fileofs);
if (l->filelen % sizeof(*in))
Com_Error (ERR_DROP, "MOD_LoadBmodel: funny lump size");
count = l->filelen / sizeof(*in);
if (count < 1)
Com_Error (ERR_DROP, "Map with no models");
if (count > MAX_MAP_MODELS)
Com_Error (ERR_DROP, "Map has too many models");
if (count < 1) Com_Error (ERR_DROP, "Map with no models");
if (count > MAX_MAP_MODELS) Com_Error (ERR_DROP, "Map has too many models");
numcmodels = count;
@ -156,8 +152,9 @@ void CMod_LoadSubmodels (lump_t *l)
{
out = &map_cmodels[i];
for (j=0 ; j<3 ; j++)
{ // spread the mins / maxs by a pixel
for (j = 0; j < 3; j++)
{
// spread the mins / maxs by a pixel
out->mins[j] = LittleFloat (in->mins[j]) - 1;
out->maxs[j] = LittleFloat (in->maxs[j]) + 1;
out->origin[j] = LittleFloat (in->origin[j]);
@ -634,28 +631,28 @@ CM_InlineModel
*/
cmodel_t *CM_InlineModel (char *name)
{
int num;
int num = atoi (name + 1);
if (!name || name[0] != '*')
Com_Error (ERR_DROP, "CM_InlineModel: bad name");
num = atoi (name+1);
if (num < 1 || num >= numcmodels)
Com_Error (ERR_DROP, "CM_InlineModel: bad number");
{
Msg("CM_InlineModel: bad number %d\n", num );
return NULL;
}
return &map_cmodels[num];
}
int CM_NumClusters (void)
int CM_NumClusters (void)
{
return numclusters;
}
int CM_NumInlineModels (void)
int CM_NumInlineModels (void)
{
return numcmodels;
}
char *CM_EntityString (void)
char *CM_EntityString (void)
{
return map_entitystring;
}
@ -896,7 +893,7 @@ int CM_BoxLeafnums_headnode (vec3_t mins, vec3_t maxs, int *list, int listsize,
return leaf_count;
}
int CM_BoxLeafnums (vec3_t mins, vec3_t maxs, int *list, int listsize, int *topnode)
int CM_BoxLeafnums (vec3_t mins, vec3_t maxs, int *list, int listsize, int *topnode)
{
return CM_BoxLeafnums_headnode (mins, maxs, list,
listsize, map_cmodels[0].headnode, topnode);
@ -1777,52 +1774,28 @@ void CM_LookUpHullSize(vec3_t size, bool down)
}
}
stmodel_t *CM_StudioModel (char *name)
cmodel_t *CM_StudioModel (char *name, byte *buffer)
{
int i;
byte *buffer;
stmodel_t *out;
int i = numcmodels; // studiomodels starting after bmodels
int max_models = numcmodels + numsmodels;
cmodel_t *out;
studiohdr_t *phdr;
char modname[64]; //probaly this is not better way...
char modname[64]; // probaly this is not better way...
if (!name[0])
{
Msg ("CM_StudioModel: NULL name, ignored\n");
return NULL;
}
if(!FS_FileExists( name ))
{
Msg ("CM_StudioModel: %s not found\n", name );
return NULL;
}
if(numsmodels > MAX_MAP_MODELS)
{
Msg ("CM_StudioModel: MAX_MAP_MODELS limit exceeded\n" );
return NULL;
}
buffer = FS_LoadFile (name, NULL );
phdr = (studiohdr_t *)buffer;
if(phdr->id != IDSTUDIOHEADER)
{
Msg("CM_StudioModel: %s have invalid header\n", name );
return NULL;
}
if (phdr->version != STUDIO_VERSION)
{
Msg("CM_StudioModel: %s has wrong version number (%i should be %i)", phdr->name, phdr->version, STUDIO_VERSION);
return NULL;
}
memset( modname, 0, sizeof(modname));
FS_FileBase( name, modname );
for(i = 0; i < numsmodels; i++ )
for(i = 0; i < max_models; i++ )
{
out = studio_models + i;
out = map_cmodels + i;
//probably is sprite model
if(!out->extradata) continue;
@ -1830,9 +1803,9 @@ stmodel_t *CM_StudioModel (char *name)
return out;
}
out = &studio_models[numsmodels];
out = &map_cmodels[max_models];
out->extradata = buffer;
out->numframes = 0;//sprite info
out->numframes = 0;//reset sprite info
strlcpy(out->name, modname, sizeof(out->name));
if(SV_StudioExtractBbox( phdr, 0, out->mins, out->maxs ))
@ -1843,6 +1816,7 @@ stmodel_t *CM_StudioModel (char *name)
}
else
{
// default size
VectorSet(out->mins, -32, -32, -32 );
VectorSet(out->maxs, 32, 32, 32 );
}
@ -1850,41 +1824,19 @@ stmodel_t *CM_StudioModel (char *name)
Msg("register new model %s\n", out->name );
numsmodels++;
return &studio_models[numsmodels];
return out;
}
stmodel_t *CM_SpriteModel (char *name)
cmodel_t *CM_SpriteModel (char *name, byte *buffer)
{
int i;
byte *buffer;
stmodel_t *out;
int i = numcmodels;
int max_models = numcmodels + numsmodels;
cmodel_t *out;
dsprite_t *phdr;
char modname[64]; //probaly this is not better way...
if (!name[0])
{
Msg ("CM_SpriteModel: NULL name, ignored\n");
return NULL;
}
if(!FS_FileExists( name ))
{
Msg ("CM_SpriteModel: %s not found\n", name );
return NULL;
}
if(numsmodels > MAX_MAP_MODELS)
{
Msg ("CM_SpriteModel: MAX_MAP_MODELS limit exceeded\n" );
return NULL;
}
buffer = FS_LoadFile (name, NULL );
phdr = (dsprite_t *)buffer;
if(phdr->ident != IDSPRITEHEADER)
{
Msg("CM_SpriteModel: %s have invalid header\n", name );
return NULL;
}
if(phdr->version != SPRITE_VERSION_HALF || phdr->version != SPRITE_VERSION_XASH)
{
Msg("CM_SpriteModel: %s has wrong version number (%i should be %i or %i)\n", name, phdr->version, SPRITE_VERSION_HALF, SPRITE_VERSION_XASH);
@ -1894,9 +1846,9 @@ stmodel_t *CM_SpriteModel (char *name)
memset( modname, 0, sizeof(modname));
FS_FileBase( name, modname );
for(i = 0; i < numsmodels; i++ )
for(i = 0; i < max_models; i++ )
{
out = studio_models + i;
out = map_cmodels + i;
//probably is studio model
if(!out->numframes) continue;
@ -1904,7 +1856,7 @@ stmodel_t *CM_SpriteModel (char *name)
return out;
}
out = &studio_models[numsmodels];
out = &map_cmodels[max_models];
out->numframes = phdr->numframes;
strlcpy(out->name, modname, sizeof(out->name));
@ -1912,10 +1864,48 @@ stmodel_t *CM_SpriteModel (char *name)
out->maxs[0] = out->maxs[1] = phdr->width / 2;
out->mins[2] = -phdr->height / 2;
out->maxs[2] = phdr->height / 2;
Z_Free( &buffer );//no need to keep this data
Msg("register new sprite %s\n", out->name );
numsmodels++;
return &studio_models[numsmodels];
return out;
}
cmodel_t *CM_LoadModel (char *name)
{
byte *buffer;
cmodel_t *mod = NULL;
if (!name[0])
{
Msg ("CM_LoadModel: NULL name, ignored\n");
return NULL;
}
if(name[0] == '*') return CM_InlineModel (name);
if(!FS_FileExists( name ))
{
Msg ("CM_LoadModel: %s not found\n", name );
return NULL;
}
if(numcmodels + numsmodels > MAX_MAP_MODELS)
{
Msg ("CM_LoadModel: MAX_MAP_MODELS limit exceeded\n" );
return NULL;
}
buffer = FS_LoadFile (name, NULL );
// call the apropriate loader
switch (LittleLong(*(uint *)buffer))
{
case IDSTUDIOHEADER:
mod = CM_StudioModel( name, buffer );
break;
case IDSPRITEHEADER:
mod = CM_SpriteModel( name, buffer );
break;
}
return mod;
}

View File

@ -153,7 +153,7 @@ void Con_Dump_f (void)
return;
}
Com_sprintf (name, sizeof(name), "%s.txt", Cmd_Argv(1));
sprintf (name, "%s.txt", Cmd_Argv(1));
Msg ("Dumped console text to %s.\n", name);
f = FS_Open (name, "w");
@ -583,12 +583,12 @@ void Con_DrawConsole (float frac)
if (lines > viddef.height)
lines = viddef.height;
// draw the background
// draw the background
re.DrawStretchPic (0, -viddef.height+lines, viddef.width, viddef.height, "conback");
SCR_AddDirtyPoint (0,0);
SCR_AddDirtyPoint (viddef.width-1,lines-1);
Com_sprintf (version, sizeof(version), "v%4.2f", VERSION);
sprintf (version, "v%4.2f", VERSION);
for (x=0 ; x<5 ; x++)
re.DrawChar (viddef.width-44+x*8, lines-12, 128 + version[x] );

View File

@ -314,9 +314,9 @@ void Cvar_SetValue (char *var_name, float value)
char val[32];
if (value == (int)value)
Com_sprintf (val, sizeof(val), "%i",(int)value);
sprintf (val, "%i",(int)value);
else
Com_sprintf (val, sizeof(val), "%f",value);
sprintf (val, "%f",value);
Cvar_Set (var_name, val);
}
@ -427,7 +427,7 @@ void Cvar_WriteVariables (char *path)
{
if (var->flags & CVAR_ARCHIVE)
{
Com_sprintf (buffer, sizeof(buffer), "set %s \"%s\"\n", var->name, var->string);
sprintf (buffer, "set %s \"%s\"\n", var->name, var->string);
FS_Printf(f, "%s", buffer);
}
}

View File

@ -843,7 +843,7 @@ void Key_Event (int key, bool down, unsigned time)
kb = keybindings[key];
if (kb && kb[0] == '+')
{
Com_sprintf (cmd, sizeof(cmd), "-%s %i %i\n", kb+1, key, time);
sprintf (cmd, "-%s %i %i\n", kb+1, key, time);
Cbuf_AddText (cmd);
}
if (keyshift[key] != key)
@ -851,7 +851,7 @@ void Key_Event (int key, bool down, unsigned time)
kb = keybindings[keyshift[key]];
if (kb && kb[0] == '+')
{
Com_sprintf (cmd, sizeof(cmd), "-%s %i %i\n", kb+1, key, time);
sprintf (cmd, "-%s %i %i\n", kb+1, key, time);
Cbuf_AddText (cmd);
}
}
@ -870,7 +870,7 @@ void Key_Event (int key, bool down, unsigned time)
{
if (kb[0] == '+')
{ // button commands add keynum and time as a parm
Com_sprintf (cmd, sizeof(cmd), "%s %i %i\n", kb, key, time);
sprintf (cmd, "%s %i %i\n", kb, key, time);
Cbuf_AddText (cmd);
}
else

View File

@ -317,14 +317,14 @@ void M_DrawCursor( int x, int y, int f )
for ( i = 0; i < NUM_CURSOR_FRAMES; i++ )
{
Com_sprintf( cursorname, sizeof( cursorname ), "m_cursor%d", i );
sprintf( cursorname, "m_cursor%d", i );
re.RegisterPic( cursorname );
}
cached = true;
}
Com_sprintf( cursorname, sizeof(cursorname), "m_cursor%d", f );
sprintf( cursorname, "m_cursor%d", f );
re.DrawPic( x, y, cursorname );
}
@ -973,7 +973,7 @@ static const char *Keys_MenuKey( int key )
{
char cmd[1024];
Com_sprintf (cmd, sizeof(cmd), "bind \"%s\" \"%s\"\n", Key_KeynumToString(key), bindnames[item->generic.localdata[0]][0]);
sprintf (cmd, "bind \"%s\" \"%s\"\n", Key_KeynumToString(key), bindnames[item->generic.localdata[0]][0]);
Cbuf_InsertText (cmd);
}
@ -2220,7 +2220,7 @@ void JoinServerFunc( void *self )
if (index >= m_num_servers)
return;
Com_sprintf (buffer, sizeof(buffer), "connect %s\n", NET_AdrToString (local_server_netadr[index]));
sprintf (buffer, "connect %s\n", NET_AdrToString (local_server_netadr[index]));
Cbuf_AddText (buffer);
M_ForceMenuOff ();
}
@ -2606,7 +2606,7 @@ void StartServer_MenuInit( void )
for (j=0 ; j<l ; j++)
shortname[j] = toupper(shortname[j]);
strcpy( longname, COM_Parse( &s ) );
Com_sprintf( scratch, sizeof( scratch ), "%s\n%s", longname, shortname );
sprintf( scratch, "%s\n%s", longname, shortname );
mapnames[i] = Z_Malloc( strlen( scratch ) + 1 );
strcpy( mapnames[i], scratch );
@ -2902,7 +2902,7 @@ static void DMFlagCallback( void *self )
setvalue:
Cvar_SetValue ("dmflags", flags);
Com_sprintf( dmoptions_statusbar, sizeof( dmoptions_statusbar ), "dmflags = %d", flags );
sprintf( dmoptions_statusbar, "dmflags = %d", flags );
}
@ -3236,7 +3236,7 @@ void AddressBook_MenuInit( void )
cvar_t *adr;
char buffer[20];
Com_sprintf( buffer, sizeof( buffer ), "adr%d", i );
sprintf( buffer, "adr%d", i );
adr = Cvar_Get( buffer, "", CVAR_ARCHIVE );
@ -3265,7 +3265,7 @@ const char *AddressBook_MenuKey( int key )
for ( index = 0; index < NUM_ADDRESSBOOK_ENTRIES; index++ )
{
Com_sprintf( buffer, sizeof( buffer ), "adr%d", index );
sprintf( buffer, "adr%d", index );
Cvar_Set( buffer, s_addressbook_fields[index].buffer );
}
}
@ -3688,9 +3688,9 @@ void PlayerConfig_MenuDraw( void )
memset( &entity, 0, sizeof( entity ) );
Com_sprintf( scratch, sizeof( scratch ), "players/%s/tris.md2", s_pmi[s_player_model_box.curvalue].directory );
sprintf( scratch, "players/%s/tris.md2", s_pmi[s_player_model_box.curvalue].directory );
entity.model = re.RegisterModel( scratch );
Com_sprintf( scratch, sizeof( scratch ), "players/%s/%s.pcx", s_pmi[s_player_model_box.curvalue].directory, s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] );
sprintf( scratch, "players/%s/%s.pcx", s_pmi[s_player_model_box.curvalue].directory, s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] );
entity.image = re.RegisterSkin( scratch );
entity.flags = RF_FULLBRIGHT;
entity.origin[0] = 80;
@ -3717,9 +3717,7 @@ void PlayerConfig_MenuDraw( void )
re.RenderFrame( &refdef );
Com_sprintf( scratch, sizeof( scratch ), "/players/%s/%s_i.pcx",
s_pmi[s_player_model_box.curvalue].directory,
s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] );
sprintf( scratch, "/players/%s/%s_i.pcx", s_pmi[s_player_model_box.curvalue].directory, s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] );
re.DrawPic( s_player_config_menu.x - 40, refdef.y, scratch );
}
}
@ -3734,9 +3732,7 @@ const char *PlayerConfig_MenuKey (int key)
Cvar_Set( "name", s_player_name_field.buffer );
Com_sprintf( scratch, sizeof( scratch ), "%s/%s",
s_pmi[s_player_model_box.curvalue].directory,
s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] );
sprintf( scratch, "%s/%s", s_pmi[s_player_model_box.curvalue].directory, s_pmi[s_player_model_box.curvalue].skindisplaynames[s_player_skin_box.curvalue] );
Cvar_Set( "skin", scratch );

View File

@ -163,7 +163,6 @@ void Netchan_Setup (netsrc_t sock, netchan_t *chan, netadr_t adr, int qport)
chan->outgoing_sequence = 1;
SZ_Init (&chan->message, chan->message_buf, sizeof(chan->message_buf));
chan->message.allowoverflow = true;
}
@ -254,20 +253,19 @@ void Netchan_Transmit (netchan_t *chan, int length, byte *data)
// send the qport if we are a client
if (chan->sock == NS_CLIENT) MSG_WriteWord (&send, qport->value);
// copy the reliable message to the packet first
// copy the reliable message to the packet first
if (send_reliable)
{
SZ_Write (&send, chan->reliable_buf, chan->reliable_length);
chan->last_reliable_sequence = chan->outgoing_sequence;
}
// add the unreliable part if space is available
// add the unreliable part if space is available
if (send.maxsize - send.cursize >= length)
SZ_Write (&send, data, length);
else
Msg ("Netchan_Transmit: dumped unreliable\n");
else MsgDev ("Netchan_Transmit: dumped unreliable\n");
// send the datagram
// send the datagram
NET_SendPacket (chan->sock, send.cursize, send.data, chan->remote_address);
if (showpackets->value)

View File

@ -216,26 +216,22 @@ void _MSG_WriteDeltaEntity (entity_state_t *from, entity_state_t *to, sizebuf_t
if ( to->angles[1] != from->angles[1] ) bits |= U_ANGLE2;
if ( to->angles[2] != from->angles[2] ) bits |= U_ANGLE3;
if ( to->skinnum != from->skinnum )
if ( to->skin != from->skin )
{
if ((uint)to->skinnum < 256) bits |= U_SKIN8;
else if ((uint)to->skinnum < 65536) bits |= U_SKIN16;
else bits |= (U_SKIN8 | U_SKIN16);
}
if (to->skin < 256) bits |= U_SKIN8;
else bits |= U_SKIN16;
}
if ( to->frame != from->frame )
{
if (to->frame < 256) bits |= U_FRAME8;
else bits |= U_FRAME16;
}
if ( to->effects != from->effects )
{
if (to->effects < 256) bits |= U_EFFECTS8;
else if (to->effects < 32768) bits |= U_EFFECTS16;
else bits |= U_EFFECTS8 | U_EFFECTS16;
}
if ( to->renderfx != from->renderfx )
{
if (to->renderfx < 256) bits |= U_RENDERFX8;
@ -244,7 +240,7 @@ void _MSG_WriteDeltaEntity (entity_state_t *from, entity_state_t *to, sizebuf_t
}
if ( to->solid != from->solid ) bits |= U_SOLID;
if ( to->event ) bits |= U_EVENT; // event is not delta compressed, just 0 compressed
if ( to->event ) bits |= U_EVENT; // event is not delta compressed, just 0 compressed
if ( to->modelindex != from->modelindex ) bits |= U_MODEL;
if ( to->weaponmodel != from->weaponmodel ) bits |= U_WEAPONMODEL;
@ -288,16 +284,12 @@ void _MSG_WriteDeltaEntity (entity_state_t *from, entity_state_t *to, sizebuf_t
if (bits & U_MODEL) _MSG_WriteByte (msg, to->modelindex, filename, fileline);
if (bits & U_WEAPONMODEL) _MSG_WriteByte (msg, to->weaponmodel, filename, fileline);
if (bits & U_BODY) _MSG_WriteByte (msg, to->body, filename, fileline);
if (bits & U_SEQUENCE) _MSG_WriteByte (msg, to->sequence, filename, fileline);
if (bits & U_FRAME8) _MSG_WriteByte (msg, to->frame, filename, fileline);
if (bits & U_FRAME16) _MSG_WriteShort (msg, to->frame, filename, fileline);
if ((bits & U_SKIN8) && (bits & U_SKIN16))
_MSG_WriteLong (msg, to->skinnum, filename, fileline); // used for laser colors
else if (bits & U_SKIN8) _MSG_WriteByte (msg, to->skinnum, filename, fileline);
else if (bits & U_SKIN16) _MSG_WriteShort (msg, to->skinnum, filename, fileline);
if (bits & U_SKIN8 ) _MSG_WriteByte (msg, to->skin, filename, fileline);
if (bits & U_SKIN16) _MSG_WriteShort (msg, to->skin, filename, fileline);
if ( (bits & (U_EFFECTS8|U_EFFECTS16)) == (U_EFFECTS8|U_EFFECTS16))
_MSG_WriteLong (msg, to->effects, filename, fileline);
@ -324,10 +316,12 @@ void _MSG_WriteDeltaEntity (entity_state_t *from, entity_state_t *to, sizebuf_t
_MSG_WriteCoord (msg, to->old_origin[2], filename, fileline);
}
if (bits & U_SOUND) _MSG_WriteByte (msg, to->sound, filename, fileline);
if (bits & U_EVENT) _MSG_WriteByte (msg, to->event, filename, fileline);
if (bits & U_SEQUENCE) _MSG_WriteByte (msg, to->sequence, filename, fileline);
if (bits & U_SOLID) _MSG_WriteShort (msg, to->solid, filename, fileline);
if (bits & U_ALPHA) _MSG_WriteFloat (msg, to->alpha, filename, fileline);
if (bits & U_SOUND) _MSG_WriteByte (msg, to->sound, filename, fileline);
if (bits & U_EVENT) _MSG_WriteByte (msg, to->event, filename, fileline);
if (bits & U_BODY) _MSG_WriteByte (msg, to->body, filename, fileline);
}
/*
@ -562,13 +556,10 @@ void *SZ_GetSpace (sizebuf_t *buf, int length)
if (buf->cursize + length > buf->maxsize)
{
if (!buf->allowoverflow)
Com_Error (ERR_DROP, "SZ_GetSpace: overflow without allowoverflow set");
if (length > buf->maxsize)
Com_Error (ERR_DROP, "SZ_GetSpace: %i is > full buffer size", length);
Msg ("SZ_GetSpace: overflow\n");
Msg ("SZ_GetSpace: overflow [cursize %d maxsize %d]\n", buf->cursize + length, buf->maxsize );
SZ_Clear (buf);
buf->overflowed = true;
}

View File

@ -155,16 +155,13 @@ bool NET_CompareBaseAdr (netadr_t a, netadr_t b)
return false;
}
char *NET_AdrToString (netadr_t a)
char *NET_AdrToString (netadr_t a)
{
static char s[64];
static char s[64];
if (a.type == NA_LOOPBACK)
Com_sprintf (s, sizeof(s), "loopback");
else if (a.type == NA_IP)
Com_sprintf (s, sizeof(s), "%i.%i.%i.%i:%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3], ntohs(a.port));
else
Com_sprintf (s, sizeof(s), "%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%i", a.ipx[0], a.ipx[1], a.ipx[2], a.ipx[3], a.ipx[4], a.ipx[5], a.ipx[6], a.ipx[7], a.ipx[8], a.ipx[9], ntohs(a.port));
if (a.type == NA_LOOPBACK) sprintf (s, "loopback");
else if (a.type == NA_IP) sprintf (s, "%i.%i.%i.%i:%i", a.ip[0], a.ip[1], a.ip[2], a.ip[3], ntohs(a.port));
else sprintf (s, "%02x%02x%02x%02x:%02x%02x%02x%02x%02x%02x:%i", a.ipx[0], a.ipx[1], a.ipx[2], a.ipx[3], a.ipx[4], a.ipx[5], a.ipx[6], a.ipx[7], a.ipx[8], a.ipx[9], ntohs(a.port));
return s;
}

View File

@ -1,43 +0,0 @@
/*
Copyright (C) 1997-2001 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
#include "engine.h"
/*
============================================================================
LIBRARY REPLACEMENT FUNCTIONS
============================================================================
*/
void Com_sprintf (char *dest, int size, char *fmt, ...)
{
int len;
va_list argptr;
char bigbuffer[0x10000];
va_start (argptr,fmt);
len = vsprintf (bigbuffer,fmt,argptr);
va_end (argptr);
if (len >= size)
Msg ("Com_sprintf: overflow of %i in %i\n", len, size);
strncpy (dest, bigbuffer, size-1);
}

View File

@ -230,10 +230,6 @@ SOURCE=.\common\pmove.c
# End Source File
# Begin Source File
SOURCE=.\common\q_shared.c
# End Source File
# Begin Source File
SOURCE=.\common\qmenu.c
# End Source File
# Begin Source File

View File

@ -234,7 +234,7 @@ void SV_Map_f (void)
map = Cmd_Argv(1);
if (!strstr (map, "."))
{
Com_sprintf (expanded, sizeof(expanded), "maps/%s.bsp", map);
sprintf (expanded, "maps/%s.bsp", map);
if (!FS_LoadFile (expanded, NULL))
{
Msg ("Can't find %s\n", expanded);
@ -534,10 +534,8 @@ void SV_ServerRecord_f (void)
return;
}
//
// open the demo file
//
Com_sprintf (name, sizeof(name), "demos/%s.dm2", Cmd_Argv(1));
sprintf (name, "demos/%s.dm2", Cmd_Argv(1));
Msg ("recording to %s.\n", name);
svs.demofile = FS_Open (name, "wb");

View File

@ -165,7 +165,6 @@ void PF_setmodel (edict_t *ent, char *name)
{
int i;
cmodel_t *mod;
stmodel_t *stmod;
if (!name) Com_Error (ERR_DROP, "PF_setmodel: NULL");
@ -174,32 +173,14 @@ void PF_setmodel (edict_t *ent, char *name)
// ent->model = name;
ent->s.modelindex = i;
// if it is an inline model, get the size information for it
if (name[0] == '*')
mod = CM_LoadModel (name);
if(mod) // hull setup
{
mod = CM_InlineModel (name);
VectorCopy (mod->mins, ent->mins);
VectorCopy (mod->maxs, ent->maxs);
SV_LinkEdict (ent);
}
else if(!stricmp(FS_FileExtension(name), "mdl" ))
{
if(stmod = CM_StudioModel(name))
{
VectorCopy (stmod->mins, ent->mins);
VectorCopy (stmod->maxs, ent->maxs);
SV_LinkEdict (ent);
}
}
else if(!stricmp(FS_FileExtension(name), "spr" ))
{
if(stmod = CM_SpriteModel(name))
{
VectorCopy (stmod->mins, ent->mins);
VectorCopy (stmod->maxs, ent->maxs);
SV_LinkEdict (ent);
}
}
}
/*

View File

@ -219,10 +219,10 @@ void SV_SpawnServer (char *server, char *spawnpoint, char *savename, server_stat
}
else
{
Com_sprintf (sv.configstrings[CS_MODELS+1],sizeof(sv.configstrings[CS_MODELS+1]), "maps/%s.bsp", server);
sprintf (sv.configstrings[CS_MODELS+1], "maps/%s.bsp", server);
sv.models[1] = CM_LoadMap (sv.configstrings[CS_MODELS+1], false, &checksum);
}
Com_sprintf (sv.configstrings[CS_MAPCHECKSUM],sizeof(sv.configstrings[CS_MAPCHECKSUM]), "%i", checksum);
sprintf (sv.configstrings[CS_MAPCHECKSUM],"%i", checksum);
// clear physics interaction links
SV_ClearWorld ();
@ -337,7 +337,7 @@ void SV_InitGame (void)
// heartbeats will always be sent to the id master
svs.last_heartbeat = -99999; // send immediately
Com_sprintf(idmaster, sizeof(idmaster), "192.246.40.37:%i", PORT_MASTER);
sprintf(idmaster, "192.246.40.37:%i", PORT_MASTER);
NET_StringToAdr (idmaster, &master_adr[0]);
// init game

View File

@ -124,8 +124,7 @@ char *SV_StatusString (void)
cl = &svs.clients[i];
if (cl->state == cs_connected || cl->state == cs_spawned )
{
Com_sprintf (player, sizeof(player), "%i %i \"%s\"\n",
cl->edict->client->ps.stats[STAT_FRAGS], cl->ping, cl->name);
sprintf (player, "%i %i \"%s\"\n", cl->edict->client->ps.stats[STAT_FRAGS], cl->ping, cl->name);
playerLength = strlen(player);
if (statusLength + playerLength >= sizeof(status) )
break; // can't hold any more
@ -185,7 +184,7 @@ void SVC_Info (void)
version = atoi (Cmd_Argv(1));
if (version != PROTOCOL_VERSION)
Com_sprintf (string, sizeof(string), "%s: wrong version\n", hostname->string, sizeof(string));
sprintf (string, "%s: wrong version\n", hostname->string, sizeof(string));
else
{
count = 0;
@ -193,7 +192,7 @@ void SVC_Info (void)
if (svs.clients[i].state >= cs_connected)
count++;
Com_sprintf (string, sizeof(string), "%16s %8s %2i/%2i\n", hostname->string, sv.name, count, (int)maxclients->value);
sprintf (string, "%16s %8s %2i/%2i\n", hostname->string, sv.name, count, (int)maxclients->value);
}
Netchan_OutOfBandPrint (NS_SERVER, net_from, "info\n%s", string);
@ -406,7 +405,6 @@ gotnewcl:
newcl->state = cs_connected;
SZ_Init (&newcl->datagram, newcl->datagram_buf, sizeof(newcl->datagram_buf) );
newcl->datagram.allowoverflow = true;
newcl->lastmessage = svs.realtime; // don't timeout
newcl->lastconnect = svs.realtime;
}

View File

@ -395,12 +395,11 @@ SV_SendClientDatagram
bool SV_SendClientDatagram (client_t *client)
{
byte msg_buf[MAX_MSGLEN];
sizebuf_t msg;
sizebuf_t msg;
SV_BuildClientFrame (client);
SZ_Init (&msg, msg_buf, sizeof(msg_buf));
msg.allowoverflow = true;
// send over all the relevant entity_state_t
// and the player_state_t

View File

@ -42,7 +42,7 @@ void SV_BeginDemoserver (void)
{
char name[MAX_OSPATH];
Com_sprintf (name, sizeof(name), "demos/%s", sv.name);
sprintf (name, "demos/%s", sv.name);
sv.demofile = FS_Open(name, "rb" );
if (!sv.demofile)
Com_Error (ERR_DROP, "Couldn't open %s\n", name);

View File

@ -614,7 +614,7 @@ struct sfx_s *S_RegisterSexedSound (entity_state_t *ent, char *base)
strcpy(model, "male");
// see if we already know of the model specific sound
Com_sprintf (sexedFilename, sizeof(sexedFilename), "#players/%s/%s", model, base+1);
sprintf (sexedFilename, "#players/%s/%s", model, base+1);
sfx = S_FindName (sexedFilename, false);
if (!sfx)
@ -630,7 +630,7 @@ struct sfx_s *S_RegisterSexedSound (entity_state_t *ent, char *base)
else
{
// no, revert to the male sound in the pak0.pak
Com_sprintf (maleFilename, sizeof(maleFilename), "player/%s/%s", "male", base+1);
sprintf (maleFilename, "player/%s/%s", "male", base+1);
sfx = S_AliasName (sexedFilename, maleFilename);
}
}

View File

@ -114,8 +114,9 @@ sfxcache_t *S_LoadSound (sfx_t *s)
if (sc)
return sc;
//Msg ("S_LoadSound: %x\n", (int)stackbuf);
// load it in
//Msg ("S_LoadSound: %x\n", (int)stackbuf);
// load it in
if (s->truename)
name = s->truename;
else
@ -123,10 +124,9 @@ sfxcache_t *S_LoadSound (sfx_t *s)
if (name[0] == '#')
strcpy(namebuffer, &name[1]);
else
Com_sprintf (namebuffer, sizeof(namebuffer), "sound/%s", name);
else sprintf (namebuffer, "sound/%s", name);
// Msg ("loading %s\n",namebuffer);
//Msg ("loading %s\n",namebuffer);
data = FS_LoadFile (namebuffer, &size);

View File

@ -666,7 +666,6 @@ void VID_CheckChanges (void)
cl.refresh_prepped = false;
cls.disable_screen = true;
//Com_sprintf( name, sizeof(name), "bin/render.dll", vid_ref->string );
if ( !VID_LoadRefresh( "bin/render.dll" ) )
{
if ( strcmp (vid_ref->string, "soft") == 0 )

View File

@ -180,9 +180,9 @@ static void ApplyChanges( void *unused )
vid_ref->modified = true;
g = 2.00 * ( 0.8 - ( vid_gamma->value - 0.5 ) ) + 1.0F;
Com_sprintf( envbuffer, sizeof(envbuffer), "SSTV2_GAMMA=%f", g );
sprintf( envbuffer, "SSTV2_GAMMA=%f", g );
putenv( envbuffer );
Com_sprintf( envbuffer, sizeof(envbuffer), "SST_GAMMA=%f", g );
sprintf( envbuffer, "SST_GAMMA=%f", g );
putenv( envbuffer );
vid_gamma->modified = false;

25
platform/platform.plg Normal file
View File

@ -0,0 +1,25 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: platform - Win32 Debug--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\Temp\RSP60C.bat" with contents
[
@echo off
copy \XASH3D\src_main\!source\temp\platform\!debug\platform.dll "D:\Xash3D\bin\platform.dll"
]
Creating command line "C:\Temp\RSP60C.bat"
<h3>Output Window</h3>
Performing Custom Build Step on \XASH3D\src_main\!source\temp\platform\!debug\platform.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
platform.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -20,7 +20,7 @@ BRUSH MODELS
#define MAX_KEY 32
#define MAX_MAP_AREAS 256
#define MAX_VALUE 1024
#define MAX_MAP_MODELS 1024
#define MAX_MAP_MODELS 2048 // mesh models and sprites too
#define MAX_MAP_AREAPORTALS 1024
#define MAX_MAP_ENTITIES 2048
#define MAX_MAP_TEXINFO 8192
@ -200,20 +200,17 @@ typedef struct cplane_s
typedef struct cmodel_s
{
vec3_t mins, maxs;
vec3_t origin; // for sounds or lights
int headnode;
} cmodel_t;
typedef struct stmodel_s
{
int modidx; //edict index
char name[64]; //model name
vec3_t mins, maxs;
vec3_t mins, maxs; // boundbox
vec3_t origin; // for sounds or lights
int headnode; // bsp info
int numframes; //sprite framecount
void *extradata; //for studio models
} stmodel_t;
} cmodel_t;
typedef struct csurface_s
{

View File

@ -225,7 +225,6 @@ void RotatePointAroundVector( vec3_t dst, const vec3_t dir, const vec3_t point,
void Com_sprintf (char *dest, int size, char *fmt, ...);
void Com_PageInMemory (byte *buffer, int size);
//=============================================
@ -956,10 +955,10 @@ typedef struct entity_state_s
int modelindex;
int weaponmodel;
int body; // sub-model selection for studiomodels
int sequence; // animation sequence
int frame; // % playback position in animation sequences (0..255)
int skinnum;
short skin; // skin for studiomodels
short frame; // % playback position in animation sequences (0..512)
byte body; // sub-model selection for studiomodels
byte sequence; // animation sequence (0 - 255)
uint effects; // PGM - we're filling it, so it needs to be unsigned
int renderfx;
int solid; // for client side prediction, 8*(bits 0-4) is x/y radius

View File

@ -372,7 +372,7 @@ void GL_ScreenShot_f (void);
void R_DrawAliasModel( int passnum );
void R_DrawStudioModel( int passnum );
void R_DrawBrushModel( int passnum );
void R_SpriteDrawModel( int passnum );
void R_DrawSpriteModel( int passnum );
void R_StudioLoadModel (model_t *mod, void *buffer );
void R_SpriteLoadModel( model_t *mod, void *buffer );
char *R_ExtName( model_t *mod );

View File

@ -257,7 +257,7 @@ void R_DrawEntitiesOnList (void)
R_DrawBrushModel( RENDERPASS_SOLID );
break;
case mod_sprite:
R_SpriteDrawModel( RENDERPASS_SOLID );
R_DrawSpriteModel( RENDERPASS_SOLID );
break;
case mod_studio:
R_DrawStudioModel( RENDERPASS_SOLID );
@ -298,7 +298,7 @@ void R_DrawEntitiesOnList (void)
R_DrawBrushModel( RENDERPASS_ALPHA );
break;
case mod_sprite:
R_SpriteDrawModel( RENDERPASS_ALPHA );
R_DrawSpriteModel( RENDERPASS_ALPHA );
break;
case mod_studio:
R_DrawStudioModel( RENDERPASS_ALPHA );
@ -309,7 +309,7 @@ void R_DrawEntitiesOnList (void)
}
}
}
qglDepthMask (1);// back to writing
qglDepthMask(1);// back to writing
}

View File

@ -242,7 +242,7 @@ mspriteframe_t *R_GetSpriteFrame (entity_t *currententity)
}
void R_SpriteDrawModel( int passnum )
void R_DrawSpriteModel( int passnum )
{
float alpha = 1.0F;
mspriteframe_t *frame;

View File

@ -1266,15 +1266,11 @@ void R_StudioDrawMeshes ( mstudiotexture_t * ptexture, short *pskinref, int pass
if ( r_newrefdef.rdflags & RDF_IRGOGGLES && m_pCurrentEntity->flags & RF_IR_VISIBLE)
lv = &irgoggles[0];
if(m_pCurrentEntity->flags & RF_TRANSLUCENT)
{
Msg("%s %g\n", m_pCurrentEntity->model->name, m_pCurrentEntity->alpha );
qglColor4f( 1.0f, 1.0f, 1.0f, m_pCurrentEntity->alpha );
}
else qglColor4f( lv[0], lv[1], lv[2], 1.0f );//get light from floor
if (flags & STUDIO_NF_ADDITIVE)//additive is self-lighting texture
qglColor4f( 1.0f, 1.0f, 1.0f, 0.8f );
else if(m_pCurrentEntity->flags & RF_TRANSLUCENT)
qglColor4f( 1.0f, 1.0f, 1.0f, m_pCurrentEntity->alpha );
else qglColor4f( lv[0], lv[1], lv[2], 1.0f );//get light from floor
av = m_pxformverts[ptricmds[0]];

90
render/render.plg Normal file
View File

@ -0,0 +1,90 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: render - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\Temp\RSP5F7.tmp" with contents
[
/nologo /ML /W3 /GX /O2 /Ob0 /I "../public" /I "../platform/formats" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"..\temp\render\!release/" /Fd"..\temp\render\!release/" /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_mesh.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:\Temp\RSP5F7.tmp"
Creating temporary file "C:\Temp\RSP5F8.tmp" with contents
[
kernel32.lib user32.lib gdi32.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /out:"..\temp\render\!release/render.dll" /implib:"..\temp\render\!release/render.lib" /libpath:"../public/libs/"
"\XASH3D\src_main\!source\temp\render\!release\gl_draw.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_light.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_mesh.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_model.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_rmain.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_rmisc.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_rsurf.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_warp.obj"
"\XASH3D\src_main\!source\temp\render\!release\gl_widnt.obj"
"\XASH3D\src_main\!source\temp\render\!release\glw_imp.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_backend.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_bloom.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_bspmod.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_sprite.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_studio.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_texture.obj"
"\XASH3D\src_main\!source\temp\render\!release\r_utils.obj"
]
Creating command line "link.exe @C:\Temp\RSP5F8.tmp"
Creating temporary file "C:\Temp\RSP5F9.bat" with contents
[
@echo off
copy \XASH3D\src_main\!source\temp\render\!release\render.dll "D:\Xash3D\bin\render.dll"
]
Creating command line "C:\Temp\RSP5F9.bat"
Compiling...
gl_draw.c
gl_light.c
gl_mesh.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
r_studio.c
r_texture.c
r_utils.c
Generating Code...
Linking...
Creating library ..\temp\render\!release/render.lib and object ..\temp\render\!release/render.exp
<h3>Output Window</h3>
Performing Custom Build Step on \XASH3D\src_main\!source\temp\render\!release\render.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
render.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>

View File

@ -706,7 +706,7 @@ void G_FindCraneParts()
cable->s.origin[2] = hoist->absmax[2] - 2;
cable->model = "models/cable/tris.md2";
gi.setmodel(cable,cable->model);
cable->s.skinnum = 0;
cable->s.skin = 0;
length = hoist->absmax[2]-1 - hook->absmax[2];
frame = (int)(length/CABLE_SEGMENT);
if((frame+1)*CABLE_SEGMENT < length) frame++;

View File

@ -1296,13 +1296,13 @@ void SpawnItem (edict_t *ent, gitem_t *item)
ent->count = item->quantity;
ent->style = item->tag;
}
if(ent->spawnflags & NO_STUPID_SPINNING) {
if(ent->spawnflags & NO_STUPID_SPINNING)
{
ent->s.effects &= ~EF_ROTATE;
ent->s.renderfx &= ~RF_GLOW;
}
if (ent->model)
gi.modelindex (ent->model);
if (ent->model) gi.modelindex (ent->model);
}
//======================================================================

View File

@ -2,7 +2,7 @@
#include "g_local.h"
int gibsthisframe=0;
int gibsthisframe=0;
int lastgibframe=0;
#define GIB_METAL 1
@ -10,10 +10,9 @@ int lastgibframe=0;
#define GIB_BARREL 3
#define GIB_CRATE 4
#define GIB_ROCK 5
#define GIB_CRYSTAL 6
#define GIB_MECH 7
#define GIB_WOOD 8
#define GIB_TECH 9
#define GIB_MECH 6
#define GIB_WOOD 7
#define GIB_TECH 8
void FadeThink(edict_t *ent)
{
@ -276,7 +275,7 @@ void ThrowHead (edict_t *self, char *gibname, int damage, int type)
char modelname[256];
char *p;
self->s.skinnum = 0;
self->s.skin = 0;
self->s.frame = 0;
VectorClear (self->mins);
VectorClear (self->maxs);
@ -377,12 +376,12 @@ void ThrowClientHead (edict_t *self, int damage)
if (rand()&1)
{
gibname = "models/objects/gibs/head2/tris.md2";
self->s.skinnum = 1; // second skin is player
self->s.skin = 1; // second skin is player
}
else
{
gibname = "models/objects/gibs/skull/tris.md2";
self->s.skinnum = 0;
self->s.skin = 0;
}
self->s.origin[2] += 32;
@ -426,7 +425,7 @@ void debris_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damag
G_FreeEdict (self);
}
void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin, int skin, int effects)
void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin, int body, int effects)
{
edict_t *chunk;
vec3_t v;
@ -452,12 +451,11 @@ void ThrowDebris (edict_t *self, char *modelname, float speed, vec3_t origin, in
chunk->die = debris_die;
// Lazarus: Preserve model name for level changes:
chunk->message = TagMalloc (strlen(modelname)+1,TAG_LEVEL);
chunk->message = TagMalloc (strlen(modelname) + 1,TAG_LEVEL);
strcpy(chunk->message, modelname);
// Lazarus: skin number and effects
chunk->s.body = skin;//FIXME
chunk->s.skinnum = skin;
chunk->s.body = body;
chunk->s.effects |= effects;
gi.linkentity (chunk);
@ -1030,8 +1028,7 @@ void func_explosive_explode (edict_t *self)
VectorScale (size, 0.5, size);
mass = self->mass;
if (!mass)
mass = 75;
if (!mass) mass = 75;
// Lazarus: Use traditional debris for gib_type=0, but non-zero gib_type gives equal
// weight to all models.
@ -1055,14 +1052,9 @@ void func_explosive_explode (edict_t *self)
case GIB_BARREL: ThrowDebris (self, "models/gibs/barrelgib.mdl", 2, chunkorigin, r, 0); break;
case GIB_CRATE: ThrowDebris (self, "models/gibs/wood.mdl", 2, chunkorigin, r, 0); break;
case GIB_ROCK: ThrowDebris (self, "models/gibs/rock.mdl", 2, chunkorigin, r, 0); break;
case GIB_CRYSTAL:
ThrowDebris (self, va("models/objects/crystal_gibs/gib%i.md2",r), 2, chunkorigin, self->s.skinnum, 0); break;
case GIB_MECH:
ThrowDebris (self, va("models/objects/mech_gibs/gib%i.md2",r), 2, chunkorigin, self->s.skinnum, 0); break;
case GIB_WOOD:
ThrowDebris (self, va("models/objects/wood_gibs/gib%i.md2",r), 2, chunkorigin, self->s.skinnum, 0); break;
case GIB_TECH:
ThrowDebris (self, va("models/objects/tech_gibs/gib%i.md2",r), 2, chunkorigin, self->s.skinnum, 0); break;
case GIB_MECH: ThrowDebris (self, "models/gibs/flesh.mdl", 2, chunkorigin, r, 0); break;
case GIB_WOOD: ThrowDebris (self, "models/gibs/wood.mdl", 2, chunkorigin, r, 0); break;
case GIB_TECH: ThrowDebris (self, "models/gibs/computer.mdl", 2, chunkorigin, r, 0); break;
}
}
}
@ -1275,77 +1267,81 @@ void barrel_explode (edict_t *self)
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris1/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 6, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris1/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 7, 0);
// bottom corners
spd = 1.75 * (float)self->dmg / 200.0;
VectorCopy (self->absmin, org);
org[2] += 2;
ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 8, 0);
VectorCopy (self->absmin, org);
org[0] += self->size[0];
org[2] += 2;
ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 5, 0);
VectorCopy (self->absmin, org);
org[1] += self->size[1];
org[2] += 2;
ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 8, 0);
VectorCopy (self->absmin, org);
org[0] += self->size[0];
org[1] += self->size[1];
org[2] += 2;
ThrowDebris (self, "models/objects/debris3/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 5, 0);
// a bunch of little chunks
spd = 2 * self->dmg / 200;
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 0, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 1, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 2, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 3, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 2, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 1, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 3, 0);
org[0] = self->s.origin[0] + crandom() * size[0];
org[1] = self->s.origin[1] + crandom() * size[1];
org[2] = self->s.origin[2] + crandom() * size[2];
ThrowDebris (self, "models/objects/debris2/tris.md2", spd, org, 0, 0);
ThrowDebris (self, "models/gibs/cinder.mdl", spd, org, 0, 0);
// Lazarus: use targets
G_UseTargets (self, self->activator);
// Lazarus: added case for no damage
if(self->dmg) {
if (self->groundentity) {
if(self->dmg)
{
if (self->groundentity)
{
self->s.origin[2] = self->absmin[2] + 2;
BecomeExplosion2 (self);
} else
BecomeExplosion1 (self);
} else {
}
else BecomeExplosion1 (self);
}
else
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("tank/thud.wav"), 1, ATTN_NORM, 0);
G_FreeEdict (self);
}
@ -1369,18 +1365,10 @@ void SP_misc_explobox (edict_t *self)
self->class_id = ENTITY_MISC_EXPLOBOX;
// Lazarus: can use actual barrel parts for debris:
if(self->spawnflags & 1)
{
self->gib_type = GIB_GLASS;//GIB_BARREL;
PrecacheDebris(self->gib_type);
}
else
{
gi.modelindex ("models/objects/debris1/tris.md2");
gi.modelindex ("models/objects/debris2/tris.md2");
gi.modelindex ("models/objects/debris3/tris.md2");
}
self->gib_type = GIB_BARREL;
PrecacheDebris(self->gib_type);
self->solid = SOLID_BBOX;
self->clipmask = MASK_MONSTERSOLID | MASK_PLAYERSOLID;
self->movetype = MOVETYPE_STEP;
@ -1730,7 +1718,7 @@ void SP_misc_deadsoldier (edict_t *ent)
if(ent->style)
{
PatchDeadSoldier();
ent->s.skinnum = ent->style;
ent->s.skin = ent->style;
}
ent->common_name = "Dead Marine";
gi.linkentity (ent);
@ -2781,7 +2769,7 @@ void SP_misc_teleporter (edict_t *ent)
if(!(ent->spawnflags & 4)) {
gi.setmodel (ent, "models/objects/dmspot/tris.md2");
ent->s.skinnum = 1;
ent->s.skin = 1;
if(!(ent->spawnflags & 1)) {
ent->s.effects = EF_TELEPORTER;
ent->s.sound = gi.soundindex ("world/amb10.wav");
@ -2873,7 +2861,7 @@ void SP_misc_teleporter_dest (edict_t *ent)
{
ent->class_id = ENTITY_MISC_TELEPORTER_DEST;
gi.setmodel (ent, "models/objects/dmspot/tris.md2");
ent->s.skinnum = 0;
ent->s.skin = 0;
ent->solid = SOLID_BBOX;
VectorSet (ent->mins, -32, -32, -24);
VectorSet (ent->maxs, 32, 32, -16);
@ -3593,41 +3581,16 @@ int PatchDeadSoldier ()
void PrecacheDebris(int type)
{
int i;
switch(type)
{
case 0:
gi.modelindex ("models/objects/debris1/tris.md2");
gi.modelindex ("models/objects/debris2/tris.md2");
gi.modelindex ("models/objects/debris3/tris.md2");
break;
case GIB_METAL:
for(i = 1; i <=5; i++)
gi.modelindex(va("models/objects/metal_gibs/gib%i.md2",i));
break;
case GIB_GLASS: gi.modelindex("models/gibs/glass.mdl"); break;
case GIB_BARREL: gi.modelindex("models/gibs/barrelgib.mdl"); break;
case GIB_ROCK: gi.modelindex("models/gibs/rock.mdl"); break;
case GIB_CRATE: gi.modelindex("models/gibs/wood.mdl"); break;
case GIB_ROCK:
for(i=1;i<=5;i++)
gi.modelindex(va("models/objects/rock_gibs/gib%i.md2",i));
break;
case GIB_CRYSTAL:
for(i=1;i<=5;i++)
gi.modelindex(va("models/objects/crystal_gibs/gib%i.md2",i));
break;
case GIB_MECH:
for(i=1;i<=5;i++)
gi.modelindex(va("models/objects/mech_gibs/gib%i.md2",i));
break;
case GIB_WOOD:
for(i=1;i<=5;i++)
gi.modelindex(va("models/objects/wood_gibs/gib%i.md2",i));
break;
case GIB_TECH:
for(i=1;i<=5;i++)
gi.modelindex(va("models/objects/tech_gibs/gib%i.md2",i));
break;
case GIB_GLASS: gi.modelindex("models/gibs/glass.mdl"); break;
case GIB_METAL: gi.modelindex("models/gibs/metal.mdl"); break;
case GIB_BARREL: gi.modelindex("models/gibs/barrelgib.mdl"); break;
case GIB_MECH: gi.modelindex("models/gibs/flesh.mdl"); break;
case GIB_WOOD: gi.modelindex("models/gibs/wood.mdl"); break;
case GIB_TECH: gi.modelindex("models/gibs/computer.mdl"); break;
default: gi.modelindex("models/gibs/cinder.mdl"); break;
}
}

View File

@ -384,7 +384,7 @@ void AddReflection (edict_t *ent)
ent->reflection[i]->s.weaponmodel = ent->s.weaponmodel;
ent->reflection[i]->s.body = ent->s.body;
ent->reflection[i]->s.sequence = ent->s.sequence;
ent->reflection[i]->s.skinnum = ent->s.skinnum;
ent->reflection[i]->s.skin = ent->s.skin;
ent->reflection[i]->s.frame = ent->s.frame;
ent->reflection[i]->s.renderfx = ent->s.renderfx;
ent->reflection[i]->s.effects = ent->s.effects;

View File

@ -1090,7 +1090,7 @@ void target_laser_ps_think (edict_t *self)
gi.WriteByte (count);
gi.WritePosition (tr.endpos);
gi.WriteDir (tr.plane.normal);
gi.WriteByte (self->s.skinnum);
gi.WriteByte (self->s.skin);
gi.multicast (tr.endpos, MSG_PVS);
}
break;
@ -1211,7 +1211,7 @@ void target_laser_think (edict_t *self)
gi.WriteByte (count);
gi.WritePosition (tr.endpos);
gi.WriteDir (tr.plane.normal);
gi.WriteByte (self->s.skinnum);
gi.WriteByte (self->s.skin);
gi.multicast (tr.endpos, MSG_PVS);
}
break;
@ -1268,31 +1268,18 @@ void target_laser_start (edict_t *self)
self->movetype = MOVETYPE_NONE;
self->solid = SOLID_NOT;
self->s.renderfx |= RF_BEAM|RF_TRANSLUCENT;
self->s.modelindex = 1; // must be non-zero
self->s.modelindex = 1; // must be non-zero
// set the beam diameter
if (self->mass > 1)
self->s.frame = self->mass;
else if(self->spawnflags & 64)
self->s.frame = 16;
else
self->s.frame = 4;
else self->s.frame = 4;
// set the color
if (self->spawnflags & 2)
self->s.skinnum = 0xf2f2f0f0;
else if (self->spawnflags & 4)
self->s.skinnum = 0xd0d1d2d3;
else if (self->spawnflags & 8)
self->s.skinnum = 0xf3f3f1f1;
else if (self->spawnflags & 16)
self->s.skinnum = 0xdcdddedf;
else if (self->spawnflags & 32)
self->s.skinnum = 0xe0e1e2e3;
// color will be loaded from xash sprite info
if (!self->dmg)
self->dmg = 1;
if (!self->dmg) self->dmg = 1;
VectorSet (self->mins, -8, -8, -8);
VectorSet (self->maxs, 8, 8, 8);
@ -4024,7 +4011,7 @@ void clone (edict_t *self, edict_t *other, edict_t *activator)
child->pain = parent->pain;
child->die = parent->die;
child->s.effects = parent->s.effects;
child->s.skinnum = parent->s.skinnum;
child->s.skin = parent->s.skin;
child->item = parent->item;
child->moveinfo.sound_start = parent->moveinfo.sound_start;
child->moveinfo.sound_middle = parent->moveinfo.sound_middle;

View File

@ -1396,7 +1396,7 @@ void bfg_think (edict_t *self)
gi.WriteByte (4);
gi.WritePosition (tr.endpos);
gi.WriteDir (tr.plane.normal);
gi.WriteByte (self->s.skinnum);
gi.WriteByte (self->s.skin);
gi.multicast (tr.endpos, MSG_PVS);
break;
}

View File

@ -161,7 +161,7 @@ void SaveEntProps(edict_t *e, file_t *f)
" body = %d\n"
" sequence = %d\n"
" frame = %d\n"
" skinnum = %d\n"
" skin = %d\n"
" effects = 0x%08x\n"
" solid = 0x%08x\n"
" sound = %d\n"
@ -169,7 +169,7 @@ void SaveEntProps(edict_t *e, file_t *f)
e->s.number,vtos(e->s.origin),vtos(e->s.angles),
vtos(e->s.old_origin),e->s.modelindex,e->s.weaponmodel,
e->s.body,e->s.sequence,e->s.frame,
e->s.skinnum,e->s.effects,e->s.solid,e->s.sound,
e->s.skin,e->s.effects,e->s.solid,e->s.sound,
e->s.event);
gi.Fs.Printf(f,"inuse = %d\n"
"linkcount = %d\n"
@ -2782,19 +2782,19 @@ void ClientCommand (edict_t *ent)
}
else if (!strcasecmp(cmd,"sk")) {
edict_t *viewing;
int skinnum;
int skin;
viewing = LookingAt(ent,0,NULL,NULL);
if(!viewing)
return;
if(parm) {
skinnum = atoi(parm);
viewing->s.skinnum = skinnum;
skin = atoi(parm);
viewing->s.skin = skin;
gi.linkentity(viewing);
}
else
gi.dprintf("Currently using skin #%i\n",viewing->s.skinnum);
gi.dprintf("Currently using skin #%i\n",viewing->s.skin);
}
else if(!strcasecmp(cmd,"spawn"))

View File

@ -182,7 +182,8 @@ field_t fields[] =
{"renderfx", FOFS(renderfx), F_INT},
{"roll", FOFS(roll), F_FLOAT},
{"roll_speed", FOFS(roll_speed), F_FLOAT},
{"skinnum", FOFS(s.skinnum), F_INT},
{"skin", FOFS(s.skin), F_INT},
{"body", FOFS(s.body), F_INT},
{"speaker", FOFS(speaker), F_EDICT, FFL_NOSPAWN},
{"smooth_movement", FOFS(smooth_movement), F_INT},
{"solidstate", FOFS(solidstate), F_INT},

View File

@ -61,7 +61,7 @@ bool M_SetDeath(edict_t *self, mmove_t **deathmoves)
if(self->monsterinfo.currentmove->endfunc)
self->monsterinfo.currentmove->endfunc(self);
self->s.frame = move->lastframe;
self->s.skinnum |= 1;
self->s.skin |= 1;
return true;
}
return false;
@ -700,9 +700,9 @@ bool monster_start (edict_t *self)
if(!self->max_health)
self->max_health = self->health;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
else
self->s.skinnum &= ~1;
self->s.skin &= ~1;
self->clipmask = MASK_MONSTERSOLID;
if(self->monsterinfo.flies > 1.0)

View File

@ -525,7 +525,7 @@ void actor_pain (edict_t *self, edict_t *other, float kick, int damage)
// DWH: Players don't have pain skins!
// if (self->health < (self->max_health / 2))
// self->s.skinnum = 1;
// self->s.skin = 1;
// Stop weapon sound, if any
self->s.sound = 0;
@ -1526,7 +1526,7 @@ void SP_misc_actor (edict_t *self)
// We've built the misc_actor model to include the standard
// Q2 male skins, specified with the style key. Default=grunt
self->s.skinnum = self->style;
self->s.skin = self->style;
// actors always start in a dormant state, they *must* be used to get going
self->use = actor_use;
@ -1543,7 +1543,7 @@ void SP_misc_actor (edict_t *self)
self->flash->model = "models/objects/flash/tris.md2";
gi.setmodel(self->flash,self->flash->model);
self->flash->solid = SOLID_NOT;
self->flash->s.skinnum = 0;
self->flash->s.skin = 0;
self->flash->s.effects = EF_PLASMA;
self->flash->s.renderfx = RF_FULLBRIGHT;
self->flash->svflags |= SVF_NOCLIENT;

View File

@ -1,18 +1,18 @@
/*
==============================================================================
BERSERK
==============================================================================
*/
#include "g_local.h"
#include "m_berserk.h"
/*
==============================================================================
BERSERK
==============================================================================
*/
#include "g_local.h"
#include "m_berserk.h"
static int sound_pain;
static int sound_die;
static int sound_idle;
static int sound_die;
static int sound_idle;
static int sound_punch;
static int sound_sight;
static int sound_search;
@ -26,304 +26,304 @@ void berserk_search (edict_t *self)
{
gi.sound (self, CHAN_VOICE, sound_search, 1, ATTN_NORM, 0);
}
void berserk_fidget (edict_t *self);
mframe_t berserk_frames_stand [] =
{
ai_stand, 0, berserk_fidget,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL
};
mmove_t berserk_move_stand = {FRAME_stand1, FRAME_stand5, berserk_frames_stand, NULL};
void berserk_stand (edict_t *self)
{
self->monsterinfo.currentmove = &berserk_move_stand;
}
mframe_t berserk_frames_stand_fidget [] =
{
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL
};
mmove_t berserk_move_stand_fidget = {FRAME_standb1, FRAME_standb20, berserk_frames_stand_fidget, berserk_stand};
void berserk_fidget (edict_t *self)
{
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
return;
if (random() > 0.15)
return;
void berserk_fidget (edict_t *self);
mframe_t berserk_frames_stand [] =
{
ai_stand, 0, berserk_fidget,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL
};
mmove_t berserk_move_stand = {FRAME_stand1, FRAME_stand5, berserk_frames_stand, NULL};
void berserk_stand (edict_t *self)
{
self->monsterinfo.currentmove = &berserk_move_stand;
}
mframe_t berserk_frames_stand_fidget [] =
{
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL
};
mmove_t berserk_move_stand_fidget = {FRAME_standb1, FRAME_standb20, berserk_frames_stand_fidget, berserk_stand};
void berserk_fidget (edict_t *self)
{
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
return;
if (random() > 0.15)
return;
self->monsterinfo.currentmove = &berserk_move_stand_fidget;
if(!(self->spawnflags & SF_MONSTER_AMBUSH))
gi.sound (self, CHAN_WEAPON, sound_idle, 1, ATTN_IDLE, 0);
}
mframe_t berserk_frames_walk [] =
{
ai_walk, 9.1, NULL,
ai_walk, 6.3, NULL,
ai_walk, 4.9, NULL,
ai_walk, 6.7, NULL,
ai_walk, 6.0, NULL,
ai_walk, 8.2, NULL,
ai_walk, 7.2, NULL,
ai_walk, 6.1, NULL,
ai_walk, 4.9, NULL,
ai_walk, 4.7, NULL,
ai_walk, 4.7, NULL,
ai_walk, 4.8, NULL
};
mmove_t berserk_move_walk = {FRAME_walkc1, FRAME_walkc11, berserk_frames_walk, NULL};
void berserk_walk (edict_t *self)
{
self->monsterinfo.currentmove = &berserk_move_walk;
}
/*
*****************************
SKIPPED THIS FOR NOW!
*****************************
Running -> Arm raised in air
void() berserk_runb1 =[ $r_att1 , berserk_runb2 ] {ai_run(21);};
void() berserk_runb2 =[ $r_att2 , berserk_runb3 ] {ai_run(11);};
void() berserk_runb3 =[ $r_att3 , berserk_runb4 ] {ai_run(21);};
void() berserk_runb4 =[ $r_att4 , berserk_runb5 ] {ai_run(25);};
void() berserk_runb5 =[ $r_att5 , berserk_runb6 ] {ai_run(18);};
void() berserk_runb6 =[ $r_att6 , berserk_runb7 ] {ai_run(19);};
// running with arm in air : start loop
void() berserk_runb7 =[ $r_att7 , berserk_runb8 ] {ai_run(21);};
void() berserk_runb8 =[ $r_att8 , berserk_runb9 ] {ai_run(11);};
void() berserk_runb9 =[ $r_att9 , berserk_runb10 ] {ai_run(21);};
void() berserk_runb10 =[ $r_att10 , berserk_runb11 ] {ai_run(25);};
void() berserk_runb11 =[ $r_att11 , berserk_runb12 ] {ai_run(18);};
void() berserk_runb12 =[ $r_att12 , berserk_runb7 ] {ai_run(19);};
// running with arm in air : end loop
*/
mframe_t berserk_frames_run1 [] =
{
ai_run, 21, NULL,
ai_run, 11, NULL,
ai_run, 21, NULL,
ai_run, 25, NULL,
ai_run, 18, NULL,
ai_run, 19, NULL
};
mmove_t berserk_move_run1 = {FRAME_run1, FRAME_run6, berserk_frames_run1, NULL};
void berserk_run (edict_t *self)
{
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
self->monsterinfo.currentmove = &berserk_move_stand;
else
self->monsterinfo.currentmove = &berserk_move_run1;
}
void berserk_attack_spike (edict_t *self)
{
static vec3_t aim = {MELEE_DISTANCE, 0, -24};
fire_hit (self, aim, (15 + (rand() % 6)), 400); // Faster attack -- upwards and backwards
}
if(!(self->spawnflags & SF_MONSTER_AMBUSH))
gi.sound (self, CHAN_WEAPON, sound_idle, 1, ATTN_IDLE, 0);
}
mframe_t berserk_frames_walk [] =
{
ai_walk, 9.1, NULL,
ai_walk, 6.3, NULL,
ai_walk, 4.9, NULL,
ai_walk, 6.7, NULL,
ai_walk, 6.0, NULL,
ai_walk, 8.2, NULL,
ai_walk, 7.2, NULL,
ai_walk, 6.1, NULL,
ai_walk, 4.9, NULL,
ai_walk, 4.7, NULL,
ai_walk, 4.7, NULL,
ai_walk, 4.8, NULL
};
mmove_t berserk_move_walk = {FRAME_walkc1, FRAME_walkc11, berserk_frames_walk, NULL};
void berserk_walk (edict_t *self)
{
self->monsterinfo.currentmove = &berserk_move_walk;
}
/*
*****************************
SKIPPED THIS FOR NOW!
*****************************
Running -> Arm raised in air
void() berserk_runb1 =[ $r_att1 , berserk_runb2 ] {ai_run(21);};
void() berserk_runb2 =[ $r_att2 , berserk_runb3 ] {ai_run(11);};
void() berserk_runb3 =[ $r_att3 , berserk_runb4 ] {ai_run(21);};
void() berserk_runb4 =[ $r_att4 , berserk_runb5 ] {ai_run(25);};
void() berserk_runb5 =[ $r_att5 , berserk_runb6 ] {ai_run(18);};
void() berserk_runb6 =[ $r_att6 , berserk_runb7 ] {ai_run(19);};
// running with arm in air : start loop
void() berserk_runb7 =[ $r_att7 , berserk_runb8 ] {ai_run(21);};
void() berserk_runb8 =[ $r_att8 , berserk_runb9 ] {ai_run(11);};
void() berserk_runb9 =[ $r_att9 , berserk_runb10 ] {ai_run(21);};
void() berserk_runb10 =[ $r_att10 , berserk_runb11 ] {ai_run(25);};
void() berserk_runb11 =[ $r_att11 , berserk_runb12 ] {ai_run(18);};
void() berserk_runb12 =[ $r_att12 , berserk_runb7 ] {ai_run(19);};
// running with arm in air : end loop
*/
mframe_t berserk_frames_run1 [] =
{
ai_run, 21, NULL,
ai_run, 11, NULL,
ai_run, 21, NULL,
ai_run, 25, NULL,
ai_run, 18, NULL,
ai_run, 19, NULL
};
mmove_t berserk_move_run1 = {FRAME_run1, FRAME_run6, berserk_frames_run1, NULL};
void berserk_run (edict_t *self)
{
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
self->monsterinfo.currentmove = &berserk_move_stand;
else
self->monsterinfo.currentmove = &berserk_move_run1;
}
void berserk_attack_spike (edict_t *self)
{
static vec3_t aim = {MELEE_DISTANCE, 0, -24};
fire_hit (self, aim, (15 + (rand() % 6)), 400); // Faster attack -- upwards and backwards
}
void berserk_swing (edict_t *self)
{
gi.sound (self, CHAN_WEAPON, sound_punch, 1, ATTN_NORM, 0);
}
mframe_t berserk_frames_attack_spike [] =
{
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, berserk_swing,
ai_charge, 0, berserk_attack_spike,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL
};
mmove_t berserk_move_attack_spike = {FRAME_att_c1, FRAME_att_c8, berserk_frames_attack_spike, berserk_run};
void berserk_attack_club (edict_t *self)
{
vec3_t aim;
VectorSet (aim, MELEE_DISTANCE, self->mins[0], -4);
fire_hit (self, aim, (5 + (rand() % 6)), 400); // Slower attack
}
mframe_t berserk_frames_attack_club [] =
{
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, berserk_swing,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, berserk_attack_club,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL
};
mmove_t berserk_move_attack_club = {FRAME_att_c9, FRAME_att_c20, berserk_frames_attack_club, berserk_run};
void berserk_strike (edict_t *self)
mframe_t berserk_frames_attack_spike [] =
{
//FIXME play impact sound
}
mframe_t berserk_frames_attack_strike [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, berserk_swing,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, berserk_strike,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 9.7, NULL,
ai_move, 13.6, NULL
};
mmove_t berserk_move_attack_strike = {FRAME_att_c21, FRAME_att_c34, berserk_frames_attack_strike, berserk_run};
void berserk_melee (edict_t *self)
{
if ((rand() % 2) == 0)
self->monsterinfo.currentmove = &berserk_move_attack_spike;
else
self->monsterinfo.currentmove = &berserk_move_attack_club;
}
/*
void() berserk_atke1 =[ $r_attb1, berserk_atke2 ] {ai_run(9);};
void() berserk_atke2 =[ $r_attb2, berserk_atke3 ] {ai_run(6);};
void() berserk_atke3 =[ $r_attb3, berserk_atke4 ] {ai_run(18.4);};
void() berserk_atke4 =[ $r_attb4, berserk_atke5 ] {ai_run(25);};
void() berserk_atke5 =[ $r_attb5, berserk_atke6 ] {ai_run(14);};
void() berserk_atke6 =[ $r_attb6, berserk_atke7 ] {ai_run(20);};
void() berserk_atke7 =[ $r_attb7, berserk_atke8 ] {ai_run(8.5);};
void() berserk_atke8 =[ $r_attb8, berserk_atke9 ] {ai_run(3);};
void() berserk_atke9 =[ $r_attb9, berserk_atke10 ] {ai_run(17.5);};
void() berserk_atke10 =[ $r_attb10, berserk_atke11 ] {ai_run(17);};
void() berserk_atke11 =[ $r_attb11, berserk_atke12 ] {ai_run(9);};
void() berserk_atke12 =[ $r_attb12, berserk_atke13 ] {ai_run(25);};
void() berserk_atke13 =[ $r_attb13, berserk_atke14 ] {ai_run(3.7);};
void() berserk_atke14 =[ $r_attb14, berserk_atke15 ] {ai_run(2.6);};
void() berserk_atke15 =[ $r_attb15, berserk_atke16 ] {ai_run(19);};
void() berserk_atke16 =[ $r_attb16, berserk_atke17 ] {ai_run(25);};
void() berserk_atke17 =[ $r_attb17, berserk_atke18 ] {ai_run(19.6);};
void() berserk_atke18 =[ $r_attb18, berserk_run1 ] {ai_run(7.8);};
*/
mframe_t berserk_frames_pain1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_pain1 = {FRAME_painc1, FRAME_painc4, berserk_frames_pain1, berserk_run};
mframe_t berserk_frames_pain2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_pain2 = {FRAME_painb1, FRAME_painb20, berserk_frames_pain2, berserk_run};
void berserk_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
if (level.time < self->pain_debounce_time)
return;
self->pain_debounce_time = level.time + 3;
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, berserk_swing,
ai_charge, 0, berserk_attack_spike,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL
};
mmove_t berserk_move_attack_spike = {FRAME_att_c1, FRAME_att_c8, berserk_frames_attack_spike, berserk_run};
void berserk_attack_club (edict_t *self)
{
vec3_t aim;
VectorSet (aim, MELEE_DISTANCE, self->mins[0], -4);
fire_hit (self, aim, (5 + (rand() % 6)), 400); // Slower attack
}
mframe_t berserk_frames_attack_club [] =
{
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, berserk_swing,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, berserk_attack_club,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL
};
mmove_t berserk_move_attack_club = {FRAME_att_c9, FRAME_att_c20, berserk_frames_attack_club, berserk_run};
void berserk_strike (edict_t *self)
{
//FIXME play impact sound
}
mframe_t berserk_frames_attack_strike [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, berserk_swing,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, berserk_strike,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 9.7, NULL,
ai_move, 13.6, NULL
};
mmove_t berserk_move_attack_strike = {FRAME_att_c21, FRAME_att_c34, berserk_frames_attack_strike, berserk_run};
void berserk_melee (edict_t *self)
{
if ((rand() % 2) == 0)
self->monsterinfo.currentmove = &berserk_move_attack_spike;
else
self->monsterinfo.currentmove = &berserk_move_attack_club;
}
/*
void() berserk_atke1 =[ $r_attb1, berserk_atke2 ] {ai_run(9);};
void() berserk_atke2 =[ $r_attb2, berserk_atke3 ] {ai_run(6);};
void() berserk_atke3 =[ $r_attb3, berserk_atke4 ] {ai_run(18.4);};
void() berserk_atke4 =[ $r_attb4, berserk_atke5 ] {ai_run(25);};
void() berserk_atke5 =[ $r_attb5, berserk_atke6 ] {ai_run(14);};
void() berserk_atke6 =[ $r_attb6, berserk_atke7 ] {ai_run(20);};
void() berserk_atke7 =[ $r_attb7, berserk_atke8 ] {ai_run(8.5);};
void() berserk_atke8 =[ $r_attb8, berserk_atke9 ] {ai_run(3);};
void() berserk_atke9 =[ $r_attb9, berserk_atke10 ] {ai_run(17.5);};
void() berserk_atke10 =[ $r_attb10, berserk_atke11 ] {ai_run(17);};
void() berserk_atke11 =[ $r_attb11, berserk_atke12 ] {ai_run(9);};
void() berserk_atke12 =[ $r_attb12, berserk_atke13 ] {ai_run(25);};
void() berserk_atke13 =[ $r_attb13, berserk_atke14 ] {ai_run(3.7);};
void() berserk_atke14 =[ $r_attb14, berserk_atke15 ] {ai_run(2.6);};
void() berserk_atke15 =[ $r_attb15, berserk_atke16 ] {ai_run(19);};
void() berserk_atke16 =[ $r_attb16, berserk_atke17 ] {ai_run(25);};
void() berserk_atke17 =[ $r_attb17, berserk_atke18 ] {ai_run(19.6);};
void() berserk_atke18 =[ $r_attb18, berserk_run1 ] {ai_run(7.8);};
*/
mframe_t berserk_frames_pain1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_pain1 = {FRAME_painc1, FRAME_painc4, berserk_frames_pain1, berserk_run};
mframe_t berserk_frames_pain2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_pain2 = {FRAME_painb1, FRAME_painb20, berserk_frames_pain2, berserk_run};
void berserk_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
self->pain_debounce_time = level.time + 3;
gi.sound (self, CHAN_VOICE, sound_pain, 1, ATTN_NORM, 0);
if (skill->value == 3)
return; // no pain anims in nightmare
if ((damage < 20) || (random() < 0.5))
self->monsterinfo.currentmove = &berserk_move_pain1;
else
self->monsterinfo.currentmove = &berserk_move_pain2;
}
void berserk_dead (edict_t *self)
{
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, -8);
self->movetype = MOVETYPE_TOSS;
}
void berserk_dead (edict_t *self)
{
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, -8);
self->movetype = MOVETYPE_TOSS;
self->svflags |= SVF_DEADMONSTER;
self->nextthink = 0;
gi.linkentity (self);
self->nextthink = 0;
gi.linkentity (self);
M_FlyCheck (self);
// Lazarus monster fade
@ -332,73 +332,73 @@ void berserk_dead (edict_t *self)
self->think=FadeDieSink;
self->nextthink=level.time+corpse_fadetime->value;
}
}
mframe_t berserk_frames_death1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_death1 = {FRAME_death1, FRAME_death13, berserk_frames_death1, berserk_dead};
mframe_t berserk_frames_death2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_death2 = {FRAME_deathc1, FRAME_deathc8, berserk_frames_death2, berserk_dead};
void berserk_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
}
mframe_t berserk_frames_death1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_death1 = {FRAME_death1, FRAME_death13, berserk_frames_death1, berserk_dead};
mframe_t berserk_frames_death2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t berserk_move_death2 = {FRAME_deathc1, FRAME_deathc8, berserk_frames_death2, berserk_dead};
void berserk_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
self->monsterinfo.power_armor_type = POWER_ARMOR_NONE;
if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB))
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
for (n= 0; n < 4; n++)
ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
self->deadflag = DEAD_DEAD;
return;
}
if (self->deadflag == DEAD_DEAD)
return;
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
for (n= 0; n < 4; n++)
ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
self->deadflag = DEAD_DEAD;
return;
}
if (self->deadflag == DEAD_DEAD)
return;
gi.sound (self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
if (damage >= 50)
self->monsterinfo.currentmove = &berserk_move_death1;
else
self->monsterinfo.currentmove = &berserk_move_death2;
}
gi.sound (self, CHAN_VOICE, sound_die, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
if (damage >= 50)
self->monsterinfo.currentmove = &berserk_move_death1;
else
self->monsterinfo.currentmove = &berserk_move_death2;
}
//===========
//Jump
mframe_t berserk_frames_jump [] =
@ -417,23 +417,23 @@ void berserk_jump (edict_t *self)
self->monsterinfo.currentmove = &berserk_move_jump;
}
/*QUAKED monster_berserk (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
*/
void SP_monster_berserk (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
/*QUAKED monster_berserk (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
*/
void SP_monster_berserk (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
self->class_id = ENTITY_MONSTER_BERSERK;
self->spawnflags |= SF_MONSTER_KNOWS_MIRRORS;
// pre-caches
// pre-caches
sound_pain = gi.soundindex ("berserk/berpain2.wav");
sound_die = gi.soundindex ("berserk/berdeth2.wav");
sound_idle = gi.soundindex ("berserk/beridle1.wav");
sound_die = gi.soundindex ("berserk/berdeth2.wav");
sound_idle = gi.soundindex ("berserk/beridle1.wav");
sound_punch = gi.soundindex ("berserk/attack.wav");
sound_search = gi.soundindex ("berserk/bersrch1.wav");
sound_sight = gi.soundindex ("berserk/sight.wav");
@ -442,32 +442,32 @@ void SP_monster_berserk (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/berserk/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex("models/monsters/berserk/tris.md2");
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, 32);
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
self->s.modelindex = gi.modelindex("models/monsters/berserk/tris.md2");
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, 32);
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
// Lazarus: mapper-configurable health
if(!self->health)
self->health = 240;
if(!self->gib_health)
self->gib_health = -60;
if(!self->mass)
self->mass = 250;
self->pain = berserk_pain;
self->die = berserk_die;
self->monsterinfo.stand = berserk_stand;
self->monsterinfo.walk = berserk_walk;
self->monsterinfo.run = berserk_run;
self->monsterinfo.dodge = NULL;
self->monsterinfo.attack = NULL;
self->monsterinfo.melee = berserk_melee;
if(!self->mass)
self->mass = 250;
self->pain = berserk_pain;
self->die = berserk_die;
self->monsterinfo.stand = berserk_stand;
self->monsterinfo.walk = berserk_walk;
self->monsterinfo.run = berserk_run;
self->monsterinfo.dodge = NULL;
self->monsterinfo.attack = NULL;
self->monsterinfo.melee = berserk_melee;
self->monsterinfo.sight = berserk_sight;
self->monsterinfo.search = berserk_search;
if(monsterjump->value)
@ -477,7 +477,7 @@ void SP_monster_berserk (edict_t *self)
self->monsterinfo.jumpdn = 160;
}
self->monsterinfo.currentmove = &berserk_move_stand;
self->monsterinfo.currentmove = &berserk_move_stand;
if(self->health < 0)
{
mmove_t *deathmoves[] = {&berserk_move_death1,
@ -485,7 +485,7 @@ void SP_monster_berserk (edict_t *self)
NULL};
M_SetDeath(self,(mmove_t **)&deathmoves);
}
self->monsterinfo.scale = MODEL_SCALE;
self->monsterinfo.scale = MODEL_SCALE;
// Lazarus
if(self->powerarmor) {
@ -495,8 +495,8 @@ void SP_monster_berserk (edict_t *self)
if(!self->monsterinfo.flies)
self->monsterinfo.flies = 0.20;
self->common_name = "Berserker";
gi.linkentity (self);
walkmonster_start (self);
}
gi.linkentity (self);
walkmonster_start (self);
}

View File

@ -461,7 +461,7 @@ void boss2_reattack_mg (edict_t *self)
void boss2_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -638,7 +638,7 @@ void SP_monster_boss2 (edict_t *self)
if ( (self->spawnflags & SF_MONSTER_SPECIAL) && self->style )
{
PatchMonsterModel("models/monsters/boss2/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
sound_pain1 = gi.soundindex ("bosshovr/bhvpain1.wav");
@ -656,7 +656,7 @@ void SP_monster_boss2 (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/boss2/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/boss2/tris.md2");

View File

@ -399,7 +399,7 @@ void jorg_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
self->s.sound = 0;

View File

@ -537,7 +537,7 @@ void makron_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;

View File

@ -1,14 +1,14 @@
/*
==============================================================================
brain
==============================================================================
*/
#include "g_local.h"
#include "m_brain.h"
/*
==============================================================================
brain
==============================================================================
*/
#include "g_local.h"
#include "m_brain.h"
static int sound_chest_open;
static int sound_tentacles_extend;
@ -37,24 +37,24 @@ void brain_search (edict_t *self)
}
void brain_run (edict_t *self);
void brain_dead (edict_t *self);
void brain_run (edict_t *self);
void brain_dead (edict_t *self);
//
// STAND
//
mframe_t brain_frames_stand [] =
{
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
mframe_t brain_frames_stand [] =
{
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL,
@ -79,19 +79,19 @@ mframe_t brain_frames_stand [] =
ai_stand, 0, NULL,
ai_stand, 0, NULL,
ai_stand, 0, NULL
};
mmove_t brain_move_stand = {FRAME_stand01, FRAME_stand30, brain_frames_stand, NULL};
void brain_stand (edict_t *self)
{
self->monsterinfo.currentmove = &brain_move_stand;
}
};
mmove_t brain_move_stand = {FRAME_stand01, FRAME_stand30, brain_frames_stand, NULL};
void brain_stand (edict_t *self)
{
self->monsterinfo.currentmove = &brain_move_stand;
}
//
// IDLE
//
mframe_t brain_frames_idle [] =
{
ai_stand, 0, NULL,
@ -140,79 +140,79 @@ void brain_idle (edict_t *self)
//
// WALK
//
mframe_t brain_frames_walk1 [] =
{
ai_walk, 7, NULL,
ai_walk, 2, NULL,
ai_walk, 3, NULL,
ai_walk, 3, NULL,
ai_walk, 1, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 9, NULL,
ai_walk, -4, NULL,
ai_walk, -1, NULL,
ai_walk, 2, NULL
};
mmove_t brain_move_walk1 = {FRAME_walk101, FRAME_walk111, brain_frames_walk1, NULL};
mframe_t brain_frames_walk1 [] =
{
ai_walk, 7, NULL,
ai_walk, 2, NULL,
ai_walk, 3, NULL,
ai_walk, 3, NULL,
ai_walk, 1, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 9, NULL,
ai_walk, -4, NULL,
ai_walk, -1, NULL,
ai_walk, 2, NULL
};
mmove_t brain_move_walk1 = {FRAME_walk101, FRAME_walk111, brain_frames_walk1, NULL};
// walk2 is FUBAR, do not use
#if 0
#if 0
void brain_walk2_cycle (edict_t *self)
{
if (random() > 0.1)
self->monsterinfo.nextframe = FRAME_walk220;
}
mframe_t brain_frames_walk2 [] =
{
ai_walk, 3, NULL,
ai_walk, -2, NULL,
ai_walk, -4, NULL,
ai_walk, -3, NULL,
ai_walk, 0, NULL,
ai_walk, 1, NULL,
ai_walk, 12, NULL,
ai_walk, 0, NULL,
ai_walk, -3, NULL,
mframe_t brain_frames_walk2 [] =
{
ai_walk, 3, NULL,
ai_walk, -2, NULL,
ai_walk, -4, NULL,
ai_walk, -3, NULL,
ai_walk, 0, NULL,
ai_walk, 1, NULL,
ai_walk, 12, NULL,
ai_walk, 0, NULL,
ai_walk, -3, NULL,
ai_walk, 0, NULL,
ai_walk, -2, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 1, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, -2, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 1, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 0, NULL,
ai_walk, 10, NULL, // Cycle Start
ai_walk, -1, NULL,
ai_walk, 7, NULL,
ai_walk, 0, NULL,
ai_walk, 3, NULL,
ai_walk, -3, NULL,
ai_walk, 2, NULL,
ai_walk, 4, NULL,
ai_walk, -3, NULL,
ai_walk, 2, NULL,
ai_walk, -1, NULL,
ai_walk, 7, NULL,
ai_walk, 0, NULL,
ai_walk, 4, brain_walk2_cycle,
ai_walk, -1, NULL,
ai_walk, -1, NULL,
ai_walk, -8, NULL,
ai_walk, 0, NULL,
ai_walk, 1, NULL,
ai_walk, 5, NULL,
ai_walk, 2, NULL,
ai_walk, -1, NULL,
ai_walk, -5, NULL
};
mmove_t brain_move_walk2 = {FRAME_walk201, FRAME_walk240, brain_frames_walk2, NULL};
ai_walk, 3, NULL,
ai_walk, -3, NULL,
ai_walk, 2, NULL,
ai_walk, 4, NULL,
ai_walk, -3, NULL,
ai_walk, 2, NULL,
ai_walk, 0, NULL,
ai_walk, 4, brain_walk2_cycle,
ai_walk, -1, NULL,
ai_walk, -1, NULL,
ai_walk, -8, NULL,
ai_walk, 0, NULL,
ai_walk, 1, NULL,
ai_walk, 5, NULL,
ai_walk, 2, NULL,
ai_walk, -1, NULL,
ai_walk, -5, NULL
};
mmove_t brain_move_walk2 = {FRAME_walk201, FRAME_walk240, brain_frames_walk2, NULL};
#endif
void brain_walk (edict_t *self)
{
// if (random() <= 0.5)
@ -223,75 +223,75 @@ void brain_walk (edict_t *self)
mframe_t brain_frames_defense [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t brain_move_defense = {FRAME_defens01, FRAME_defens08, brain_frames_defense, NULL};
mframe_t brain_frames_pain3 [] =
{
ai_move, -2, NULL,
ai_move, 2, NULL,
ai_move, 1, NULL,
ai_move, 3, NULL,
ai_move, 0, NULL,
ai_move, -4, NULL
};
mmove_t brain_move_pain3 = {FRAME_pain301, FRAME_pain306, brain_frames_pain3, brain_run};
mframe_t brain_frames_pain2 [] =
{
ai_move, -2, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 3, NULL,
ai_move, 1, NULL,
ai_move, -2, NULL
};
mmove_t brain_move_pain2 = {FRAME_pain201, FRAME_pain208, brain_frames_pain2, brain_run};
mframe_t brain_frames_pain1 [] =
{
ai_move, -6, NULL,
ai_move, -2, NULL,
ai_move, -6, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 2, NULL,
ai_move, 0, NULL,
ai_move, 2, NULL,
ai_move, 1, NULL,
ai_move, 7, NULL,
ai_move, 0, NULL,
ai_move, 3, NULL,
ai_move, -1, NULL
};
mmove_t brain_move_pain1 = {FRAME_pain101, FRAME_pain121, brain_frames_pain1, brain_run};
mframe_t brain_frames_defense [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t brain_move_defense = {FRAME_defens01, FRAME_defens08, brain_frames_defense, NULL};
mframe_t brain_frames_pain3 [] =
{
ai_move, -2, NULL,
ai_move, 2, NULL,
ai_move, 1, NULL,
ai_move, 3, NULL,
ai_move, 0, NULL,
ai_move, -4, NULL
};
mmove_t brain_move_pain3 = {FRAME_pain301, FRAME_pain306, brain_frames_pain3, brain_run};
mframe_t brain_frames_pain2 [] =
{
ai_move, -2, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 3, NULL,
ai_move, 1, NULL,
ai_move, -2, NULL
};
mmove_t brain_move_pain2 = {FRAME_pain201, FRAME_pain208, brain_frames_pain2, brain_run};
mframe_t brain_frames_pain1 [] =
{
ai_move, -6, NULL,
ai_move, -2, NULL,
ai_move, -6, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 2, NULL,
ai_move, 0, NULL,
ai_move, 2, NULL,
ai_move, 1, NULL,
ai_move, 7, NULL,
ai_move, 0, NULL,
ai_move, 3, NULL,
ai_move, -1, NULL
};
mmove_t brain_move_pain1 = {FRAME_pain101, FRAME_pain121, brain_frames_pain1, brain_run};
//
// DUCK
//
void brain_duck_down (edict_t *self)
{
if (self->monsterinfo.aiflags & AI_DUCKED)
@ -318,18 +318,18 @@ void brain_duck_up (edict_t *self)
gi.linkentity (self);
}
mframe_t brain_frames_duck [] =
{
ai_move, 0, NULL,
ai_move, -2, brain_duck_down,
ai_move, 17, brain_duck_hold,
ai_move, -3, NULL,
ai_move, -1, brain_duck_up,
ai_move, -5, NULL,
ai_move, -6, NULL,
ai_move, -6, NULL
};
mmove_t brain_move_duck = {FRAME_duck01, FRAME_duck08, brain_frames_duck, brain_run};
mframe_t brain_frames_duck [] =
{
ai_move, 0, NULL,
ai_move, -2, brain_duck_down,
ai_move, 17, brain_duck_hold,
ai_move, -3, NULL,
ai_move, -1, brain_duck_up,
ai_move, -5, NULL,
ai_move, -6, NULL,
ai_move, -6, NULL
};
mmove_t brain_move_duck = {FRAME_duck01, FRAME_duck08, brain_frames_duck, brain_run};
void brain_dodge (edict_t *self, edict_t *attacker, float eta)
{
@ -343,44 +343,44 @@ void brain_dodge (edict_t *self, edict_t *attacker, float eta)
self->monsterinfo.currentmove = &brain_move_duck;
}
mframe_t brain_frames_death2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 9, NULL,
ai_move, 0, NULL
};
mmove_t brain_move_death2 = {FRAME_death201, FRAME_death205, brain_frames_death2, brain_dead};
mframe_t brain_frames_death1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, -2, NULL,
ai_move, 9, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t brain_move_death1 = {FRAME_death101, FRAME_death118, brain_frames_death1, brain_dead};
mframe_t brain_frames_death2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 9, NULL,
ai_move, 0, NULL
};
mmove_t brain_move_death2 = {FRAME_death201, FRAME_death205, brain_frames_death2, brain_dead};
mframe_t brain_frames_death1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, -2, NULL,
ai_move, 9, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t brain_move_death1 = {FRAME_death101, FRAME_death118, brain_frames_death1, brain_dead};
//
// MELEE
//
void brain_swing_right (edict_t *self)
{
gi.sound (self, CHAN_BODY, sound_melee1, 1, ATTN_NORM, 0);
@ -409,29 +409,29 @@ void brain_hit_left (edict_t *self)
gi.sound (self, CHAN_WEAPON, sound_melee3, 1, ATTN_NORM, 0);
}
mframe_t brain_frames_attack1 [] =
{
ai_charge, 8, NULL,
ai_charge, 3, NULL,
ai_charge, 5, NULL,
ai_charge, 0, NULL,
ai_charge, -3, brain_swing_right,
ai_charge, 0, NULL,
ai_charge, -5, NULL,
ai_charge, -7, brain_hit_right,
ai_charge, 0, NULL,
ai_charge, 6, brain_swing_left,
ai_charge, 1, NULL,
ai_charge, 2, brain_hit_left,
ai_charge, -3, NULL,
ai_charge, 6, NULL,
ai_charge, -1, NULL,
ai_charge, -3, NULL,
ai_charge, 2, NULL,
ai_charge, -11,NULL
};
mmove_t brain_move_attack1 = {FRAME_attak101, FRAME_attak118, brain_frames_attack1, brain_run};
mframe_t brain_frames_attack1 [] =
{
ai_charge, 8, NULL,
ai_charge, 3, NULL,
ai_charge, 5, NULL,
ai_charge, 0, NULL,
ai_charge, -3, brain_swing_right,
ai_charge, 0, NULL,
ai_charge, -5, NULL,
ai_charge, -7, brain_hit_right,
ai_charge, 0, NULL,
ai_charge, 6, brain_swing_left,
ai_charge, 1, NULL,
ai_charge, 2, brain_hit_left,
ai_charge, -3, NULL,
ai_charge, 6, NULL,
ai_charge, -1, NULL,
ai_charge, -3, NULL,
ai_charge, 2, NULL,
ai_charge, -11,NULL
};
mmove_t brain_move_attack1 = {FRAME_attak101, FRAME_attak118, brain_frames_attack1, brain_run};
void brain_chest_open (edict_t *self)
{
self->spawnflags &= ~65536;
@ -459,27 +459,27 @@ void brain_chest_closed (edict_t *self)
}
}
mframe_t brain_frames_attack2 [] =
{
ai_charge, 5, NULL,
ai_charge, -4, NULL,
ai_charge, -4, NULL,
ai_charge, -3, NULL,
ai_charge, 0, brain_chest_open,
ai_charge, 0, NULL,
ai_charge, 13, brain_tentacle_attack,
ai_charge, 0, NULL,
ai_charge, 2, NULL,
ai_charge, 0, NULL,
ai_charge, -9, brain_chest_closed,
ai_charge, 0, NULL,
ai_charge, 4, NULL,
ai_charge, 3, NULL,
ai_charge, 2, NULL,
ai_charge, -3, NULL,
ai_charge, -6, NULL
};
mmove_t brain_move_attack2 = {FRAME_attak201, FRAME_attak217, brain_frames_attack2, brain_run};
mframe_t brain_frames_attack2 [] =
{
ai_charge, 5, NULL,
ai_charge, -4, NULL,
ai_charge, -4, NULL,
ai_charge, -3, NULL,
ai_charge, 0, brain_chest_open,
ai_charge, 0, NULL,
ai_charge, 13, brain_tentacle_attack,
ai_charge, 0, NULL,
ai_charge, 2, NULL,
ai_charge, 0, NULL,
ai_charge, -9, brain_chest_closed,
ai_charge, 0, NULL,
ai_charge, 4, NULL,
ai_charge, 3, NULL,
ai_charge, 2, NULL,
ai_charge, -3, NULL,
ai_charge, -6, NULL
};
mmove_t brain_move_attack2 = {FRAME_attak201, FRAME_attak217, brain_frames_attack2, brain_run};
void brain_melee(edict_t *self)
{
@ -493,73 +493,73 @@ void brain_melee(edict_t *self)
//
// RUN
//
mframe_t brain_frames_run [] =
{
ai_run, 9, NULL,
ai_run, 2, NULL,
ai_run, 3, NULL,
ai_run, 3, NULL,
ai_run, 1, NULL,
ai_run, 0, NULL,
ai_run, 0, NULL,
ai_run, 10, NULL,
ai_run, -4, NULL,
ai_run, -1, NULL,
ai_run, 2, NULL
};
mmove_t brain_move_run = {FRAME_walk101, FRAME_walk111, brain_frames_run, NULL};
void brain_run (edict_t *self)
{
self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN;
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
self->monsterinfo.currentmove = &brain_move_stand;
else
self->monsterinfo.currentmove = &brain_move_run;
}
void brain_pain (edict_t *self, edict_t *other, float kick, int damage)
{
mframe_t brain_frames_run [] =
{
ai_run, 9, NULL,
ai_run, 2, NULL,
ai_run, 3, NULL,
ai_run, 3, NULL,
ai_run, 1, NULL,
ai_run, 0, NULL,
ai_run, 0, NULL,
ai_run, 10, NULL,
ai_run, -4, NULL,
ai_run, -1, NULL,
ai_run, 2, NULL
};
mmove_t brain_move_run = {FRAME_walk101, FRAME_walk111, brain_frames_run, NULL};
void brain_run (edict_t *self)
{
self->monsterinfo.power_armor_type = POWER_ARMOR_SCREEN;
if (self->monsterinfo.aiflags & AI_STAND_GROUND)
self->monsterinfo.currentmove = &brain_move_stand;
else
self->monsterinfo.currentmove = &brain_move_run;
}
void brain_pain (edict_t *self, edict_t *other, float kick, int damage)
{
float r;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
if (level.time < self->pain_debounce_time)
return;
self->pain_debounce_time = level.time + 3;
if (self->health < (self->max_health / 2))
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
self->pain_debounce_time = level.time + 3;
if (skill->value == 3)
return; // no pain anims in nightmare
r = random();
if (r < 0.33)
{
{
gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &brain_move_pain1;
}
else if (r < 0.66)
}
else if (r < 0.66)
{
gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &brain_move_pain2;
}
else
}
else
{
gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &brain_move_pain3;
}
}
void brain_dead (edict_t *self)
{
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, -8);
self->movetype = MOVETYPE_TOSS;
}
}
void brain_dead (edict_t *self)
{
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, -8);
self->movetype = MOVETYPE_TOSS;
self->svflags |= SVF_DEADMONSTER;
self->nextthink = 0;
gi.linkentity (self);
self->nextthink = 0;
gi.linkentity (self);
M_FlyCheck (self);
// Lazarus monster fade
@ -568,54 +568,54 @@ void brain_dead (edict_t *self)
self->think=FadeDieSink;
self->nextthink=level.time+corpse_fadetime->value;
}
}
void brain_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
}
self->s.effects = 0;
void brain_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
self->s.effects = 0;
self->monsterinfo.power_armor_type = POWER_ARMOR_NONE;
// check for gib
// check for gib
if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB))
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
for (n= 0; n < 4; n++)
ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
self->deadflag = DEAD_DEAD;
return;
}
if (self->deadflag == DEAD_DEAD)
return;
// regular death
gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
if (random() <= 0.5)
self->monsterinfo.currentmove = &brain_move_death1;
else
self->monsterinfo.currentmove = &brain_move_death2;
}
/*QUAKED monster_brain (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
*/
void SP_monster_brain (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
for (n= 0; n < 4; n++)
ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
ThrowHead (self, "models/objects/gibs/head2/tris.md2", damage, GIB_ORGANIC);
self->deadflag = DEAD_DEAD;
return;
}
if (self->deadflag == DEAD_DEAD)
return;
// regular death
gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
if (random() <= 0.5)
self->monsterinfo.currentmove = &brain_move_death1;
else
self->monsterinfo.currentmove = &brain_move_death2;
}
/*QUAKED monster_brain (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
*/
void SP_monster_brain (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
self->class_id = ENTITY_MONSTER_BRAIN;
sound_chest_open = gi.soundindex ("brain/brnatck1.wav");
sound_tentacles_extend = gi.soundindex ("brain/brnatck2.wav");
sound_tentacles_retract = gi.soundindex ("brain/brnatck3.wav");
@ -630,38 +630,38 @@ void SP_monster_brain (edict_t *self)
sound_melee1 = gi.soundindex ("brain/melee1.wav");
sound_melee2 = gi.soundindex ("brain/melee2.wav");
sound_melee3 = gi.soundindex ("brain/melee3.wav");
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
// Lazarus: special purpose skins
if ( self->style )
{
PatchMonsterModel("models/monsters/brain/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/brain/tris.md2");
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, 32);
VectorSet (self->mins, -16, -16, -24);
VectorSet (self->maxs, 16, 16, 32);
// Lazarus: mapper-configurable health
if(!self->health)
self->health = 300;
if(!self->gib_health)
self->gib_health = -150;
if(!self->mass)
self->mass = 400;
self->pain = brain_pain;
self->die = brain_die;
self->monsterinfo.stand = brain_stand;
self->monsterinfo.walk = brain_walk;
self->monsterinfo.run = brain_run;
self->monsterinfo.dodge = brain_dodge;
// self->monsterinfo.attack = brain_attack;
self->monsterinfo.melee = brain_melee;
if(!self->mass)
self->mass = 400;
self->pain = brain_pain;
self->die = brain_die;
self->monsterinfo.stand = brain_stand;
self->monsterinfo.walk = brain_walk;
self->monsterinfo.run = brain_run;
self->monsterinfo.dodge = brain_dodge;
// self->monsterinfo.attack = brain_attack;
self->monsterinfo.melee = brain_melee;
self->monsterinfo.sight = brain_sight;
self->monsterinfo.search = brain_search;
self->monsterinfo.idle = brain_idle;
@ -671,11 +671,11 @@ void SP_monster_brain (edict_t *self)
if(!self->monsterinfo.flies)
self->monsterinfo.flies = 0.10;
self->common_name = "Brains";
self->common_name = "Brains";
gi.linkentity (self);
self->monsterinfo.currentmove = &brain_move_stand;
gi.linkentity (self);
self->monsterinfo.currentmove = &brain_move_stand;
if(self->health < 0)
{
mmove_t *deathmoves[] = {&brain_move_death1,
@ -683,7 +683,7 @@ void SP_monster_brain (edict_t *self)
NULL};
M_SetDeath(self,(mmove_t **)&deathmoves);
}
self->monsterinfo.scale = MODEL_SCALE;
walkmonster_start (self);
}
self->monsterinfo.scale = MODEL_SCALE;
walkmonster_start (self);
}

View File

@ -252,7 +252,7 @@ void chick_pain (edict_t *self, edict_t *other, float kick, int damage)
float r;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -731,7 +731,7 @@ void SP_monster_chick (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/bitch/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/bitch/tris.md2");

View File

@ -1,242 +1,242 @@
/*
==============================================================================
FLIPPER
==============================================================================
*/
#include "g_local.h"
#include "m_flipper.h"
static int sound_chomp;
static int sound_attack;
static int sound_pain1;
static int sound_pain2;
static int sound_death;
static int sound_idle;
static int sound_search;
static int sound_sight;
void flipper_stand (edict_t *self);
mframe_t flipper_frames_stand [] =
{
ai_stand, 0, NULL
};
mmove_t flipper_move_stand = {FRAME_flphor01, FRAME_flphor01, flipper_frames_stand, NULL};
void flipper_stand (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_stand;
}
/*
==============================================================================
FLIPPER
==============================================================================
*/
#include "g_local.h"
#include "m_flipper.h"
static int sound_chomp;
static int sound_attack;
static int sound_pain1;
static int sound_pain2;
static int sound_death;
static int sound_idle;
static int sound_search;
static int sound_sight;
void flipper_stand (edict_t *self);
mframe_t flipper_frames_stand [] =
{
ai_stand, 0, NULL
};
mmove_t flipper_move_stand = {FRAME_flphor01, FRAME_flphor01, flipper_frames_stand, NULL};
void flipper_stand (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_stand;
}
#define FLIPPER_RUN_SPEED 24
mframe_t flipper_frames_run [] =
{
ai_run, FLIPPER_RUN_SPEED, NULL, // 6
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL, // 10
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL, // 20
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL // 29
};
mmove_t flipper_move_run_loop = {FRAME_flpver06, FRAME_flpver29, flipper_frames_run, NULL};
void flipper_run_loop (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_run_loop;
}
mframe_t flipper_frames_run_start [] =
{
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL
};
mmove_t flipper_move_run_start = {FRAME_flpver01, FRAME_flpver06, flipper_frames_run_start, flipper_run_loop};
void flipper_run (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_run_start;
}
/* Standard Swimming */
mframe_t flipper_frames_walk [] =
{
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL
};
mmove_t flipper_move_walk = {FRAME_flphor01, FRAME_flphor24, flipper_frames_walk, NULL};
void flipper_walk (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_walk;
}
mframe_t flipper_frames_start_run [] =
{
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, flipper_run
};
mmove_t flipper_move_start_run = {FRAME_flphor01, FRAME_flphor05, flipper_frames_start_run, NULL};
void flipper_start_run (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_start_run;
}
mframe_t flipper_frames_pain2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t flipper_move_pain2 = {FRAME_flppn101, FRAME_flppn105, flipper_frames_pain2, flipper_run};
mframe_t flipper_frames_pain1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t flipper_move_pain1 = {FRAME_flppn201, FRAME_flppn205, flipper_frames_pain1, flipper_run};
void flipper_bite (edict_t *self)
{
mframe_t flipper_frames_run [] =
{
ai_run, FLIPPER_RUN_SPEED, NULL, // 6
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL, // 10
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL, // 20
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL,
ai_run, FLIPPER_RUN_SPEED, NULL // 29
};
mmove_t flipper_move_run_loop = {FRAME_flpver06, FRAME_flpver29, flipper_frames_run, NULL};
void flipper_run_loop (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_run_loop;
}
mframe_t flipper_frames_run_start [] =
{
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL
};
mmove_t flipper_move_run_start = {FRAME_flpver01, FRAME_flpver06, flipper_frames_run_start, flipper_run_loop};
void flipper_run (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_run_start;
}
/* Standard Swimming */
mframe_t flipper_frames_walk [] =
{
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL,
ai_walk, 4, NULL
};
mmove_t flipper_move_walk = {FRAME_flphor01, FRAME_flphor24, flipper_frames_walk, NULL};
void flipper_walk (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_walk;
}
mframe_t flipper_frames_start_run [] =
{
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, NULL,
ai_run, 8, flipper_run
};
mmove_t flipper_move_start_run = {FRAME_flphor01, FRAME_flphor05, flipper_frames_start_run, NULL};
void flipper_start_run (edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_start_run;
}
mframe_t flipper_frames_pain2 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t flipper_move_pain2 = {FRAME_flppn101, FRAME_flppn105, flipper_frames_pain2, flipper_run};
mframe_t flipper_frames_pain1 [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t flipper_move_pain1 = {FRAME_flppn201, FRAME_flppn205, flipper_frames_pain1, flipper_run};
void flipper_bite (edict_t *self)
{
vec3_t aim;
VectorSet (aim, MELEE_DISTANCE, 0, 0);
fire_hit (self, aim, 5, 0);
}
void flipper_preattack (edict_t *self)
{
gi.sound (self, CHAN_WEAPON, sound_chomp, 1, ATTN_NORM, 0);
}
mframe_t flipper_frames_attack [] =
{
ai_charge, 0, flipper_preattack,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
}
void flipper_preattack (edict_t *self)
{
gi.sound (self, CHAN_WEAPON, sound_chomp, 1, ATTN_NORM, 0);
}
mframe_t flipper_frames_attack [] =
{
ai_charge, 0, flipper_preattack,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, flipper_bite,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, flipper_bite,
ai_charge, 0, NULL
};
mmove_t flipper_move_attack = {FRAME_flpbit01, FRAME_flpbit20, flipper_frames_attack, flipper_run};
void flipper_melee(edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_attack;
}
void flipper_pain (edict_t *self, edict_t *other, float kick, int damage)
{
int n;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
if (level.time < self->pain_debounce_time)
return;
self->pain_debounce_time = level.time + 3;
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, flipper_bite,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, NULL,
ai_charge, 0, flipper_bite,
ai_charge, 0, NULL
};
mmove_t flipper_move_attack = {FRAME_flpbit01, FRAME_flpbit20, flipper_frames_attack, flipper_run};
void flipper_melee(edict_t *self)
{
self->monsterinfo.currentmove = &flipper_move_attack;
}
void flipper_pain (edict_t *self, edict_t *other, float kick, int damage)
{
int n;
if (self->health < (self->max_health / 2))
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
self->pain_debounce_time = level.time + 3;
if (skill->value == 3)
return; // no pain anims in nightmare
n = (rand() + 1) % 2;
if (n == 0)
{
gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &flipper_move_pain1;
}
else
{
gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &flipper_move_pain2;
}
}
void flipper_dead (edict_t *self)
{
// VectorSet (self->mins, -16, -16, -24);
n = (rand() + 1) % 2;
if (n == 0)
{
gi.sound (self, CHAN_VOICE, sound_pain1, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &flipper_move_pain1;
}
else
{
gi.sound (self, CHAN_VOICE, sound_pain2, 1, ATTN_NORM, 0);
self->monsterinfo.currentmove = &flipper_move_pain2;
}
}
void flipper_dead (edict_t *self)
{
// VectorSet (self->mins, -16, -16, -24);
// VectorSet (self->maxs, 16, 16, -8);
self->movetype = MOVETYPE_TOSS;
self->movetype = MOVETYPE_TOSS;
self->svflags |= SVF_DEADMONSTER;
self->nextthink = 0;
gi.linkentity (self);
self->nextthink = 0;
gi.linkentity (self);
M_FlyCheck (self);
// Lazarus monster fade
@ -245,161 +245,161 @@ void flipper_dead (edict_t *self)
self->think=FadeDieSink;
self->nextthink=level.time+corpse_fadetime->value;
}
}
mframe_t flipper_frames_death [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t flipper_move_death = {FRAME_flpdth01, FRAME_flpdth56, flipper_frames_death, flipper_dead};
void flipper_sight (edict_t *self, edict_t *other)
{
gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
}
void flipper_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
// check for gib
}
mframe_t flipper_frames_death [] =
{
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL,
ai_move, 0, NULL
};
mmove_t flipper_move_death = {FRAME_flpdth01, FRAME_flpdth56, flipper_frames_death, flipper_dead};
void flipper_sight (edict_t *self, edict_t *other)
{
gi.sound (self, CHAN_VOICE, sound_sight, 1, ATTN_NORM, 0);
}
void flipper_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damage, vec3_t point)
{
int n;
// check for gib
if (self->health <= self->gib_health && !(self->spawnflags & SF_MONSTER_NOGIB))
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
for (n= 0; n < 2; n++)
{
gi.sound (self, CHAN_VOICE, gi.soundindex ("misc/udeath.wav"), 1, ATTN_NORM, 0);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/bone/tris.md2", damage, GIB_ORGANIC);
for (n= 0; n < 2; n++)
ThrowGib (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
ThrowHead (self, "models/objects/gibs/sm_meat/tris.md2", damage, GIB_ORGANIC);
self->deadflag = DEAD_DEAD;
return;
}
if (self->deadflag == DEAD_DEAD)
return;
// regular death
gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
self->monsterinfo.currentmove = &flipper_move_death;
}
/*QUAKED monster_flipper (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
*/
void SP_monster_flipper (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
self->deadflag = DEAD_DEAD;
return;
}
if (self->deadflag == DEAD_DEAD)
return;
// regular death
gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
self->monsterinfo.currentmove = &flipper_move_death;
}
/*QUAKED monster_flipper (1 .5 0) (-16 -16 -24) (16 16 32) Ambush Trigger_Spawn Sight
*/
void SP_monster_flipper (edict_t *self)
{
if (deathmatch->value)
{
G_FreeEdict (self);
return;
}
self->class_id = ENTITY_MONSTER_FLIPPER;
self->spawnflags |= SF_MONSTER_KNOWS_MIRRORS;
sound_pain1 = gi.soundindex ("flipper/flppain1.wav");
sound_pain2 = gi.soundindex ("flipper/flppain2.wav");
sound_death = gi.soundindex ("flipper/flpdeth1.wav");
sound_chomp = gi.soundindex ("flipper/flpatck1.wav");
sound_attack = gi.soundindex ("flipper/flpatck2.wav");
sound_idle = gi.soundindex ("flipper/flpidle1.wav");
sound_search = gi.soundindex ("flipper/flpsrch1.wav");
sound_sight = gi.soundindex ("flipper/flpsght1.wav");
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
sound_pain1 = gi.soundindex ("flipper/flppain1.wav");
sound_pain2 = gi.soundindex ("flipper/flppain2.wav");
sound_death = gi.soundindex ("flipper/flpdeth1.wav");
sound_chomp = gi.soundindex ("flipper/flpatck1.wav");
sound_attack = gi.soundindex ("flipper/flpatck2.wav");
sound_idle = gi.soundindex ("flipper/flpidle1.wav");
sound_search = gi.soundindex ("flipper/flpsrch1.wav");
sound_sight = gi.soundindex ("flipper/flpsght1.wav");
self->movetype = MOVETYPE_STEP;
self->solid = SOLID_BBOX;
// Lazarus: special purpose skins
if ( self->style )
{
PatchMonsterModel("models/monsters/flipper/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/flipper/tris.md2");
VectorSet (self->mins, -16, -16, 0);
VectorSet (self->maxs, 16, 16, 32);
self->s.modelindex = gi.modelindex ("models/monsters/flipper/tris.md2");
VectorSet (self->mins, -16, -16, 0);
VectorSet (self->maxs, 16, 16, 32);
// Lazarus: mapper-configurable health
if(!self->health)
self->health = 50;
if(!self->gib_health)
self->gib_health = -30;
if(!self->mass)
self->mass = 100;
self->pain = flipper_pain;
self->die = flipper_die;
self->monsterinfo.stand = flipper_stand;
self->monsterinfo.walk = flipper_walk;
self->monsterinfo.run = flipper_start_run;
self->monsterinfo.melee = flipper_melee;
self->monsterinfo.sight = flipper_sight;
gi.linkentity (self);
self->monsterinfo.currentmove = &flipper_move_stand;
if(!self->mass)
self->mass = 100;
self->pain = flipper_pain;
self->die = flipper_die;
self->monsterinfo.stand = flipper_stand;
self->monsterinfo.walk = flipper_walk;
self->monsterinfo.run = flipper_start_run;
self->monsterinfo.melee = flipper_melee;
self->monsterinfo.sight = flipper_sight;
gi.linkentity (self);
self->monsterinfo.currentmove = &flipper_move_stand;
if(!self->monsterinfo.flies)
self->monsterinfo.flies = 0.90;
if(self->health < 0)
@ -410,7 +410,7 @@ void SP_monster_flipper (edict_t *self)
}
self->common_name = "Barracuda Shark";
self->monsterinfo.scale = MODEL_SCALE;
swimmonster_start (self);
}
self->monsterinfo.scale = MODEL_SCALE;
swimmonster_start (self);
}

View File

@ -558,7 +558,7 @@ void floater_pain (edict_t *self, edict_t *other, float kick, int damage)
int n;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -626,7 +626,7 @@ void SP_monster_floater (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/float/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/float/tris.md2");

View File

@ -522,7 +522,7 @@ void flyer_pain (edict_t *self, edict_t *other, float kick, int damage)
int n;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -589,7 +589,7 @@ void SP_monster_flyer (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/flyer/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/flyer/tris.md2");

View File

@ -234,7 +234,7 @@ void gladiator_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
{
@ -379,7 +379,7 @@ void SP_monster_gladiator (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/gladiatr/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/gladiatr/tris.md2");

View File

@ -273,7 +273,7 @@ mmove_t gunner_move_pain1 = {FRAME_pain101, FRAME_pain118, gunner_frames_pain1,
void gunner_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -759,7 +759,7 @@ void SP_monster_gunner (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/gunner/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/gunner/tris.md2");

View File

@ -476,7 +476,7 @@ void hover_attack(edict_t *self)
void hover_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -587,7 +587,7 @@ void SP_monster_hover (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/hover/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex("models/monsters/hover/tris.md2");

View File

@ -199,7 +199,7 @@ void infantry_pain (edict_t *self, edict_t *other, float kick, int damage)
int n;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -606,7 +606,7 @@ void SP_monster_infantry (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/infantry/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex("models/monsters/infantry/tris.md2");

File diff suppressed because it is too large Load Diff

View File

@ -595,7 +595,7 @@ mmove_t medic_move_pain2 = {FRAME_painb1, FRAME_painb15, medic_frames_pain2, med
void medic_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -1209,7 +1209,7 @@ void SP_monster_medic (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/medic/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/medic/tris.md2");

View File

@ -497,7 +497,7 @@ void mutant_pain (edict_t *self, edict_t *other, float kick, int damage)
float r;
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -605,7 +605,7 @@ void mutant_die (edict_t *self, edict_t *inflictor, edict_t *attacker, int damag
gi.sound (self, CHAN_VOICE, sound_death, 1, ATTN_NORM, 0);
self->deadflag = DEAD_DEAD;
self->takedamage = DAMAGE_YES;
self->s.skinnum = 1;
self->s.skin = 1;
if (random() < 0.5)
self->monsterinfo.currentmove = &mutant_move_death1;
@ -667,7 +667,7 @@ void SP_monster_mutant (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/mutant/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/mutant/tris.md2");

View File

@ -256,7 +256,7 @@ mmove_t parasite_move_pain1 = {FRAME_pain101, FRAME_pain111, parasite_frames_pai
void parasite_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -544,7 +544,7 @@ void SP_monster_parasite (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/parasite/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/parasite/tris.md2");

File diff suppressed because it is too large Load Diff

View File

@ -434,7 +434,7 @@ void supertank_pain (edict_t *self, edict_t *other, float kick, int damage)
{
if (self->health < (self->max_health / 2))
self->s.skinnum |= 1;
self->s.skin |= 1;
if (level.time < self->pain_debounce_time)
return;
@ -691,7 +691,7 @@ void SP_monster_supertank (edict_t *self)
if ( (self->spawnflags & SF_MONSTER_SPECIAL) && self->style )
{
PatchMonsterModel("models/monsters/boss1/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
sound_pain1 = gi.soundindex ("bosstank/btkpain1.wav");
@ -711,7 +711,7 @@ void SP_monster_supertank (edict_t *self)
if ( self->style )
{
PatchMonsterModel("models/monsters/boss1/tris.md2");
self->s.skinnum = self->style * 2;
self->s.skin = self->style * 2;
}
self->s.modelindex = gi.modelindex ("models/monsters/boss1/tris.md2");

File diff suppressed because it is too large Load Diff

View File

@ -1452,7 +1452,7 @@ void PutClientInServer (edict_t *ent)
// sknum is player num and weapon number
// weapon number will be added in changeweapon
ent->s.skinnum = ent - g_edicts - 1;
ent->s.skin = ent - g_edicts - 1;
ent->s.frame = 0;
VectorCopy (spawn_origin, ent->s.origin);
@ -1518,7 +1518,7 @@ void PutClientInServer (edict_t *ent)
client->newweapon = NULL;
client->machinegun_shots = 0;
i = ((client->pers.weapon->weapmodel & 0xff) << 8);
ent->s.skinnum = (ent - g_edicts - 1) | i;
ent->s.skin = (ent - g_edicts - 1) | i;
if (client->pers.weapon->ammo)
client->ammo_index = ITEM_INDEX(FindItem(client->pers.weapon->ammo));
else

View File

@ -460,7 +460,6 @@ void SV_CalcBlend (edict_t *ent)
}
// add for powerups
#ifdef JETPACK_MOD
if ( ent->client->jetpack )
{

View File

@ -200,7 +200,7 @@ void ChangeWeapon (edict_t *ent)
i = ((ent->client->pers.weapon->weapmodel & 0xff) << 8);
else
i = 0;
ent->s.skinnum = (ent - g_edicts - 1) | i;
ent->s.skin = (ent - g_edicts - 1) | i;
}
if (ent->client->pers.weapon && ent->client->pers.weapon->ammo)

246
server/server.plg Normal file
View File

@ -0,0 +1,246 @@
<html>
<body>
<pre>
<h1>Build Log</h1>
<h3>
--------------------Configuration: server - Win32 Release--------------------
</h3>
<h3>Command Lines</h3>
Creating temporary file "C:\Temp\RSP5FE.tmp" with contents
[
/nologo /ML /W3 /GX /O2 /I ".\\" /I ".\monsters" /I ".\ents" /I ".\global" /I "../public" /I "../public/libs" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /Fo"..\temp\server\!release/" /Fd"..\temp\server\!release/" /FD /c
"D:\XASH3D\src_main\!source\server\global\g_ai.c"
"D:\XASH3D\src_main\!source\server\ents\g_camera.c"
"D:\XASH3D\src_main\!source\server\global\g_chase.c"
"D:\XASH3D\src_main\!source\server\global\g_cmds.c"
"D:\XASH3D\src_main\!source\server\global\g_combat.c"
"D:\XASH3D\src_main\!source\server\ents\g_crane.c"
"D:\XASH3D\src_main\!source\server\ents\g_fog.c"
"D:\XASH3D\src_main\!source\server\ents\g_func.c"
"D:\XASH3D\src_main\!source\server\ents\g_items.c"
"D:\XASH3D\src_main\!source\server\global\g_jetpack.c"
"D:\XASH3D\src_main\!source\server\ents\g_lights.c"
"D:\XASH3D\src_main\!source\server\ents\g_lock.c"
"D:\XASH3D\src_main\!source\server\global\g_main.c"
"D:\XASH3D\src_main\!source\server\ents\g_misc.c"
"D:\XASH3D\src_main\!source\server\ents\g_model.c"
"D:\XASH3D\src_main\!source\server\monsters\g_monster.c"
"D:\XASH3D\src_main\!source\server\ents\g_mtrain.c"
"D:\XASH3D\src_main\!source\server\global\g_newai.c"
"D:\XASH3D\src_main\!source\server\ents\g_pendulum.c"
"D:\XASH3D\src_main\!source\server\global\g_phys.c"
"D:\XASH3D\src_main\!source\server\ents\g_reflect.c"
"D:\XASH3D\src_main\!source\server\global\g_save.c"
"D:\XASH3D\src_main\!source\server\global\g_sound.c"
"D:\XASH3D\src_main\!source\server\global\g_spawn.c"
"D:\XASH3D\src_main\!source\server\global\g_svcmds.c"
"D:\XASH3D\src_main\!source\server\ents\g_target.c"
"D:\XASH3D\src_main\!source\server\ents\g_thing.c"
"D:\XASH3D\src_main\!source\server\ents\g_tracktrain.c"
"D:\XASH3D\src_main\!source\server\ents\g_trigger.c"
"D:\XASH3D\src_main\!source\server\ents\g_turret.c"
"D:\XASH3D\src_main\!source\server\global\g_utils.c"
"D:\XASH3D\src_main\!source\server\ents\g_vehicle.c"
"D:\XASH3D\src_main\!source\server\ents\g_weapon.c"
"D:\XASH3D\src_main\!source\server\ents\g_wes.c"
"D:\XASH3D\src_main\!source\server\monsters\m_actor.c"
"D:\XASH3D\src_main\!source\server\monsters\m_actor_weap.c"
"D:\XASH3D\src_main\!source\server\monsters\m_berserk.c"
"D:\XASH3D\src_main\!source\server\monsters\m_boss2.c"
"D:\XASH3D\src_main\!source\server\monsters\m_boss3.c"
"D:\XASH3D\src_main\!source\server\monsters\m_boss31.c"
"D:\XASH3D\src_main\!source\server\monsters\m_boss32.c"
"D:\XASH3D\src_main\!source\server\monsters\m_brain.c"
"D:\XASH3D\src_main\!source\server\monsters\m_chick.c"
"D:\XASH3D\src_main\!source\server\m_flash.c"
"D:\XASH3D\src_main\!source\server\monsters\m_flipper.c"
"D:\XASH3D\src_main\!source\server\monsters\m_float.c"
"D:\XASH3D\src_main\!source\server\monsters\m_flyer.c"
"D:\XASH3D\src_main\!source\server\monsters\m_gladiator.c"
"D:\XASH3D\src_main\!source\server\monsters\m_gunner.c"
"D:\XASH3D\src_main\!source\server\monsters\m_hover.c"
"D:\XASH3D\src_main\!source\server\monsters\m_infantry.c"
"D:\XASH3D\src_main\!source\server\monsters\m_insane.c"
"D:\XASH3D\src_main\!source\server\monsters\m_medic.c"
"D:\XASH3D\src_main\!source\server\monsters\m_move.c"
"D:\XASH3D\src_main\!source\server\monsters\m_mutant.c"
"D:\XASH3D\src_main\!source\server\monsters\m_parasite.c"
"D:\XASH3D\src_main\!source\server\monsters\m_soldier.c"
"D:\XASH3D\src_main\!source\server\monsters\m_supertank.c"
"D:\XASH3D\src_main\!source\server\monsters\m_tank.c"
"D:\XASH3D\src_main\!source\server\p_chase.c"
"D:\XASH3D\src_main\!source\server\p_client.c"
"D:\XASH3D\src_main\!source\server\p_hud.c"
"D:\XASH3D\src_main\!source\server\p_menu.c"
"D:\XASH3D\src_main\!source\server\p_text.c"
"D:\XASH3D\src_main\!source\server\p_trail.c"
"D:\XASH3D\src_main\!source\server\p_view.c"
"D:\XASH3D\src_main\!source\server\p_weapon.c"
]
Creating command line "cl.exe @C:\Temp\RSP5FE.tmp"
Creating temporary file "C:\Temp\RSP5FF.tmp" with contents
[
kernel32.lib user32.lib winmm.lib /nologo /subsystem:windows /dll /pdb:none /machine:I386 /out:"..\temp\render\!release/server.dll" /implib:"..\temp\server\!release/server.lib"
"\XASH3D\src_main\!source\temp\server\!release\g_ai.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_camera.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_chase.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_cmds.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_combat.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_crane.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_fog.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_func.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_items.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_jetpack.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_lights.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_lock.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_main.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_misc.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_model.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_monster.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_mtrain.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_newai.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_pendulum.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_phys.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_reflect.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_save.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_sound.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_spawn.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_svcmds.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_target.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_thing.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_tracktrain.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_trigger.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_turret.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_utils.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_vehicle.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_weapon.obj"
"\XASH3D\src_main\!source\temp\server\!release\g_wes.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_actor.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_actor_weap.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_berserk.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_boss2.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_boss3.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_boss31.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_boss32.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_brain.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_chick.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_flash.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_flipper.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_float.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_flyer.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_gladiator.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_gunner.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_hover.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_infantry.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_insane.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_medic.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_move.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_mutant.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_parasite.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_soldier.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_supertank.obj"
"\XASH3D\src_main\!source\temp\server\!release\m_tank.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_chase.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_client.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_hud.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_menu.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_text.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_trail.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_view.obj"
"\XASH3D\src_main\!source\temp\server\!release\p_weapon.obj"
]
Creating command line "link.exe @C:\Temp\RSP5FF.tmp"
Creating temporary file "C:\Temp\RSP600.bat" with contents
[
@echo off
copy \XASH3D\src_main\!source\temp\render\!release\server.dll "D:\Xash3D\xash\bin\server.dll"
]
Creating command line "C:\Temp\RSP600.bat"
Compiling...
g_ai.c
g_camera.c
g_chase.c
g_cmds.c
g_combat.c
g_crane.c
g_fog.c
g_func.c
g_items.c
g_jetpack.c
g_lights.c
g_lock.c
g_main.c
g_misc.c
g_model.c
g_monster.c
g_mtrain.c
g_newai.c
g_pendulum.c
g_phys.c
Generating Code...
Compiling...
g_reflect.c
g_save.c
g_sound.c
g_spawn.c
g_svcmds.c
g_target.c
g_thing.c
g_tracktrain.c
g_trigger.c
g_turret.c
g_utils.c
g_vehicle.c
g_weapon.c
g_wes.c
m_actor.c
m_actor_weap.c
m_berserk.c
m_boss2.c
m_boss3.c
m_boss31.c
Generating Code...
Compiling...
m_boss32.c
m_brain.c
m_chick.c
m_flash.c
m_flipper.c
m_float.c
m_flyer.c
m_gladiator.c
m_gunner.c
m_hover.c
m_infantry.c
m_insane.c
m_medic.c
m_move.c
m_mutant.c
m_parasite.c
m_soldier.c
m_supertank.c
m_tank.c
p_chase.c
Generating Code...
Compiling...
p_client.c
p_hud.c
p_menu.c
p_text.c
p_trail.c
p_view.c
p_weapon.c
Generating Code...
Linking...
Creating library ..\temp\server\!release/server.lib and object ..\temp\server\!release/server.exp
<h3>Output Window</h3>
Performing Custom Build Step on \XASH3D\src_main\!source\temp\render\!release\server.dll
‘ª®¯¨à®¢ ­® ä ©«®¢: 1.
<h3>Results</h3>
server.dll - 0 error(s), 0 warning(s)
</pre>
</body>
</html>