Replacement models and items

This commit is contained in:
Richard Allen 2003-02-01 02:15:31 +00:00
parent 3353d82c74
commit 22020cba04
7 changed files with 315 additions and 214 deletions

View file

@ -1,5 +1,7 @@
# List fixes here for the 2.3 release # List fixes here for the 2.3 release
* Added replacement model functionality for weapons and items
* Added replacement skin functionality for weapons and items
* Fixed the HC's power. * Fixed the HC's power.
* Items from the weapon/item menus are now disabled if they're banned from the server * Items from the weapon/item menus are now disabled if they're banned from the server
* Added Itembanning * Added Itembanning

View file

@ -193,7 +193,7 @@ makedirs:
@if [ ! -d $(BQ)/$(UIDIRNAME) ];then mkdir $(BQ)/$(UIDIRNAME);fi @if [ ! -d $(BQ)/$(UIDIRNAME) ];then mkdir $(BQ)/$(UIDIRNAME);fi
ctags: ctags:
ctags -f tags -R * # ctags -f tags -R *
# --object lists for each build type-- # --object lists for each build type--
GQVMOBJ = $(GOBJ:%.o=$(BQ)/%.asm) GQVMOBJ = $(GOBJ:%.o=$(BQ)/%.asm)

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.35 2003/02/01 02:15:31 jbravo
// Replacement models and items
//
// Revision 1.34 2003/01/08 04:46:25 jbravo // Revision 1.34 2003/01/08 04:46:25 jbravo
// Wrote a new hackish model replacement system // Wrote a new hackish model replacement system
// //
@ -339,6 +342,7 @@ static void CG_Item(centity_t * cent)
int msec; int msec;
float frac, scale; float frac, scale;
weaponInfo_t *wi; weaponInfo_t *wi;
itemInfo_t *itemInfo;
es = &cent->currentState; es = &cent->currentState;
if (es->modelindex >= bg_numItems) { if (es->modelindex >= bg_numItems) {
@ -452,6 +456,18 @@ static void CG_Item(centity_t * cent)
VectorCopy(myvec, ent.axis[2]); VectorCopy(myvec, ent.axis[2]);
} }
} }
// JBravo: world skins
if (item->giType == IT_WEAPON) {
wi = &cg_weapons[item->giTag];
if (wi->customSkin)
ent.customSkin = wi->customSkin;
}
if (item->giType == IT_HOLDABLE) {
itemInfo = &cg_items[item - bg_itemlist];
if (itemInfo->customSkin)
ent.customSkin = itemInfo->customSkin;
}
//Elder: ammo offset? //Elder: ammo offset?
if (item->giType == IT_AMMO) if (item->giType == IT_AMMO)
cent->lerpOrigin[2] -= 12; cent->lerpOrigin[2] -= 12;
@ -550,8 +566,6 @@ static void CG_Missile(centity_t * cent)
entityState_t *s1; entityState_t *s1;
const weaponInfo_t *weapon; const weaponInfo_t *weapon;
// int col;
s1 = &cent->currentState; s1 = &cent->currentState;
if (s1->weapon > WP_NUM_WEAPONS) { if (s1->weapon > WP_NUM_WEAPONS) {
s1->weapon = 0; s1->weapon = 0;
@ -565,23 +579,6 @@ static void CG_Missile(centity_t * cent)
if (weapon->missileTrailFunc) { if (weapon->missileTrailFunc) {
weapon->missileTrailFunc(cent, weapon); weapon->missileTrailFunc(cent, weapon);
} }
/*
if ( cent->currentState.modelindex == TEAM_RED ) {
col = 1;
}
else if ( cent->currentState.modelindex == TEAM_BLUE ) {
col = 2;
}
else {
col = 0;
}
// add dynamic light
if ( weapon->missileDlight ) {
trap_R_AddLightToScene(cent->lerpOrigin, weapon->missileDlight,
weapon->missileDlightColor[col][0], weapon->missileDlightColor[col][1], weapon->missileDlightColor[col][2] );
}
*/
// add dynamic light // add dynamic light
if (weapon->missileDlight) { if (weapon->missileDlight) {
trap_R_AddLightToScene(cent->lerpOrigin, weapon->missileDlight, trap_R_AddLightToScene(cent->lerpOrigin, weapon->missileDlight,
@ -600,16 +597,6 @@ static void CG_Missile(centity_t * cent)
memset(&ent, 0, sizeof(ent)); memset(&ent, 0, sizeof(ent));
VectorCopy(cent->lerpOrigin, ent.origin); VectorCopy(cent->lerpOrigin, ent.origin);
VectorCopy(cent->lerpOrigin, ent.oldorigin); VectorCopy(cent->lerpOrigin, ent.oldorigin);
//Blaze: No Plasma Gun
/* if ( cent->currentState.weapon == WP_PLASMAGUN ) {
ent.reType = RT_SPRITE;
ent.radius = 16;
ent.rotation = 0;
ent.customShader = cgs.media.plasmaBallShader;
trap_R_AddRefEntityToScene( &ent );
return;
}
*/
// flicker between two skins // flicker between two skins
ent.skinNum = cg.clientFrame & 1; ent.skinNum = cg.clientFrame & 1;

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.133 2003/02/01 02:15:31 jbravo
// Replacement models and items
//
// Revision 1.132 2002/12/05 23:11:29 blaze // Revision 1.132 2002/12/05 23:11:29 blaze
// Added item replacement code // Added item replacement code
// //
@ -743,6 +746,7 @@ typedef struct weaponInfo_s {
qhandle_t weaponModel; // Third-person/world model qhandle_t weaponModel; // Third-person/world model
qhandle_t barrelModel; qhandle_t barrelModel;
qhandle_t flashModel; qhandle_t flashModel;
qhandle_t customSkin; // JBravo: for custom skins
qhandle_t firstModel; //Elder: view model qhandle_t firstModel; //Elder: view model
qhandle_t animHandModel; //Blaze: for animations qhandle_t animHandModel; //Blaze: for animations
@ -789,6 +793,8 @@ typedef struct {
qboolean registered; qboolean registered;
qhandle_t models[MAX_ITEM_MODELS]; qhandle_t models[MAX_ITEM_MODELS];
qhandle_t icon; qhandle_t icon;
// JBravo: for customskins
qhandle_t customSkin;
} itemInfo_t; } itemInfo_t;
typedef struct { typedef struct {
@ -1697,6 +1703,16 @@ extern vmCvar_t cg_RQ3_handcannon;
extern vmCvar_t cg_RQ3_m3; extern vmCvar_t cg_RQ3_m3;
extern vmCvar_t cg_RQ3_akimbo; extern vmCvar_t cg_RQ3_akimbo;
extern vmCvar_t cg_RQ3_grenade; extern vmCvar_t cg_RQ3_grenade;
// JBravo: replacement skins
extern vmCvar_t cg_RQ3_knife_skin;
extern vmCvar_t cg_RQ3_mk23_skin;
extern vmCvar_t cg_RQ3_m4_skin;
extern vmCvar_t cg_RQ3_ssg3000_skin;
extern vmCvar_t cg_RQ3_mp5_skin;
extern vmCvar_t cg_RQ3_handcannon_skin;
extern vmCvar_t cg_RQ3_m3_skin;
extern vmCvar_t cg_RQ3_akimbo_skin;
extern vmCvar_t cg_RQ3_grenade_skin;
//Blaze: replacement items //Blaze: replacement items
extern vmCvar_t cg_RQ3_bandolier; extern vmCvar_t cg_RQ3_bandolier;
extern vmCvar_t cg_RQ3_kevlar; extern vmCvar_t cg_RQ3_kevlar;
@ -1704,6 +1720,13 @@ extern vmCvar_t cg_RQ3_silencer;
extern vmCvar_t cg_RQ3_laser; extern vmCvar_t cg_RQ3_laser;
extern vmCvar_t cg_RQ3_slippers; extern vmCvar_t cg_RQ3_slippers;
extern vmCvar_t cg_RQ3_helmet; extern vmCvar_t cg_RQ3_helmet;
// JBravo: replacement skins
extern vmCvar_t cg_RQ3_bandolier_skin;
extern vmCvar_t cg_RQ3_kevlar_skin;
extern vmCvar_t cg_RQ3_silencer_skin;
extern vmCvar_t cg_RQ3_laser_skin;
extern vmCvar_t cg_RQ3_slippers_skin;
extern vmCvar_t cg_RQ3_helmet_skin;
//Blaze: Reaction weapon positions //Blaze: Reaction weapon positions

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.118 2003/02/01 02:15:31 jbravo
// Replacement models and items
//
// Revision 1.117 2003/01/08 04:46:26 jbravo // Revision 1.117 2003/01/08 04:46:26 jbravo
// Wrote a new hackish model replacement system // Wrote a new hackish model replacement system
// //
@ -414,7 +417,16 @@ vmCvar_t cg_RQ3_handcannon;
vmCvar_t cg_RQ3_m3; vmCvar_t cg_RQ3_m3;
vmCvar_t cg_RQ3_akimbo; vmCvar_t cg_RQ3_akimbo;
vmCvar_t cg_RQ3_grenade; vmCvar_t cg_RQ3_grenade;
// JBravo: replacement skin cvars
vmCvar_t cg_RQ3_knife_skin;
vmCvar_t cg_RQ3_mk23_skin;
vmCvar_t cg_RQ3_m4_skin;
vmCvar_t cg_RQ3_ssg3000_skin;
vmCvar_t cg_RQ3_mp5_skin;
vmCvar_t cg_RQ3_handcannon_skin;
vmCvar_t cg_RQ3_m3_skin;
vmCvar_t cg_RQ3_akimbo_skin;
vmCvar_t cg_RQ3_grenade_skin;
//Blaze: replacement items //Blaze: replacement items
vmCvar_t cg_RQ3_bandolier; vmCvar_t cg_RQ3_bandolier;
vmCvar_t cg_RQ3_kevlar; vmCvar_t cg_RQ3_kevlar;
@ -422,6 +434,13 @@ vmCvar_t cg_RQ3_silencer;
vmCvar_t cg_RQ3_laser; vmCvar_t cg_RQ3_laser;
vmCvar_t cg_RQ3_slippers; vmCvar_t cg_RQ3_slippers;
vmCvar_t cg_RQ3_helmet; vmCvar_t cg_RQ3_helmet;
// JBravo: replacement skin cvars
vmCvar_t cg_RQ3_bandolier_skin;
vmCvar_t cg_RQ3_kevlar_skin;
vmCvar_t cg_RQ3_silencer_skin;
vmCvar_t cg_RQ3_laser_skin;
vmCvar_t cg_RQ3_slippers_skin;
vmCvar_t cg_RQ3_helmet_skin;
//Elder: muzzle flash toggle //Elder: muzzle flash toggle
@ -660,6 +679,16 @@ static cvarTable_t cvarTable[] = { // bk001129
{&cg_RQ3_m3, "cg_RQ3_m3", "m3", CVAR_ARCHIVE}, {&cg_RQ3_m3, "cg_RQ3_m3", "m3", CVAR_ARCHIVE},
{&cg_RQ3_akimbo, "cg_RQ3_akimbo", "akimbo", CVAR_ARCHIVE}, {&cg_RQ3_akimbo, "cg_RQ3_akimbo", "akimbo", CVAR_ARCHIVE},
{&cg_RQ3_grenade, "cg_RQ3_grenade", "grenade", CVAR_ARCHIVE}, {&cg_RQ3_grenade, "cg_RQ3_grenade", "grenade", CVAR_ARCHIVE},
// JBravo: replacement skins
{&cg_RQ3_knife_skin, "cg_RQ3_knife_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_mk23_skin, "cg_RQ3_mk23_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_m4_skin, "cg_RQ3_m4_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_ssg3000_skin, "cg_RQ3_ssg3000_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_mp5_skin, "cg_RQ3_mp5_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_handcannon_skin, "cg_RQ3_handcannon_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_m3_skin, "cg_RQ3_m3_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_akimbo_skin, "cg_RQ3_akimbo_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_grenade_skin, "cg_RQ3_grenade_skin", "default", CVAR_ARCHIVE},
//Blaze: replacement items //Blaze: replacement items
{&cg_RQ3_bandolier, "cg_RQ3_bandolier", "bandolier", CVAR_ARCHIVE}, {&cg_RQ3_bandolier, "cg_RQ3_bandolier", "bandolier", CVAR_ARCHIVE},
@ -668,6 +697,13 @@ static cvarTable_t cvarTable[] = { // bk001129
{&cg_RQ3_laser, "cg_RQ3_laser", "laser", CVAR_ARCHIVE}, {&cg_RQ3_laser, "cg_RQ3_laser", "laser", CVAR_ARCHIVE},
{&cg_RQ3_slippers, "cg_RQ3_slippers", "slippers", CVAR_ARCHIVE}, {&cg_RQ3_slippers, "cg_RQ3_slippers", "slippers", CVAR_ARCHIVE},
{&cg_RQ3_helmet, "cg_RQ3_helmet", "helmet", CVAR_ARCHIVE}, {&cg_RQ3_helmet, "cg_RQ3_helmet", "helmet", CVAR_ARCHIVE},
// JBravo: replacement skins
{&cg_RQ3_bandolier_skin, "cg_RQ3_bandolier_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_kevlar_skin, "cg_RQ3_kevlar_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_silencer_skin, "cg_RQ3_silencer_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_laser_skin, "cg_RQ3_laser_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_slippers_skin, "cg_RQ3_slippers_skin", "default", CVAR_ARCHIVE},
{&cg_RQ3_helmet_skin, "cg_RQ3_helmet_skin", "default", CVAR_ARCHIVE},
// the following variables are created in other parts of the system, // the following variables are created in other parts of the system,
// but we also reference them here // but we also reference them here
@ -2263,8 +2299,55 @@ void CG_ReplaceModels(void)
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon); strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
} }
} }
if (!strcmp(item->classname, "item_kevlar")) {
Com_sprintf(newname, MAX_QPATH, "models/items/%s.md3", cg_RQ3_kevlar.string);
Com_sprintf(newicon, MAX_QPATH, "icons/iconi_%s", cg_RQ3_kevlar.string);
if (JB_FileExists(newname) && (strlen(newname) < 59)) {
strcpy(bg_itemlist[item - bg_itemlist].world_model[0], newname);
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
}
}
if (!strcmp(item->classname, "item_silencer")) {
Com_sprintf(newname, MAX_QPATH, "models/items/%s.md3", cg_RQ3_silencer.string);
Com_sprintf(newicon, MAX_QPATH, "icons/iconi_%s", cg_RQ3_silencer.string);
if (JB_FileExists(newname) && (strlen(newname) < 59)) {
strcpy(bg_itemlist[item - bg_itemlist].world_model[0], newname);
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
}
}
if (!strcmp(item->classname, "item_laser")) {
Com_sprintf(newname, MAX_QPATH, "models/items/%s.md3", cg_RQ3_laser.string);
Com_sprintf(newicon, MAX_QPATH, "icons/iconi_%s", cg_RQ3_laser.string);
if (JB_FileExists(newname) && (strlen(newname) < 59)) {
strcpy(bg_itemlist[item - bg_itemlist].world_model[0], newname);
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
}
}
if (!strcmp(item->classname, "item_bandolier")) {
Com_sprintf(newname, MAX_QPATH, "models/items/%s.md3", cg_RQ3_bandolier.string);
Com_sprintf(newicon, MAX_QPATH, "icons/iconi_%s", cg_RQ3_bandolier.string);
if (JB_FileExists(newname) && (strlen(newname) < 59)) {
strcpy(bg_itemlist[item - bg_itemlist].world_model[0], newname);
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
}
}
if (!strcmp(item->classname, "item_slippers")) {
Com_sprintf(newname, MAX_QPATH, "models/items/%s.md3", cg_RQ3_slippers.string);
Com_sprintf(newicon, MAX_QPATH, "icons/iconi_%s", cg_RQ3_slippers.string);
if (JB_FileExists(newname) && (strlen(newname) < 59)) {
strcpy(bg_itemlist[item - bg_itemlist].world_model[0], newname);
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
}
}
if (!strcmp(item->classname, "item_helmet")) {
Com_sprintf(newname, MAX_QPATH, "models/items/%s.md3", cg_RQ3_helmet.string);
Com_sprintf(newicon, MAX_QPATH, "icons/iconi_%s", cg_RQ3_helmet.string);
if (JB_FileExists(newname) && (strlen(newname) < 59)) {
strcpy(bg_itemlist[item - bg_itemlist].world_model[0], newname);
strcpy(bg_itemlist[item - bg_itemlist].icon, newicon);
}
}
} }
} }
/* /*

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.103 2003/02/01 02:15:31 jbravo
// Replacement models and items
//
// Revision 1.102 2003/01/08 04:46:26 jbravo // Revision 1.102 2003/01/08 04:46:26 jbravo
// Wrote a new hackish model replacement system // Wrote a new hackish model replacement system
// //
@ -201,12 +204,8 @@ Reads information for frame-sound timing
static qboolean CG_ParseWeaponSoundFile(const char *filename, weaponInfo_t * weapon) static qboolean CG_ParseWeaponSoundFile(const char *filename, weaponInfo_t * weapon)
{ {
char *text_p; char *text_p;
int len; int len, i, skip;
int i;
char *token; char *token;
// float fps;
int skip; // Elder: What's this for?
char text[20000]; char text[20000];
fileHandle_t f; fileHandle_t f;
sfxWeapTiming_t *weapTiming; sfxWeapTiming_t *weapTiming;
@ -238,26 +237,20 @@ static qboolean CG_ParseWeaponSoundFile(const char *filename, weaponInfo_t * wea
break; break;
// Add it to the array // Add it to the array
if (atoi(token)) { if (atoi(token)) {
//Com_Printf("(%i): %s\n", i, token);
weapTiming->sfxInfo[i].frame = atoi(token); weapTiming->sfxInfo[i].frame = atoi(token);
} else } else
break; break;
//return qfalse;
// Grab sound file path // Grab sound file path
token = COM_Parse(&text_p); token = COM_Parse(&text_p);
if (!token) if (!token)
break; break;
//return qfalse;
//Com_Printf("(%i): %s\n", i, token);
weapTiming->sfxInfo[i].sound = trap_S_RegisterSound(token, qfalse); weapTiming->sfxInfo[i].sound = trap_S_RegisterSound(token, qfalse);
} }
// Store total number // Store total number
weapTiming->numFrames = i; weapTiming->numFrames = i;
//Com_Printf("Total Frames: %i\n", weapTiming->numFrames);
return qtrue; return qtrue;
} }
@ -308,11 +301,8 @@ CG_ParseWeaponAnimFile
*/ */
static qboolean CG_ParseWeaponAnimFile(const char *filename, weaponInfo_t * weapon) static qboolean CG_ParseWeaponAnimFile(const char *filename, weaponInfo_t * weapon)
{ {
char *text_p; char *text_p, *token;
int len; int len, i, skip;
int i;
int skip;
char *token;
float fps; float fps;
char text[20000]; char text[20000];
fileHandle_t f; fileHandle_t f;
@ -436,15 +426,12 @@ localEntity_t *CG_ShotgunEjectBrass(centity_t * cent)
if (cg_brassTime.integer <= 0) { if (cg_brassTime.integer <= 0) {
return NULL; return NULL;
} }
//for ( i = 0; i < isHC + 1; i++ ) {
le = CG_AllocLocalEntity(); le = CG_AllocLocalEntity();
re = &le->refEntity; re = &le->refEntity;
le->leType = LE_FRAGMENT; le->leType = LE_FRAGMENT;
le->startTime = cg.time; le->startTime = cg.time;
le->endTime = le->startTime + cg_brassTime.integer * 3 + cg_brassTime.integer * random(); le->endTime = le->startTime + cg_brassTime.integer * 3 + cg_brassTime.integer * random();
le->pos.trType = TR_GRAVITY; le->pos.trType = TR_GRAVITY;
le->pos.trTime = cg.time; le->pos.trTime = cg.time;
@ -456,18 +443,15 @@ localEntity_t *CG_ShotgunEjectBrass(centity_t * cent)
re->hModel = cgs.media.shotgunBrassModel; re->hModel = cgs.media.shotgunBrassModel;
le->bounceFactor = 0.3f; le->bounceFactor = 0.3f;
le->angles.trType = TR_LINEAR; le->angles.trType = TR_LINEAR;
le->angles.trTime = cg.time; le->angles.trTime = cg.time;
le->angles.trDelta[0] = rand() % 200 - 100; le->angles.trDelta[0] = rand() % 200 - 100;
le->angles.trDelta[1] = rand() % 200 - 100; le->angles.trDelta[1] = rand() % 200 - 100;
le->angles.trDelta[2] = rand() % 200 - 100; le->angles.trDelta[2] = rand() % 200 - 100;
le->leFlags = LEF_TUMBLE; le->leFlags = LEF_TUMBLE;
le->leBounceSoundType = LEBS_BRASS; le->leBounceSoundType = LEBS_BRASS;
le->leMarkType = LEMT_NONE; le->leMarkType = LEMT_NONE;
//}
return le; return le;
} }
@ -481,7 +465,6 @@ void CG_RailTrail(clientInfo_t * ci, vec3_t start, vec3_t end)
vec3_t axis[36], move, move2, next_move, vec, temp; vec3_t axis[36], move, move2, next_move, vec, temp;
float len; float len;
int i, j, skip; int i, j, skip;
localEntity_t *le; localEntity_t *le;
refEntity_t *re; refEntity_t *re;
@ -500,12 +483,10 @@ void CG_RailTrail(clientInfo_t * ci, vec3_t start, vec3_t end)
le = CG_AllocLocalEntity(); le = CG_AllocLocalEntity();
re = &le->refEntity; re = &le->refEntity;
le->leType = LE_FADE_RGB; le->leType = LE_FADE_RGB;
le->startTime = cg.time; le->startTime = cg.time;
le->endTime = cg.time + cg_railTrailTime.value; le->endTime = cg.time + cg_railTrailTime.value;
le->lifeRate = 1.0 / (le->endTime - le->startTime); le->lifeRate = 1.0 / (le->endTime - le->startTime);
re->shaderTime = cg.time / 1000.0f; re->shaderTime = cg.time / 1000.0f;
re->reType = RT_RAIL_CORE; re->reType = RT_RAIL_CORE;
re->customShader = cgs.media.railCoreShader; re->customShader = cgs.media.railCoreShader;
@ -517,7 +498,6 @@ void CG_RailTrail(clientInfo_t * ci, vec3_t start, vec3_t end)
re->shaderRGBA[1] = ci->color1[1] * 255; re->shaderRGBA[1] = ci->color1[1] * 255;
re->shaderRGBA[2] = ci->color1[2] * 255; re->shaderRGBA[2] = ci->color1[2] * 255;
re->shaderRGBA[3] = 255; re->shaderRGBA[3] = 255;
le->color[0] = ci->color1[0] * 0.75; le->color[0] = ci->color1[0] * 0.75;
le->color[1] = ci->color1[1] * 0.75; le->color[1] = ci->color1[1] * 0.75;
le->color[2] = ci->color1[2] * 0.75; le->color[2] = ci->color1[2] * 0.75;
@ -548,22 +528,18 @@ void CG_RailTrail(clientInfo_t * ci, vec3_t start, vec3_t end)
le->startTime = cg.time; le->startTime = cg.time;
le->endTime = cg.time + (i >> 1) + 600; le->endTime = cg.time + (i >> 1) + 600;
le->lifeRate = 1.0 / (le->endTime - le->startTime); le->lifeRate = 1.0 / (le->endTime - le->startTime);
re->shaderTime = cg.time / 1000.0f; re->shaderTime = cg.time / 1000.0f;
re->reType = RT_SPRITE; re->reType = RT_SPRITE;
re->radius = 1.1f; re->radius = 1.1f;
re->customShader = cgs.media.railRingsShader; re->customShader = cgs.media.railRingsShader;
re->shaderRGBA[0] = ci->color2[0] * 255; re->shaderRGBA[0] = ci->color2[0] * 255;
re->shaderRGBA[1] = ci->color2[1] * 255; re->shaderRGBA[1] = ci->color2[1] * 255;
re->shaderRGBA[2] = ci->color2[2] * 255; re->shaderRGBA[2] = ci->color2[2] * 255;
re->shaderRGBA[3] = 255; re->shaderRGBA[3] = 255;
le->color[0] = ci->color2[0] * 0.75; le->color[0] = ci->color2[0] * 0.75;
le->color[1] = ci->color2[1] * 0.75; le->color[1] = ci->color2[1] * 0.75;
le->color[2] = ci->color2[2] * 0.75; le->color[2] = ci->color2[2] * 0.75;
le->color[3] = 1.0f; le->color[3] = 1.0f;
le->pos.trType = TR_LINEAR; le->pos.trType = TR_LINEAR;
le->pos.trTime = cg.time; le->pos.trTime = cg.time;
@ -739,6 +715,15 @@ void CG_RegisterWeapon(int weaponNum)
MAKERGB(weaponInfo->flashDlightColor, 1, 1, 0); MAKERGB(weaponInfo->flashDlightColor, 1, 1, 0);
weaponInfo->flashSound[0] = trap_S_RegisterSound("sound/weapons/mk23/mk23fire.wav", qfalse); weaponInfo->flashSound[0] = trap_S_RegisterSound("sound/weapons/mk23/mk23fire.wav", qfalse);
weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/mk23/mk23reload.wav", qfalse); weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/mk23/mk23reload.wav", qfalse);
// JBravo: skin replacements
if (strcmp(cg_RQ3_mk23_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_mk23.string, cg_RQ3_mk23_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_mk23.string, cg_RQ3_mk23_skin.string));
}
}
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass; weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion"); cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion");
@ -765,7 +750,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->flashSound[0] = trap_S_RegisterSound("sound/weapons/knife/slash.wav", qfalse); weaponInfo->flashSound[0] = trap_S_RegisterSound("sound/weapons/knife/slash.wav", qfalse);
weaponInfo->missileModel = weaponInfo->missileModel =
trap_R_RegisterModel(va("models/weapons2/%s/knife.md3", cg_RQ3_knife.string)); trap_R_RegisterModel(va("models/weapons2/%s/knife.md3", cg_RQ3_knife.string));
// JBravo: skin replacements
if (strcmp(cg_RQ3_knife_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_knife.string, cg_RQ3_knife_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_knife.string, cg_RQ3_knife_skin.string));
}
}
// Load the animation information // Load the animation information
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_knife.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_knife.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
@ -781,7 +774,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/m4/m4reload.wav", qfalse); weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/m4/m4reload.wav", qfalse);
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass; weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion"); cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion");
// JBravo: skin replacements
if (strcmp(cg_RQ3_m4_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_m4.string, cg_RQ3_m4_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_m4.string, cg_RQ3_m4_skin.string));
}
}
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_m4.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_m4.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
Com_Printf("Failed to load weapon animation file %s\n", filename); Com_Printf("Failed to load weapon animation file %s\n", filename);
@ -808,6 +809,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->worldReloadSound[2] = trap_S_RegisterSound("sound/weapons/ssg3000/ssgbolt.wav", qfalse); weaponInfo->worldReloadSound[2] = trap_S_RegisterSound("sound/weapons/ssg3000/ssgbolt.wav", qfalse);
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass; weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion"); cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion");
// JBravo: skin replacements
if (strcmp(cg_RQ3_ssg3000_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_ssg3000.string, cg_RQ3_ssg3000_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_ssg3000.string, cg_RQ3_ssg3000_skin.string));
}
}
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_ssg3000.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_ssg3000.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
Com_Printf("Failed to load weapon animation file %s\n", filename); Com_Printf("Failed to load weapon animation file %s\n", filename);
@ -830,7 +840,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/mp5/mp5reload.wav", qfalse); weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/mp5/mp5reload.wav", qfalse);
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass; weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion"); cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion");
// JBravo: skin replacements
if (strcmp(cg_RQ3_mp5_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_mp5.string, cg_RQ3_mp5_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_mp5.string, cg_RQ3_mp5_skin.string));
}
}
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_mp5.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_mp5.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
Com_Printf("Failed to load weapon animation file %s\n", filename); Com_Printf("Failed to load weapon animation file %s\n", filename);
@ -855,7 +873,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/handcannon/hcreload.wav", qfalse); weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/handcannon/hcreload.wav", qfalse);
weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass; weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion"); cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion");
// JBravo: skin replacements
if (strcmp(cg_RQ3_handcannon_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_handcannon.string, cg_RQ3_handcannon_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_handcannon.string, cg_RQ3_handcannon_skin.string));
}
}
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_handcannon.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_handcannon.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
Com_Printf("Failed to load weapon animation file %s\n", filename); Com_Printf("Failed to load weapon animation file %s\n", filename);
@ -879,7 +905,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->flashSound[0] = trap_S_RegisterSound("sound/weapons/m3/m3fire.wav", qfalse); weaponInfo->flashSound[0] = trap_S_RegisterSound("sound/weapons/m3/m3fire.wav", qfalse);
weaponInfo->worldReloadSound[1] = trap_S_RegisterSound("sound/weapons/m3/m3in.wav", qfalse); weaponInfo->worldReloadSound[1] = trap_S_RegisterSound("sound/weapons/m3/m3in.wav", qfalse);
weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass; weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass;
// JBravo: skin replacements
if (strcmp(cg_RQ3_m3_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_m3.string, cg_RQ3_m3_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_m3.string, cg_RQ3_m3_skin.string));
}
}
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_m3.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_m3.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
Com_Printf("Failed to load weapon animation file %s\n", filename); Com_Printf("Failed to load weapon animation file %s\n", filename);
@ -905,6 +939,15 @@ void CG_RegisterWeapon(int weaponNum)
weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/akimbo/akimboreload.wav", qfalse); weaponInfo->worldReloadSound[0] = trap_S_RegisterSound("sound/weapons/akimbo/akimboreload.wav", qfalse);
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass; weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion"); cgs.media.bulletExplosionShader = trap_R_RegisterShader("bulletExplosion");
// JBravo: skin replacements
if (strcmp(cg_RQ3_akimbo_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_akimbo.string, cg_RQ3_akimbo_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_akimbo.string, cg_RQ3_akimbo_skin.string));
}
}
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_akimbo.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_akimbo.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
Com_Printf("Failed to load weapon animation file %s\n", filename); Com_Printf("Failed to load weapon animation file %s\n", filename);
@ -930,7 +973,15 @@ void CG_RegisterWeapon(int weaponNum)
MAKERGB(weaponInfo->flashDlightColor, 1, 0.70f, 0); MAKERGB(weaponInfo->flashDlightColor, 1, 0.70f, 0);
//Blaze: Make sure we load this as we may have exploding crates //Blaze: Make sure we load this as we may have exploding crates
//cgs.media.grenadeExplosionShader = trap_R_RegisterShader( "grenadeExplosion" ); //cgs.media.grenadeExplosionShader = trap_R_RegisterShader( "grenadeExplosion" );
// JBravo: skin replacements
if (strcmp(cg_RQ3_grenade_skin.string, "default")) {
weaponInfo->customSkin = trap_R_RegisterSkin (va("models/weapons2/%s/%s.skin",
cg_RQ3_grenade.string, cg_RQ3_grenade_skin.string));
if (!weaponInfo->customSkin) {
Com_Printf("Weapon skin load failure: %s\n", va("models/weapons2/%s/%s.skin",
cg_RQ3_grenade.string, cg_RQ3_grenade_skin.string));
}
}
// Load the animation information // Load the animation information
Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_grenade.string); Com_sprintf(filename, sizeof(filename), "models/weapons2/%s/animation.cfg", cg_RQ3_grenade.string);
if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) { if (!CG_ParseWeaponAnimFile(filename, weaponInfo)) {
@ -974,54 +1025,64 @@ void CG_RegisterItemVisuals(int itemNum)
memset(itemInfo, 0, sizeof(&itemInfo)); memset(itemInfo, 0, sizeof(&itemInfo));
itemInfo->registered = qtrue; itemInfo->registered = qtrue;
if (item->giType == IT_HOLDABLE) {
if (item->giTag == HI_KEVLAR) {
itemInfo->models[0] = trap_R_RegisterModel(va("models/items/%s.md3", cg_RQ3_kevlar.string));
}
if (item->giTag == HI_LASER) {
itemInfo->models[0] = trap_R_RegisterModel(va("models/items/%s.md3", cg_RQ3_laser.string));
}
if (item->giTag == HI_SILENCER) {
itemInfo->models[0] = trap_R_RegisterModel(va("models/items/%s.md3", cg_RQ3_silencer.string));
}
if (item->giTag == HI_BANDOLIER) {
itemInfo->models[0] = trap_R_RegisterModel(va("models/items/%s.md3", cg_RQ3_bandolier.string));
}
if (item->giTag == HI_SLIPPERS) {
itemInfo->models[0] = trap_R_RegisterModel(va("models/items/%s.md3", cg_RQ3_slippers.string));
}
if (item->giTag == HI_HELMET) {
itemInfo->models[0] = trap_R_RegisterModel(va("models/items/%s.md3", cg_RQ3_helmet.string));
}
} else {
itemInfo->models[0] = trap_R_RegisterModel(item->world_model[0]); itemInfo->models[0] = trap_R_RegisterModel(item->world_model[0]);
}
if (item->giType == IT_HOLDABLE) {
if (item->giTag == HI_KEVLAR) {
itemInfo->icon = trap_R_RegisterShader(va("icons/iconi_%s", cg_RQ3_kevlar.string));
}
if (item->giTag == HI_LASER) {
itemInfo->icon = trap_R_RegisterShader(va("icons/iconi_%s", cg_RQ3_laser.string));
}
if (item->giTag == HI_SILENCER) {
itemInfo->icon = trap_R_RegisterShader(va("icons/iconi_%s", cg_RQ3_silencer.string));
}
if (item->giTag == HI_BANDOLIER) {
itemInfo->icon = trap_R_RegisterShader(va("icons/iconi_%s", cg_RQ3_bandolier.string));
}
if (item->giTag == HI_SLIPPERS) {
itemInfo->icon = trap_R_RegisterShader(va("icons/iconi_%s", cg_RQ3_slippers.string));
}
if (item->giTag == HI_HELMET) {
itemInfo->icon = trap_R_RegisterShader(va("icons/iconi_%s", cg_RQ3_helmet.string));
}
} else {
itemInfo->icon = trap_R_RegisterShader(item->icon); itemInfo->icon = trap_R_RegisterShader(item->icon);
}
if (item->giType == IT_WEAPON) { if (item->giType == IT_WEAPON) {
CG_RegisterWeapon(item->giTag); CG_RegisterWeapon(item->giTag);
} }
// JBravo: replacement skins for items
if (item->giType == IT_HOLDABLE) {
if (!strcmp(item->classname, "item_kevlar") && strcmp(cg_RQ3_kevlar_skin.string, "default")) {
itemInfo->customSkin = trap_R_RegisterSkin (va("models/items/%s/%s.skin",
cg_RQ3_kevlar.string, cg_RQ3_kevlar_skin.string));
if (!itemInfo->customSkin) {
Com_Printf("Item skin load failure: %s\n", va("models/items/%s/%s.skin",
cg_RQ3_kevlar.string, cg_RQ3_kevlar_skin.string));
}
}
if (!strcmp(item->classname, "item_silencer") && strcmp(cg_RQ3_silencer_skin.string, "default")) {
itemInfo->customSkin = trap_R_RegisterSkin (va("models/items/%s/%s.skin",
cg_RQ3_silencer.string, cg_RQ3_silencer_skin.string));
if (!itemInfo->customSkin) {
Com_Printf("Item skin load failure: %s\n", va("models/items/%s/%s.skin",
cg_RQ3_kevlar.string, cg_RQ3_kevlar_skin.string));
}
}
if (!strcmp(item->classname, "item_laser") && strcmp(cg_RQ3_laser_skin.string, "default")) {
itemInfo->customSkin = trap_R_RegisterSkin (va("models/items/%s/%s.skin",
cg_RQ3_laser.string, cg_RQ3_laser_skin.string));
if (!itemInfo->customSkin) {
Com_Printf("Item skin load failure: %s\n", va("models/items/%s/%s.skin",
cg_RQ3_laser.string, cg_RQ3_laser_skin.string));
}
}
if (!strcmp(item->classname, "item_bandolier") && strcmp(cg_RQ3_bandolier_skin.string, "default")) {
itemInfo->customSkin = trap_R_RegisterSkin (va("models/items/%s/%s.skin",
cg_RQ3_bandolier.string, cg_RQ3_bandolier_skin.string));
if (!itemInfo->customSkin) {
Com_Printf("Item skin load failure: %s\n", va("models/items/%s/%s.skin",
cg_RQ3_bandolier.string, cg_RQ3_bandolier_skin.string));
}
}
if (!strcmp(item->classname, "item_slippers") && strcmp(cg_RQ3_slippers_skin.string, "default")) {
itemInfo->customSkin = trap_R_RegisterSkin (va("models/items/%s/%s.skin",
cg_RQ3_slippers.string, cg_RQ3_slippers_skin.string));
if (!itemInfo->customSkin) {
Com_Printf("Item skin load failure: %s\n", va("models/items/%s/%s.skin",
cg_RQ3_slippers.string, cg_RQ3_slippers_skin.string));
}
}
if (!strcmp(item->classname, "item_helmet") && strcmp(cg_RQ3_helmet_skin.string, "default")) {
itemInfo->customSkin = trap_R_RegisterSkin (va("models/items/%s/%s.skin",
cg_RQ3_helmet.string, cg_RQ3_helmet_skin.string));
if (!itemInfo->customSkin) {
Com_Printf("Item skin load failure: %s\n", va("models/items/%s/%s.skin",
cg_RQ3_helmet.string, cg_RQ3_helmet_skin.string));
}
}
}
// //
// powerups have an accompanying ring or sphere // powerups have an accompanying ring or sphere
// //
@ -1049,9 +1110,8 @@ CG_CalculateWeaponPosition
*/ */
static void CG_CalculateWeaponPosition(vec3_t origin, vec3_t angles) static void CG_CalculateWeaponPosition(vec3_t origin, vec3_t angles)
{ {
float scale; float scale, fracsin;
int delta; int delta;
float fracsin;
VectorCopy(cg.refdef.vieworg, origin); VectorCopy(cg.refdef.vieworg, origin);
VectorCopy(cg.refdefViewAngles, angles); VectorCopy(cg.refdefViewAngles, angles);
@ -1075,15 +1135,6 @@ static void CG_CalculateWeaponPosition(vec3_t origin, vec3_t angles)
} else if (delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME) { } else if (delta < LAND_DEFLECT_TIME + LAND_RETURN_TIME) {
origin[2] += cg.landChange * 0.25 * (LAND_DEFLECT_TIME + LAND_RETURN_TIME - delta) / LAND_RETURN_TIME; origin[2] += cg.landChange * 0.25 * (LAND_DEFLECT_TIME + LAND_RETURN_TIME - delta) / LAND_RETURN_TIME;
} }
#if 0
// drop the weapon when stair climbing
delta = cg.time - cg.stepTime;
if (delta < STEP_TIME / 2) {
origin[2] -= cg.stepChange * 0.25 * delta / (STEP_TIME / 2);
} else if (delta < STEP_TIME) {
origin[2] -= cg.stepChange * 0.25 * (STEP_TIME - delta) / (STEP_TIME / 2);
}
#endif
// idle drift // idle drift
scale = cg.xyspeed + 40; scale = cg.xyspeed + 40;
@ -1114,12 +1165,7 @@ sound should only be done on the world model case.
*/ */
void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * cent, int team) void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * cent, int team)
{ {
refEntity_t gun; refEntity_t gun, flash, silencer, laser;
// Blaze: Can remove this because no more spinning barrel
// refEntity_t barrel;
refEntity_t flash;
refEntity_t silencer, laser;
vec3_t angles; vec3_t angles;
weapon_t weaponNum; weapon_t weaponNum;
weaponInfo_t *weapon; weaponInfo_t *weapon;
@ -1152,6 +1198,10 @@ void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * ce
return; return;
} }
// JBravo: activate the custom skin, if any
if (weapon->customSkin)
gun.customSkin = weapon->customSkin;
if (!ps) { if (!ps) {
// add weapon ready sound // add weapon ready sound
cent->pe.lightningFiring = qfalse; cent->pe.lightningFiring = qfalse;
@ -1205,8 +1255,6 @@ void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * ce
if (cg.curSyncSound.played == qfalse) { if (cg.curSyncSound.played == qfalse) {
cg.curSyncSound.played = qtrue; cg.curSyncSound.played = qtrue;
//CG_Printf("Playing a timed sound (%i %i %1.1f)\n", gun.frame, gun.oldframe, gun.backlerp);
trap_S_StartLocalSound(cg.curSyncSound.sound, CHAN_WEAPON); trap_S_StartLocalSound(cg.curSyncSound.sound, CHAN_WEAPON);
} }
} }
@ -1348,7 +1396,6 @@ void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * ce
"tag_shell2"); "tag_shell2");
else else
CG_PositionRotatedEntityOnTag(&shell->refEntity, &gun, gun.hModel, "tag_shell"); CG_PositionRotatedEntityOnTag(&shell->refEntity, &gun, gun.hModel, "tag_shell");
} }
VectorCopy(shell->refEntity.origin, shell->pos.trBase); VectorCopy(shell->refEntity.origin, shell->pos.trBase);
@ -1469,9 +1516,6 @@ void CG_AddPlayerWeapon(refEntity_t * parent, playerState_t * ps, centity_t * ce
if (ps || cg.renderingThirdPerson || cent->currentState.number != cg.predictedPlayerState.clientNum) { if (ps || cg.renderingThirdPerson || cent->currentState.number != cg.predictedPlayerState.clientNum) {
// add rail trail // add rail trail
//Blaze: no need for this
//CG_SpawnRailTrail( cent, flash.origin );
if (weapon->flashDlightColor[0] || weapon->flashDlightColor[1] || weapon->flashDlightColor[2]) { if (weapon->flashDlightColor[0] || weapon->flashDlightColor[1] || weapon->flashDlightColor[2]) {
trap_R_AddLightToScene(flash.origin, 300 + (rand() & 31), weapon->flashDlightColor[0], trap_R_AddLightToScene(flash.origin, 300 + (rand() & 31), weapon->flashDlightColor[0],
weapon->flashDlightColor[1], weapon->flashDlightColor[2]); weapon->flashDlightColor[1], weapon->flashDlightColor[2]);
@ -1574,10 +1618,7 @@ CG_DrawWeaponSelect
*/ */
void CG_DrawWeaponSelect(void) void CG_DrawWeaponSelect(void)
{ {
int i; int i, bits, count, x, y, w;
int bits;
int count;
int x, y, w;
char *name; char *name;
float *color; float *color;
@ -1670,8 +1711,7 @@ CG_NextWeapon_f
*/ */
void CG_NextWeapon_f(void) void CG_NextWeapon_f(void)
{ {
int i; int i, original;
int original;
if (!cg.snap) { if (!cg.snap) {
return; return;
@ -1723,8 +1763,7 @@ CG_PrevWeapon_f
*/ */
void CG_PrevWeapon_f(void) void CG_PrevWeapon_f(void)
{ {
int i; int i, original;
int original;
if (!cg.snap) { if (!cg.snap) {
return; return;
@ -1755,10 +1794,6 @@ void CG_PrevWeapon_f(void)
if (cg.weaponSelect == -1) { if (cg.weaponSelect == -1) {
cg.weaponSelect = 15; cg.weaponSelect = 15;
} }
//Blaze: Allow full Cycle
//if ( cg.weaponSelect == WP_GAUNTLET ) {
// continue; // never cycle to gauntlet
//}
if (CG_WeaponSelectable(cg.weaponSelect)) { if (CG_WeaponSelectable(cg.weaponSelect)) {
break; break;
} }
@ -1782,8 +1817,7 @@ CG_SpecialWeapon_f
*/ */
void CG_SpecialWeapon_f(void) void CG_SpecialWeapon_f(void)
{ {
int i; int i, original;
int original;
if (!cg.snap) { if (!cg.snap) {
//CG_Printf("No snapshot: normally exiting\n"); //CG_Printf("No snapshot: normally exiting\n");
@ -2012,8 +2046,6 @@ The current weapon has just run out of ammo
*/ */
void CG_OutOfAmmoChange(void) void CG_OutOfAmmoChange(void)
{ {
//int i;
if (!cg.snap) if (!cg.snap)
return; return;
@ -2195,31 +2227,13 @@ Caused by an EV_MISSILE_MISS event, or directly by local bullet tracing
void CG_MissileHitWall(int weapon, int clientNum, vec3_t origin, void CG_MissileHitWall(int weapon, int clientNum, vec3_t origin,
vec3_t dir, impactSound_t soundType, int weapModification) vec3_t dir, impactSound_t soundType, int weapModification)
{ {
qhandle_t mod; qhandle_t mod, mark, shader;
qhandle_t mark;
qhandle_t shader;
sfxHandle_t sfx; sfxHandle_t sfx;
float radius; float radius, light;
float light; vec3_t lightColor, puffOrigin, puffOffset, puffDir, velocity;
vec3_t lightColor; localEntity_t *le, *smokePuff;
localEntity_t *le; int r, duration, angle, contentType, sparkCount, i;
int r; qboolean alphaFade, isSprite;
qboolean alphaFade;
qboolean isSprite;
int duration;
int angle;
//Elder: for impact smoke marks
localEntity_t *smokePuff;
vec3_t puffOrigin;
vec3_t puffOffset;
vec3_t puffDir;
int contentType;
//Elder: for impact sparks
vec3_t velocity;
int sparkCount;
int i;
mark = 0; mark = 0;
radius = 32; radius = 32;
@ -2589,11 +2603,8 @@ We are not going to show every HC impact
static void CG_ShotgunPellet(vec3_t start, vec3_t end, int skipNum, int shellWeapon) static void CG_ShotgunPellet(vec3_t start, vec3_t end, int skipNum, int shellWeapon)
{ {
trace_t tr; trace_t tr;
int sourceContentType, destContentType; int sourceContentType, destContentType, l, playerNum;
int l, playerNum;
vec3_t t_start; vec3_t t_start;
//Makro //Makro
int Material; int Material;
@ -2720,12 +2731,9 @@ hit splashes
*/ */
static void CG_ShotgunPattern(vec3_t origin, vec3_t origin2, int otherEntNum, int shotType, int seed) static void CG_ShotgunPattern(vec3_t origin, vec3_t origin2, int otherEntNum, int shotType, int seed)
{ {
int i; int i, count;
float r, u; float r, u;
vec3_t end; vec3_t end, forward, right, up;
vec3_t forward, right, up;
int count;
int hc_multipler = 0; int hc_multipler = 0;
// derive the right and up vectors from the forward vector, because // derive the right and up vectors from the forward vector, because
@ -2822,8 +2830,7 @@ void CG_CreateTracer(int entity, vec3_t start, vec3_t end)
{ {
localEntity_t *le; localEntity_t *le;
float dist; float dist;
vec3_t dir, end2; vec3_t dir, end2, temp, midpoint;
vec3_t temp, midpoint;
float tracerSpeed = 5000; float tracerSpeed = 5000;
VectorSubtract(end, start, dir); VectorSubtract(end, start, dir);
@ -2861,11 +2868,9 @@ CG_Tracer
*/ */
void CG_Tracer(vec3_t source, vec3_t dest) void CG_Tracer(vec3_t source, vec3_t dest)
{ {
vec3_t forward, right; vec3_t forward, right, line, start, finish;
polyVert_t verts[4]; polyVert_t verts[4];
vec3_t line;
float len, begin, end; float len, begin, end;
vec3_t start, finish;
// tracer // tracer
VectorSubtract(dest, source, forward); VectorSubtract(dest, source, forward);
@ -3007,9 +3012,7 @@ Local laser dot if it is the client's own laser
*/ */
static void CG_LocalLaser() static void CG_LocalLaser()
{ {
vec3_t muzzle; vec3_t muzzle, forward, end;
vec3_t forward;
vec3_t end;
refEntity_t *re; refEntity_t *re;
trace_t tr; trace_t tr;

View file

@ -5,6 +5,9 @@
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
// //
// $Log$ // $Log$
// Revision 1.48 2003/02/01 02:15:31 jbravo
// Replacement models and items
//
// Revision 1.47 2003/01/08 04:46:26 jbravo // Revision 1.47 2003/01/08 04:46:26 jbravo
// Wrote a new hackish model replacement system // Wrote a new hackish model replacement system
// //
@ -169,7 +172,7 @@ gitem_t bg_itemlist[] = {
{"models/weapons2/m4/m4.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", {"models/weapons2/m4/m4.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
/* icon */ "icons/iconw_m4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", /* icon */ "icons/iconw_m4\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
/* pickup */ RQ3_M4_NAME, /* pickup */ RQ3_M4_NAME,
24, 24,
IT_WEAPON, IT_WEAPON,
@ -186,7 +189,7 @@ gitem_t bg_itemlist[] = {
{"models/weapons2/ssg3000/ssg3000.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", {"models/weapons2/ssg3000/ssg3000.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
/* icon */ "icons/iconw_ssg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", /* icon */ "icons/iconw_ssg\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
/* pickup */ RQ3_SSG3000_NAME, /* pickup */ RQ3_SSG3000_NAME,
6, 6,
IT_WEAPON, IT_WEAPON,
@ -203,7 +206,7 @@ gitem_t bg_itemlist[] = {
{"models/weapons2/mp5/mp5.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", {"models/weapons2/mp5/mp5.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
/* icon */ "icons/iconw_mp5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", /* icon */ "icons/iconw_mp5\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
/* pickup */ RQ3_MP5_NAME, /* pickup */ RQ3_MP5_NAME,
30, 30,
IT_WEAPON, IT_WEAPON,
@ -237,7 +240,7 @@ gitem_t bg_itemlist[] = {
{"models/weapons2/m3/m3.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", {"models/weapons2/m3/m3.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
/* icon */ "icons/iconw_m3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0", /* icon */ "icons/iconw_m3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
/* pickup */ RQ3_M3_NAME, /* pickup */ RQ3_M3_NAME,
7, 7,
IT_WEAPON, IT_WEAPON,
@ -588,10 +591,10 @@ Only in CTF games
{ {
"item_kevlar", "item_kevlar",
"sound/items/kevlar.wav", "sound/items/kevlar.wav",
{"models/items/kevlar.md3", {"models/items/kevlar.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
"icons/iconi_kevlar", "icons/iconi_kevlar\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
RQ3_KEVLAR_NAME, RQ3_KEVLAR_NAME,
0, 0,
IT_HOLDABLE, IT_HOLDABLE,
@ -603,10 +606,10 @@ Only in CTF games
{ {
"item_silencer", "item_silencer",
"sound/items/silencer.wav", "sound/items/silencer.wav",
{"models/items/silencer.md3", {"models/items/silencer.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
"icons/iconi_silencer", "icons/iconi_silencer\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
RQ3_SILENCER_NAME, RQ3_SILENCER_NAME,
0, 0,
IT_HOLDABLE, IT_HOLDABLE,
@ -618,10 +621,10 @@ Only in CTF games
{ {
"item_laser", "item_laser",
"sound/items/laser.wav", "sound/items/laser.wav",
{"models/items/laser.md3", {"models/items/laser.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
"icons/iconi_laser", "icons/iconi_laser\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
RQ3_LASER_NAME, RQ3_LASER_NAME,
0, 0,
IT_HOLDABLE, IT_HOLDABLE,
@ -633,10 +636,10 @@ Only in CTF games
{ {
"item_bandolier", "item_bandolier",
"sound/items/bandolier.wav", "sound/items/bandolier.wav",
{"models/items/bandolier.md3", {"models/items/bandolier.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
"icons/iconi_bandolier", "icons/iconi_bandolier\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
RQ3_BANDOLIER_NAME, RQ3_BANDOLIER_NAME,
0, 0,
IT_HOLDABLE, IT_HOLDABLE,
@ -648,10 +651,10 @@ Only in CTF games
{ {
"item_slippers", "item_slippers",
"sound/items/slippers.wav", "sound/items/slippers.wav",
{"models/items/slippers.md3", {"models/items/slippers.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
"icons/iconi_slippers", "icons/iconi_slippers\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
RQ3_SLIPPERS_NAME, RQ3_SLIPPERS_NAME,
0, 0,
IT_HOLDABLE, IT_HOLDABLE,
@ -663,10 +666,10 @@ Only in CTF games
{ {
"item_helmet", "item_helmet",
"sound/items/slippers.wav", "sound/items/slippers.wav",
{"models/items/helmet/helmet.md3", {"models/items/helmet.md3\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
0, 0, 0} 0, 0, 0}
, ,
"icons/iconi_helmet", "icons/iconi_helmet\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0",
RQ3_HELMET_NAME, RQ3_HELMET_NAME,
0, 0,
IT_HOLDABLE, IT_HOLDABLE,