mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2024-11-27 06:22:27 +00:00
Elder:
Code for 0-14-00 VMs Client-side
This commit is contained in:
parent
cbd8ffcde8
commit
9839e288a6
9 changed files with 499 additions and 178 deletions
|
@ -147,91 +147,6 @@ static void CG_Bandage_f (void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=================
|
|
||||||
CG_ReloadReset_f
|
|
||||||
|
|
||||||
Elder: reset reload depressed flag
|
|
||||||
=================
|
|
||||||
*/
|
|
||||||
static void CG_ReloadReset_f (void) {
|
|
||||||
//CG_Printf("Releasing Reload\n");
|
|
||||||
cg.rq3_reloadDown = qfalse;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
=================
|
|
||||||
CG_Reload_f
|
|
||||||
|
|
||||||
Elder: reset local zoom, then proceed with server action
|
|
||||||
Note: most of this doesn't work if it's a +button style
|
|
||||||
=================
|
|
||||||
*/
|
|
||||||
static void CG_Reload_f (void) {
|
|
||||||
centity_t *cent;
|
|
||||||
cent = &cg_entities[cg.snap->ps.clientNum];
|
|
||||||
|
|
||||||
if ( !cg.snap ) {
|
|
||||||
//CG_Printf("No snapshot: normally exiting\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// if we are going into the intermission, don't do anything
|
|
||||||
if ( cg.intermissionStarted ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
///Elder: spectator?
|
|
||||||
if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Elder: don't allow reloading when in the middle of bursts
|
|
||||||
if (cg.snap->ps.stats[STAT_BURST] > 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (cg.rq3_reloadDown == qtrue)
|
|
||||||
{
|
|
||||||
//CG_Printf("Reload down... exiting\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
cg.rq3_reloadDown = qtrue;
|
|
||||||
|
|
||||||
//Elder: prevent "reloading" when dead hehe
|
|
||||||
if ( cg.snap->ps.stats[STAT_HEALTH] <= 0 ) {
|
|
||||||
CG_Printf("Nothing to reload - you are dead.\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Elder: don't allow reloading until the weapon is free
|
|
||||||
//Don't cut-off here because we want to check for fast-reloads
|
|
||||||
//if (cg.snap->ps.weaponTime > 0)
|
|
||||||
//return;
|
|
||||||
|
|
||||||
//Elder: added to prevent bandaging while reloading
|
|
||||||
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK) {
|
|
||||||
CG_Printf("You'll get to your weapon when you are finished bandaging!\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Elder: no clips, or full chamber means no reload
|
|
||||||
//CG_Printf("currentState.weapon: %d, clipamount: %d\n", cent->currentState.weapon, ClipAmountForAmmo(cent->currentState.weapon));
|
|
||||||
if (cg.snap->ps.stats[STAT_CLIPS] &&
|
|
||||||
cg.snap->ps.ammo[cent->currentState.weapon] < ClipAmountForAmmo(cent->currentState.weapon) ) {
|
|
||||||
//cg.zoomed = 0;
|
|
||||||
//cg.zoomLevel = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Elder: reset "no ammo" switch in view
|
|
||||||
if (cg.snap->ps.weapon == WP_SSG3000 && cg.zoomFirstReturn == -1)
|
|
||||||
cg.zoomFirstReturn = 0;
|
|
||||||
|
|
||||||
//CG_Printf("Sending reload command to server\n");
|
|
||||||
trap_SendClientCommand("reload");
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=================
|
=================
|
||||||
CG_SizeUp_f
|
CG_SizeUp_f
|
||||||
|
@ -758,14 +673,7 @@ static consoleCommand_t commands[] = {
|
||||||
{ "dropitem", CG_DropItem_f },
|
{ "dropitem", CG_DropItem_f },
|
||||||
{ "dropweapon", CG_DropWeapon_f }, // Elder: added to reset zoom then goto server
|
{ "dropweapon", CG_DropWeapon_f }, // Elder: added to reset zoom then goto server
|
||||||
{ "bandage", CG_Bandage_f }, // Elder: added to reset zoom then goto server
|
{ "bandage", CG_Bandage_f }, // Elder: added to reset zoom then goto server
|
||||||
{ "+reload", CG_Reload_f }, // Elder: added to reset zoom then goto server
|
|
||||||
{ "-reload", CG_ReloadReset_f}, // Elder: added to stop auto-throttle
|
|
||||||
{ "specialweapon", CG_SpecialWeapon_f }, // Elder: select special weapon
|
{ "specialweapon", CG_SpecialWeapon_f }, // Elder: select special weapon
|
||||||
//Elder: added for manual sv_floodProtect check
|
|
||||||
//{ "messagemode", CG_Say_f },
|
|
||||||
//{ "messagemode2", CG_SayTeam_f },
|
|
||||||
//{ "say", CG_Say_f },
|
|
||||||
//{ "say_team", CG_SayTeam_f },
|
|
||||||
{ "tell_target", CG_TellTarget_f },
|
{ "tell_target", CG_TellTarget_f },
|
||||||
{ "tell_attacker", CG_TellAttacker_f },
|
{ "tell_attacker", CG_TellAttacker_f },
|
||||||
{ "vtell_target", CG_VoiceTellTarget_f },
|
{ "vtell_target", CG_VoiceTellTarget_f },
|
||||||
|
@ -875,7 +783,6 @@ void CG_InitConsoleCommands( void ) {
|
||||||
trap_AddCommand ("stats");
|
trap_AddCommand ("stats");
|
||||||
trap_AddCommand ("teamtask");
|
trap_AddCommand ("teamtask");
|
||||||
trap_AddCommand ("loaddefered"); // spelled wrong, but not changing for demo
|
trap_AddCommand ("loaddefered"); // spelled wrong, but not changing for demo
|
||||||
trap_AddCommand ("reload");
|
|
||||||
trap_AddCommand ("opendoor");
|
trap_AddCommand ("opendoor");
|
||||||
trap_AddCommand ("bandage");
|
trap_AddCommand ("bandage");
|
||||||
//trap_AddCommand ("drop"); // XRAY FMJ weap drop cmd - Elder: not used
|
//trap_AddCommand ("drop"); // XRAY FMJ weap drop cmd - Elder: not used
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
#include "cg_local.h"
|
#include "cg_local.h"
|
||||||
|
|
||||||
static void CG_LaserSight( centity_t *cent );
|
static void CG_LaserSight( centity_t *cent );
|
||||||
|
static void CG_Dlight( centity_t *cent );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
======================
|
======================
|
||||||
|
@ -147,7 +148,7 @@ static void CG_EntityEffects( centity_t *cent ) {
|
||||||
|
|
||||||
|
|
||||||
// constant light glow
|
// constant light glow
|
||||||
if ( cent->currentState.constantLight ) {
|
if ( cent->currentState.constantLight && cent->currentState.eType != ET_DLIGHT) {
|
||||||
int cl;
|
int cl;
|
||||||
int i, r, g, b;
|
int i, r, g, b;
|
||||||
|
|
||||||
|
@ -156,6 +157,7 @@ static void CG_EntityEffects( centity_t *cent ) {
|
||||||
g = ( cl >> 8 ) & 255;
|
g = ( cl >> 8 ) & 255;
|
||||||
b = ( cl >> 16 ) & 255;
|
b = ( cl >> 16 ) & 255;
|
||||||
i = ( ( cl >> 24 ) & 255 ) * 4;
|
i = ( ( cl >> 24 ) & 255 ) * 4;
|
||||||
|
|
||||||
trap_R_AddLightToScene( cent->lerpOrigin, i, r, g, b );
|
trap_R_AddLightToScene( cent->lerpOrigin, i, r, g, b );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -255,7 +257,21 @@ static void CG_Item( centity_t *cent ) {
|
||||||
memset( &ent, 0, sizeof( ent ) );
|
memset( &ent, 0, sizeof( ent ) );
|
||||||
ent.reType = RT_SPRITE;
|
ent.reType = RT_SPRITE;
|
||||||
VectorCopy( cent->lerpOrigin, ent.origin );
|
VectorCopy( cent->lerpOrigin, ent.origin );
|
||||||
|
// Elder: lower them slightly
|
||||||
|
ent.origin[2] -= 6;
|
||||||
|
// Elder: make auto-sprites smaller, especially grenades and knifes
|
||||||
|
if (item->giType == IT_WEAPON)
|
||||||
|
{
|
||||||
|
if (item->giTag == WP_GRENADE || item->giTag == WP_KNIFE)
|
||||||
|
ent.radius = 4;
|
||||||
|
else
|
||||||
ent.radius = 14;
|
ent.radius = 14;
|
||||||
|
}
|
||||||
|
else if (item->giType == IT_HOLDABLE)
|
||||||
|
ent.radius = 10;
|
||||||
|
else
|
||||||
|
ent.radius = 6;
|
||||||
|
//ent.radius = 14;
|
||||||
ent.customShader = cg_items[es->modelindex].icon;
|
ent.customShader = cg_items[es->modelindex].icon;
|
||||||
ent.shaderRGBA[0] = 255;
|
ent.shaderRGBA[0] = 255;
|
||||||
ent.shaderRGBA[1] = 255;
|
ent.shaderRGBA[1] = 255;
|
||||||
|
@ -382,10 +398,13 @@ static void CG_Item( centity_t *cent ) {
|
||||||
frac = 1.0;
|
frac = 1.0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Elder: special items and ammo should have minimum light too
|
||||||
// items without glow textures need to keep a minimum light value
|
// items without glow textures need to keep a minimum light value
|
||||||
// so they are always visible
|
// so they are always visible
|
||||||
if ( ( item->giType == IT_WEAPON ) ||
|
if ( ( item->giType == IT_WEAPON ) ||
|
||||||
( item->giType == IT_ARMOR ) ) {
|
( item->giType == IT_ARMOR ) ||
|
||||||
|
( item->giType == IT_AMMO) ||
|
||||||
|
( item->giType == IT_HOLDABLE) ) {
|
||||||
ent.renderfx |= RF_MINLIGHT;
|
ent.renderfx |= RF_MINLIGHT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1008,6 +1027,7 @@ static void CG_TeamBase( centity_t *cent ) {
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
===============
|
===============
|
||||||
CG_AddCEntity
|
CG_AddCEntity
|
||||||
|
@ -1072,7 +1092,9 @@ static void CG_AddCEntity( centity_t *cent ) {
|
||||||
//if (!cg_RQ3_laserAssist.integer || cent->currentState.clientNum != cg.snap->ps.clientNum)
|
//if (!cg_RQ3_laserAssist.integer || cent->currentState.clientNum != cg.snap->ps.clientNum)
|
||||||
CG_LaserSight( cent );
|
CG_LaserSight( cent );
|
||||||
break;
|
break;
|
||||||
|
case ET_DLIGHT:
|
||||||
|
CG_Dlight( cent );
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1161,3 +1183,37 @@ static void CG_LaserSight( centity_t *cent ) {
|
||||||
trap_R_AddLightToScene(ent.origin, 200, 1, 1, 1);
|
trap_R_AddLightToScene(ent.origin, 200, 1, 1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
=================
|
||||||
|
CG_Dlight
|
||||||
|
Added by Elder.
|
||||||
|
|
||||||
|
Use sparingly.
|
||||||
|
=================
|
||||||
|
*/
|
||||||
|
static void CG_Dlight( centity_t *cent ) {
|
||||||
|
int cl;
|
||||||
|
float i, r, g, b;
|
||||||
|
|
||||||
|
cl = cent->currentState.constantLight;
|
||||||
|
r = ( cl & 255 ) / 255.0f;
|
||||||
|
g = ( ( cl >> 8 ) & 255 ) / 255.0f;
|
||||||
|
b = ( ( cl >> 16 ) & 255 ) / 255.0f;
|
||||||
|
i = ( cl >> 24 ) & 255 * 4;
|
||||||
|
|
||||||
|
if ( cent->currentState.eventParm & DLIGHT_FLICKER )
|
||||||
|
i += rand() % 100 - 50;
|
||||||
|
|
||||||
|
if ( cent->currentState.eventParm & DLIGHT_PULSE )
|
||||||
|
i *= 1.0f + sin( 2 * M_PI * cg.time / 1000.0f );
|
||||||
|
|
||||||
|
if ( cent->currentState.eventParm & DLIGHT_ADDITIVE)
|
||||||
|
trap_R_AddAdditiveLightToScene(cent->lerpOrigin, i, r, g, b);
|
||||||
|
else
|
||||||
|
trap_R_AddLightToScene(cent->lerpOrigin, i, r, g, b);
|
||||||
|
|
||||||
|
//CG_Printf("cgame: (%f %f %f) %f\n", r, g, b, i );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -1778,9 +1778,7 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
||||||
case EV_CHANGE_WEAPON:
|
case EV_CHANGE_WEAPON:
|
||||||
DEBUGNAME("EV_CHANGE_WEAPON");
|
DEBUGNAME("EV_CHANGE_WEAPON");
|
||||||
//Elder: TODO: change to appropriate weapon "in" sound
|
//Elder: TODO: change to appropriate weapon "in" sound
|
||||||
trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.selectSound );
|
//trap_S_StartSound (NULL, es->number, CHAN_AUTO, cgs.media.selectSound );
|
||||||
//Elder: removed
|
|
||||||
//CG_RQ3_Zoom(0);
|
|
||||||
break;
|
break;
|
||||||
case EV_FIRE_WEAPON:
|
case EV_FIRE_WEAPON:
|
||||||
DEBUGNAME("EV_FIRE_WEAPON");
|
DEBUGNAME("EV_FIRE_WEAPON");
|
||||||
|
@ -1994,6 +1992,13 @@ void CG_EntityEvent( centity_t *cent, vec3_t position ) {
|
||||||
CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD, IMPACTSOUND_METAL);
|
CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD, IMPACTSOUND_METAL);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case EV_BULLET_HIT_GLASS:
|
||||||
|
DEBUGNAME("EV_BULLET_HIT_GLASS");
|
||||||
|
ByteToDir( es->eventParm, dir );
|
||||||
|
CG_Bullet( es->pos.trBase, es->otherEntityNum, dir, qfalse, ENTITYNUM_WORLD, IMPACTSOUND_GLASS);
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
case EV_BULLET_HIT_KEVLAR:
|
case EV_BULLET_HIT_KEVLAR:
|
||||||
DEBUGNAME("EV_BULLET_HIT_KEVLAR");
|
DEBUGNAME("EV_BULLET_HIT_KEVLAR");
|
||||||
ByteToDir( es->eventParm, dir );
|
ByteToDir( es->eventParm, dir );
|
||||||
|
|
|
@ -117,7 +117,9 @@ typedef enum {
|
||||||
typedef enum {
|
typedef enum {
|
||||||
IMPACTSOUND_DEFAULT,
|
IMPACTSOUND_DEFAULT,
|
||||||
IMPACTSOUND_METAL,
|
IMPACTSOUND_METAL,
|
||||||
IMPACTSOUND_FLESH
|
IMPACTSOUND_FLESH,
|
||||||
|
// rq3 onwards
|
||||||
|
IMPACTSOUND_GLASS
|
||||||
} impactSound_t;
|
} impactSound_t;
|
||||||
|
|
||||||
|
|
||||||
|
@ -399,15 +401,24 @@ typedef struct {
|
||||||
// Elder: maximum sizes
|
// Elder: maximum sizes
|
||||||
#define MAX_RELOAD_SOUNDS 5
|
#define MAX_RELOAD_SOUNDS 5
|
||||||
#define MAX_OTHER_SOUNDS 5
|
#define MAX_OTHER_SOUNDS 5
|
||||||
// Circular, singly-linked list
|
|
||||||
|
#define MAX_ANIM_SOUNDS 16
|
||||||
|
// Singly-linked list
|
||||||
|
|
||||||
struct sfxSyncInfo_s {
|
struct sfxSyncInfo_s {
|
||||||
int frame;
|
int frame;
|
||||||
sfxHandle_t sound;
|
sfxHandle_t sound;
|
||||||
struct sfxSyncInfo_s *next;
|
qboolean played;
|
||||||
|
//struct sfxSyncInfo_s *next;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct sfxSyncInfo_s sfxSyncInfo_t;
|
typedef struct sfxSyncInfo_s sfxSyncInfo_t;
|
||||||
|
|
||||||
|
typedef struct sfxWeapTiming_s {
|
||||||
|
int numFrames;
|
||||||
|
sfxSyncInfo_t sfxInfo[MAX_ANIM_SOUNDS];
|
||||||
|
} sfxWeapTiming_t;
|
||||||
|
|
||||||
|
|
||||||
// each WP_* weapon enum has an associated weaponInfo_t
|
// each WP_* weapon enum has an associated weaponInfo_t
|
||||||
// that contains media references necessary to present the
|
// that contains media references necessary to present the
|
||||||
|
@ -448,15 +459,18 @@ typedef struct weaponInfo_s {
|
||||||
float trailRadius;
|
float trailRadius;
|
||||||
float wiTrailTime;
|
float wiTrailTime;
|
||||||
|
|
||||||
|
|
||||||
sfxHandle_t readySound;
|
sfxHandle_t readySound;
|
||||||
sfxHandle_t firingSound;
|
sfxHandle_t firingSound;
|
||||||
|
|
||||||
|
sfxWeapTiming_t animationSounds[MAX_ANIM_SOUNDS];
|
||||||
// Elder: sounds to queue
|
// Elder: sounds to queue
|
||||||
|
/*
|
||||||
sfxSyncInfo_t activateSound[2]; // last one is an endpoint node
|
sfxSyncInfo_t activateSound[2]; // last one is an endpoint node
|
||||||
sfxSyncInfo_t disarmSound[2]; // last one is an endpoint node
|
sfxSyncInfo_t disarmSound[2]; // last one is an endpoint node
|
||||||
sfxSyncInfo_t reloadSounds[MAX_RELOAD_SOUNDS];
|
sfxSyncInfo_t reloadSounds[MAX_RELOAD_SOUNDS];
|
||||||
sfxSyncInfo_t otherSounds[MAX_OTHER_SOUNDS];
|
sfxSyncInfo_t otherSounds[MAX_OTHER_SOUNDS];
|
||||||
|
*/
|
||||||
// Deprecated
|
// Deprecated
|
||||||
sfxHandle_t reloadSound1; // Elder: for various reload stages such as
|
sfxHandle_t reloadSound1; // Elder: for various reload stages such as
|
||||||
sfxHandle_t reloadSound2; // Clip in, clip out, sliding, sliding bolt,
|
sfxHandle_t reloadSound2; // Clip in, clip out, sliding, sliding bolt,
|
||||||
|
@ -528,6 +542,8 @@ typedef struct {
|
||||||
// is rendering at.
|
// is rendering at.
|
||||||
int oldTime; // time at last frame, used for missile trails and prediction checking
|
int oldTime; // time at last frame, used for missile trails and prediction checking
|
||||||
|
|
||||||
|
int cvarCheckTime; // Elder: used for cvar cheat interval cycling
|
||||||
|
|
||||||
int physicsTime; // either cg.snap->time or cg.nextSnap->time
|
int physicsTime; // either cg.snap->time or cg.nextSnap->time
|
||||||
|
|
||||||
int timelimitWarnings; // 5 min, 1 min, overtime
|
int timelimitWarnings; // 5 min, 1 min, overtime
|
||||||
|
@ -668,7 +684,6 @@ typedef struct {
|
||||||
//Elder: added for alpha pain blend
|
//Elder: added for alpha pain blend
|
||||||
int rq3_trueDamage; //Q3 doesn't hold the actual damage amount in cg.damageValue
|
int rq3_trueDamage; //Q3 doesn't hold the actual damage amount in cg.damageValue
|
||||||
float rq3_blendTime; //How long we take to fade out
|
float rq3_blendTime; //How long we take to fade out
|
||||||
qboolean rq3_reloadDown; //Flag to check if reload is pressed
|
|
||||||
|
|
||||||
// status bar head
|
// status bar head
|
||||||
float headYaw;
|
float headYaw;
|
||||||
|
@ -714,7 +729,8 @@ typedef struct {
|
||||||
qboolean rq3_irvision; // Elder: enabled IR vision
|
qboolean rq3_irvision; // Elder: enabled IR vision
|
||||||
int akimboFlash; // Alternate between two tags for flash (0 or 1)
|
int akimboFlash; // Alternate between two tags for flash (0 or 1)
|
||||||
|
|
||||||
sfxSyncInfo_t *curSyncSound; // Shifts after a sound is played
|
sfxSyncInfo_t curSyncSound; // Shifts after a sound is played
|
||||||
|
|
||||||
|
|
||||||
} cg_t;
|
} cg_t;
|
||||||
|
|
||||||
|
@ -871,6 +887,7 @@ typedef struct {
|
||||||
|
|
||||||
// Elder: rq3 marks
|
// Elder: rq3 marks
|
||||||
qhandle_t slashMarkShader;
|
qhandle_t slashMarkShader;
|
||||||
|
qhandle_t glassMarkShader;
|
||||||
|
|
||||||
// powerup shaders
|
// powerup shaders
|
||||||
qhandle_t quadShader;
|
qhandle_t quadShader;
|
||||||
|
@ -975,6 +992,10 @@ typedef struct {
|
||||||
sfxHandle_t sfx_metalric1;
|
sfxHandle_t sfx_metalric1;
|
||||||
sfxHandle_t sfx_metalric2;
|
sfxHandle_t sfx_metalric2;
|
||||||
sfxHandle_t sfx_metalric3;
|
sfxHandle_t sfx_metalric3;
|
||||||
|
// Elder: Glass ricochet sounds
|
||||||
|
sfxHandle_t sfx_glassric1;
|
||||||
|
sfxHandle_t sfx_glassric2;
|
||||||
|
sfxHandle_t sfx_glassric3;
|
||||||
|
|
||||||
sfxHandle_t sfx_railg;
|
sfxHandle_t sfx_railg;
|
||||||
sfxHandle_t sfx_rockexp;
|
sfxHandle_t sfx_rockexp;
|
||||||
|
@ -1306,6 +1327,11 @@ extern vmCvar_t cg_RQ3_ssgColorR;
|
||||||
extern vmCvar_t cg_RQ3_ssgColorG;
|
extern vmCvar_t cg_RQ3_ssgColorG;
|
||||||
extern vmCvar_t cg_RQ3_ssgColorB;
|
extern vmCvar_t cg_RQ3_ssgColorB;
|
||||||
extern vmCvar_t cg_RQ3_ssgColorA;
|
extern vmCvar_t cg_RQ3_ssgColorA;
|
||||||
|
//Elder: SSG unique sensitivities
|
||||||
|
extern vmCvar_t cg_RQ3_ssgSensitivityAuto;
|
||||||
|
extern vmCvar_t cg_RQ3_ssgSensitivity2x;
|
||||||
|
extern vmCvar_t cg_RQ3_ssgSensitivity4x;
|
||||||
|
extern vmCvar_t cg_RQ3_ssgSensitivity6x;
|
||||||
//Elder: smoke puffs, sparks, etc.
|
//Elder: smoke puffs, sparks, etc.
|
||||||
extern vmCvar_t cg_RQ3_impactEffects;
|
extern vmCvar_t cg_RQ3_impactEffects;
|
||||||
//Elder: toggle client-side laser drawing
|
//Elder: toggle client-side laser drawing
|
||||||
|
|
|
@ -151,6 +151,11 @@ vmCvar_t cg_RQ3_ssgColorR;
|
||||||
vmCvar_t cg_RQ3_ssgColorG;
|
vmCvar_t cg_RQ3_ssgColorG;
|
||||||
vmCvar_t cg_RQ3_ssgColorB;
|
vmCvar_t cg_RQ3_ssgColorB;
|
||||||
vmCvar_t cg_RQ3_ssgColorA;
|
vmCvar_t cg_RQ3_ssgColorA;
|
||||||
|
//Elder: SSG unique sensitivities
|
||||||
|
vmCvar_t cg_RQ3_ssgSensitivityAuto;
|
||||||
|
vmCvar_t cg_RQ3_ssgSensitivity2x;
|
||||||
|
vmCvar_t cg_RQ3_ssgSensitivity4x;
|
||||||
|
vmCvar_t cg_RQ3_ssgSensitivity6x;
|
||||||
//Elder: smoke puffs, sparks, etc.
|
//Elder: smoke puffs, sparks, etc.
|
||||||
vmCvar_t cg_RQ3_impactEffects;
|
vmCvar_t cg_RQ3_impactEffects;
|
||||||
//Elder: toggle client-side laser drawing
|
//Elder: toggle client-side laser drawing
|
||||||
|
@ -324,6 +329,10 @@ static cvarTable_t cvarTable[] = { // bk001129
|
||||||
{ &cg_RQ3_flash, "cg_RQ3_flash", "1", CVAR_ARCHIVE },
|
{ &cg_RQ3_flash, "cg_RQ3_flash", "1", CVAR_ARCHIVE },
|
||||||
{ &cg_RQ3_painblend, "cg_RQ3_painblend", "1", CVAR_ARCHIVE },
|
{ &cg_RQ3_painblend, "cg_RQ3_painblend", "1", CVAR_ARCHIVE },
|
||||||
{ &cg_RQ3_ssgZoomAssist, "cg_RQ3_ssgZoomAssist", "1", CVAR_ARCHIVE },
|
{ &cg_RQ3_ssgZoomAssist, "cg_RQ3_ssgZoomAssist", "1", CVAR_ARCHIVE },
|
||||||
|
{ &cg_RQ3_ssgSensitivityAuto, "cg_RQ3_ssgSensitivityAuto", "1", CVAR_ARCHIVE },
|
||||||
|
{ &cg_RQ3_ssgSensitivity2x, "cg_RQ3_ssgSensitivity2x", "0.4", CVAR_ARCHIVE },
|
||||||
|
{ &cg_RQ3_ssgSensitivity4x, "cg_RQ3_ssgSensitivity4x", "0.2", CVAR_ARCHIVE },
|
||||||
|
{ &cg_RQ3_ssgSensitivity6x, "cg_RQ3_ssgSensitivity6x", "0.1", CVAR_ARCHIVE },
|
||||||
{ &cg_RQ3_ssgColorR, "cg_RQ3_ssgColorR", "0.0", CVAR_ARCHIVE },
|
{ &cg_RQ3_ssgColorR, "cg_RQ3_ssgColorR", "0.0", CVAR_ARCHIVE },
|
||||||
{ &cg_RQ3_ssgColorG, "cg_RQ3_ssgColorG", "1.0", CVAR_ARCHIVE },
|
{ &cg_RQ3_ssgColorG, "cg_RQ3_ssgColorG", "1.0", CVAR_ARCHIVE },
|
||||||
{ &cg_RQ3_ssgColorB, "cg_RQ3_ssgColorB", "0.0", CVAR_ARCHIVE },
|
{ &cg_RQ3_ssgColorB, "cg_RQ3_ssgColorB", "0.0", CVAR_ARCHIVE },
|
||||||
|
@ -791,6 +800,9 @@ static void CG_RegisterSounds( void ) {
|
||||||
cgs.media.sfx_metalric1 = trap_S_RegisterSound ("sound/world/impactmetal01.wav", qfalse);
|
cgs.media.sfx_metalric1 = trap_S_RegisterSound ("sound/world/impactmetal01.wav", qfalse);
|
||||||
cgs.media.sfx_metalric2 = trap_S_RegisterSound ("sound/world/impactmetal02.wav", qfalse);
|
cgs.media.sfx_metalric2 = trap_S_RegisterSound ("sound/world/impactmetal02.wav", qfalse);
|
||||||
cgs.media.sfx_metalric3 = trap_S_RegisterSound ("sound/world/impactmetal03.wav", qfalse);
|
cgs.media.sfx_metalric3 = trap_S_RegisterSound ("sound/world/impactmetal03.wav", qfalse);
|
||||||
|
cgs.media.sfx_glassric1 = trap_S_RegisterSound ("sound/world/impactglass01.wav", qfalse);
|
||||||
|
cgs.media.sfx_glassric2 = trap_S_RegisterSound ("sound/world/impactglass02.wav", qfalse);
|
||||||
|
cgs.media.sfx_glassric3 = trap_S_RegisterSound ("sound/world/impactglass03.wav", qfalse);
|
||||||
|
|
||||||
cgs.media.sfx_railg = trap_S_RegisterSound ("sound/weapons/railgun/railgf1a.wav", qfalse);
|
cgs.media.sfx_railg = trap_S_RegisterSound ("sound/weapons/railgun/railgf1a.wav", qfalse);
|
||||||
cgs.media.sfx_rockexp = trap_S_RegisterSound ("sound/weapons/rocket/rocklx1a.wav", qfalse);
|
cgs.media.sfx_rockexp = trap_S_RegisterSound ("sound/weapons/rocket/rocklx1a.wav", qfalse);
|
||||||
|
@ -1157,6 +1169,7 @@ static void CG_RegisterGraphics( void ) {
|
||||||
cgs.media.bloodMarkShader = trap_R_RegisterShader( "bloodMark" );
|
cgs.media.bloodMarkShader = trap_R_RegisterShader( "bloodMark" );
|
||||||
// Elder: added
|
// Elder: added
|
||||||
cgs.media.slashMarkShader = trap_R_RegisterShader( "gfx/damage/slash_mrk" );
|
cgs.media.slashMarkShader = trap_R_RegisterShader( "gfx/damage/slash_mrk" );
|
||||||
|
cgs.media.glassMarkShader = trap_R_RegisterShader( "gfx/damage/glass_mrk" );
|
||||||
|
|
||||||
// register the inline models
|
// register the inline models
|
||||||
cgs.numInlineModels = trap_CM_NumInlineModels();
|
cgs.numInlineModels = trap_CM_NumInlineModels();
|
||||||
|
|
|
@ -1329,7 +1329,7 @@ void CG_WeaponAnimation( centity_t *cent, int *weaponOld, int *weapon, float *we
|
||||||
CG_RunLerpFrame( ci, ¢->pe.weapon, cent->currentState.generic1, 1, qtrue );
|
CG_RunLerpFrame( ci, ¢->pe.weapon, cent->currentState.generic1, 1, qtrue );
|
||||||
|
|
||||||
// QUARANTINE - Debug - Animations
|
// QUARANTINE - Debug - Animations
|
||||||
#if 1
|
#if 0
|
||||||
if (cg_debugAnim.integer)
|
if (cg_debugAnim.integer)
|
||||||
if(cent->pe.weapon.oldFrame || cent->pe.weapon.frame || cent->pe.weapon.backlerp) {
|
if(cent->pe.weapon.oldFrame || cent->pe.weapon.frame || cent->pe.weapon.backlerp) {
|
||||||
CG_Printf("weaponOld: %i weaponFrame: %i weaponBack: %i\n",
|
CG_Printf("weaponOld: %i weaponFrame: %i weaponBack: %i\n",
|
||||||
|
|
|
@ -232,8 +232,8 @@ A respawn happened this snapshot
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
void CG_Respawn( void ) {
|
void CG_Respawn( void ) {
|
||||||
int i=0;
|
//int i=0;
|
||||||
float cvar_val;
|
//float cvar_val;
|
||||||
// no error decay on player movement
|
// no error decay on player movement
|
||||||
cg.thisFrameTeleport = qtrue;
|
cg.thisFrameTeleport = qtrue;
|
||||||
|
|
||||||
|
@ -246,9 +246,6 @@ void CG_Respawn( void ) {
|
||||||
//Elder: added to reset zoom stuff LOCALLY
|
//Elder: added to reset zoom stuff LOCALLY
|
||||||
CG_RQ3_Zoom1x();
|
CG_RQ3_Zoom1x();
|
||||||
|
|
||||||
cg.curSyncSound = 0;
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern char *eventnames[];
|
extern char *eventnames[];
|
||||||
|
@ -578,10 +575,12 @@ void CG_TransitionPlayerState( playerState_t *ps, playerState_t *ops ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Elder: reset sync sounds
|
// Elder: reset sync sounds
|
||||||
|
/*
|
||||||
if ( ps->weaponstate != ops->weaponstate )
|
if ( ps->weaponstate != ops->weaponstate )
|
||||||
{
|
{
|
||||||
cg.curSyncSound = 0;
|
cg.curSyncSound = 0;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
//Elder: grenade message
|
//Elder: grenade message
|
||||||
if (ps->weapon == WP_GRENADE &&
|
if (ps->weapon == WP_GRENADE &&
|
||||||
|
|
|
@ -573,6 +573,8 @@ static int CG_CalcFov( void ) {
|
||||||
CG_RQ3_SyncZoom();
|
CG_RQ3_SyncZoom();
|
||||||
|
|
||||||
//SSG3000 zoom handling
|
//SSG3000 zoom handling
|
||||||
|
/*
|
||||||
|
// old code
|
||||||
if ( cg.snap->ps.weapon == WP_SSG3000)
|
if ( cg.snap->ps.weapon == WP_SSG3000)
|
||||||
{
|
{
|
||||||
//switching zoom
|
//switching zoom
|
||||||
|
@ -700,6 +702,140 @@ static int CG_CalcFov( void ) {
|
||||||
fov_x = fov_x + f * ( zoomFov - fov_x );
|
fov_x = fov_x + f * ( zoomFov - fov_x );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
if ( cg.snap->ps.weapon == WP_SSG3000)
|
||||||
|
{
|
||||||
|
//switching zoom
|
||||||
|
if (cg.zoomLevel != cg.lastZoomLevel)
|
||||||
|
{
|
||||||
|
fov_x = CG_RQ3_GetLastFov();
|
||||||
|
//Get desired zoom FOV based on current FOV
|
||||||
|
if (cg.zoomLevel == 0)
|
||||||
|
{
|
||||||
|
zoomFov = 90;
|
||||||
|
cg.zoomed = qfalse;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
switch ((int)fov_x)
|
||||||
|
{
|
||||||
|
case 20:
|
||||||
|
zoomFov = 10;
|
||||||
|
cg.zoomed = qtrue;
|
||||||
|
break;
|
||||||
|
case 45:
|
||||||
|
zoomFov = 20;
|
||||||
|
cg.zoomed = qtrue;
|
||||||
|
break;
|
||||||
|
case 90:
|
||||||
|
zoomFov = 45;
|
||||||
|
cg.zoomed = qtrue;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
default:
|
||||||
|
zoomFov = 90;
|
||||||
|
cg.zoomed = qfalse;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
f = ( cg.time - cg.zoomTime ) / (float)ZOOM_TIME;
|
||||||
|
if ( f > 1.0 || cg.zoomFirstReturn == ZOOM_OUT)
|
||||||
|
{
|
||||||
|
//finished zoom switch
|
||||||
|
cg.lastZoomLevel = cg.zoomLevel;
|
||||||
|
fov_x = zoomFov;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fov_x = fov_x + f * ( zoomFov - fov_x );
|
||||||
|
}
|
||||||
|
//Idle state
|
||||||
|
else if (cg.snap->ps.weaponTime == 0 && cg.snap->ps.weaponstate == WEAPON_READY)
|
||||||
|
{
|
||||||
|
fov_x = CG_RQ3_GetFov();
|
||||||
|
if (fov_x == 90)
|
||||||
|
cg.zoomed = qfalse;
|
||||||
|
else
|
||||||
|
cg.zoomed = qtrue;
|
||||||
|
|
||||||
|
if (cg.lowAmmoWarning)
|
||||||
|
cg.zoomFirstReturn = ZOOM_OUTOFAMMO;
|
||||||
|
else
|
||||||
|
cg.zoomFirstReturn = ZOOM_IDLE;
|
||||||
|
}
|
||||||
|
//Zoom back in after a reload or fire
|
||||||
|
else if (cg.snap->ps.weaponTime < ZOOM_TIME &&
|
||||||
|
!(cg.snap->ps.weaponstate == WEAPON_DROPPING ||
|
||||||
|
cg.snap->ps.weaponstate == WEAPON_RAISING ) &&
|
||||||
|
cg.snap->ps.stats[STAT_RELOADTIME] < ZOOM_TIME &&
|
||||||
|
!(cg.snap->ps.stats[STAT_RQ3] & RQ3_FASTRELOADS))
|
||||||
|
{
|
||||||
|
if (cg.zoomFirstReturn == ZOOM_OUT)
|
||||||
|
{
|
||||||
|
cg.zoomTime = cg.time;
|
||||||
|
if (cg.lowAmmoWarning)
|
||||||
|
cg.zoomFirstReturn = ZOOM_OUTOFAMMO;
|
||||||
|
else
|
||||||
|
cg.zoomFirstReturn = ZOOM_IDLE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fov_x = 90;
|
||||||
|
zoomFov = CG_RQ3_GetFov();
|
||||||
|
|
||||||
|
if (zoomFov == 90)
|
||||||
|
cg.zoomed = qfalse;
|
||||||
|
else
|
||||||
|
cg.zoomed = qtrue;
|
||||||
|
|
||||||
|
f = ( cg.time - cg.zoomTime ) / (float)ZOOM_TIME;
|
||||||
|
if ( f > 1.0 ) //|| cg.zoomFirstReturn == ZOOM_OUTOFAMMO)
|
||||||
|
fov_x = zoomFov;
|
||||||
|
else
|
||||||
|
fov_x = fov_x + f * ( zoomFov - fov_x );
|
||||||
|
//fov_x = zoomFov + f * ( fov_x - zoomFov );
|
||||||
|
}
|
||||||
|
//first time after a shot, reload, or weapon switch - zoom out
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fov_x = CG_RQ3_GetFov();
|
||||||
|
|
||||||
|
if (cg.snap->ps.weaponstate == WEAPON_RELOADING &&
|
||||||
|
cg.zoomFirstReturn != ZOOM_OUT)
|
||||||
|
{
|
||||||
|
cg.zoomTime = cg.time;
|
||||||
|
cg.zoomFirstReturn = ZOOM_OUT;
|
||||||
|
}
|
||||||
|
else if (cg.zoomFirstReturn == ZOOM_IDLE &&
|
||||||
|
!(cg.snap->ps.weaponstate == WEAPON_DROPPING || cg.snap->ps.weaponstate == WEAPON_RAISING))
|
||||||
|
{
|
||||||
|
cg.zoomTime = cg.time;
|
||||||
|
cg.zoomFirstReturn = ZOOM_OUT;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (cg.zoomFirstReturn == ZOOM_OUTOFAMMO)
|
||||||
|
{
|
||||||
|
zoomFov = fov_x;
|
||||||
|
f = 1.0f; // don't bother zooming out
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
zoomFov = 90;
|
||||||
|
f = ( cg.time - cg.zoomTime ) / (float)ZOOM_TIME;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( f > 1.0 )
|
||||||
|
{
|
||||||
|
fov_x = zoomFov;
|
||||||
|
if (fov_x == 90)
|
||||||
|
cg.zoomed = qfalse;
|
||||||
|
else
|
||||||
|
cg.zoomed = qtrue;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fov_x = fov_x + f * ( zoomFov - fov_x );
|
||||||
|
}
|
||||||
|
}
|
||||||
//Using anything but the SSG3000
|
//Using anything but the SSG3000
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -731,11 +867,27 @@ static int CG_CalcFov( void ) {
|
||||||
cg.refdef.fov_y = fov_y;
|
cg.refdef.fov_y = fov_y;
|
||||||
|
|
||||||
|
|
||||||
// user-defined sensitivities!
|
|
||||||
if ( !cg.zoomed ) {
|
if ( !cg.zoomed ) {
|
||||||
cg.zoomSensitivity = 1;
|
cg.zoomSensitivity = 1;
|
||||||
} else {
|
} else {
|
||||||
|
if ( cg_RQ3_ssgSensitivityAuto.integer )
|
||||||
cg.zoomSensitivity = cg.refdef.fov_y / 75.0;
|
cg.zoomSensitivity = cg.refdef.fov_y / 75.0;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Use user-defined sensitivites
|
||||||
|
switch ( (int)fov_x )
|
||||||
|
{
|
||||||
|
case 45:
|
||||||
|
cg.zoomSensitivity = cg_RQ3_ssgSensitivity2x.value;
|
||||||
|
break;
|
||||||
|
case 20:
|
||||||
|
cg.zoomSensitivity = cg_RQ3_ssgSensitivity4x.value;
|
||||||
|
break;
|
||||||
|
case 10:
|
||||||
|
cg.zoomSensitivity = cg_RQ3_ssgSensitivity6x.value;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return inwater;
|
return inwater;
|
||||||
|
@ -1068,8 +1220,12 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo
|
||||||
CG_Printf( "cg.clientFrame:%i\n", cg.clientFrame );
|
CG_Printf( "cg.clientFrame:%i\n", cg.clientFrame );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((cg.time - cgs.levelStartTime) / 10000 == 1)
|
//if ((cg.time - cgs.levelStartTime) / 10000 == 1)
|
||||||
|
// Elder: working timer implementation
|
||||||
|
if (cg.time > cg.cvarCheckTime)
|
||||||
{
|
{
|
||||||
|
//cg.cvarCheckTime = cg.time + 5000 + rand() % 6000;
|
||||||
|
cg.cvarCheckTime = cg.time + 10000;
|
||||||
//Blaze: Check for invalid video settings.
|
//Blaze: Check for invalid video settings.
|
||||||
for(i=0;i<30;i++)
|
for(i=0;i<30;i++)
|
||||||
{
|
{
|
||||||
|
@ -1079,7 +1235,7 @@ void CG_DrawActiveFrame( int serverTime, stereoFrame_t stereoView, qboolean demo
|
||||||
//CG_Printf("%s is set to %f\n",cheats[i].cvar, cvar_val);
|
//CG_Printf("%s is set to %f\n",cheats[i].cvar, cvar_val);
|
||||||
if ( cvar_val < cheats[i].low || cvar_val > cheats[i].high)
|
if ( cvar_val < cheats[i].low || cvar_val > cheats[i].high)
|
||||||
{
|
{
|
||||||
CG_Printf("This server restricts %s to be between %f and %f\n",cheats[i].cvar,cheats[i].low, cheats[i].high);
|
CG_Printf("This server restricts %s to be between %1.11f and %1.11f\n",cheats[i].cvar,cheats[i].low, cheats[i].high);
|
||||||
trap_SendConsoleCommand(va("disconnect\n"));
|
trap_SendConsoleCommand(va("disconnect\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,16 +16,17 @@ static qboolean CG_ParseWeaponSoundFile( const char *filename, weaponInfo_t *wea
|
||||||
int len;
|
int len;
|
||||||
int i;
|
int i;
|
||||||
char *token;
|
char *token;
|
||||||
float fps;
|
// float fps;
|
||||||
int skip; // Elder: What's this for?
|
int skip; // Elder: What's this for?
|
||||||
char text[20000];
|
char text[20000];
|
||||||
fileHandle_t f;
|
fileHandle_t f;
|
||||||
animation_t *animations;
|
//animation_t *animations;
|
||||||
sfxSyncInfo_t *reloadSounds;
|
//sfxSyncInfo_t *reloadSounds;
|
||||||
|
sfxWeapTiming_t *weapTiming;
|
||||||
|
|
||||||
|
//animations = weapon->animations;
|
||||||
animations = weapon->animations;
|
//reloadSounds = weapon->reloadSounds;
|
||||||
reloadSounds = weapon->reloadSounds;
|
weapTiming = weapon->animationSounds;
|
||||||
|
|
||||||
// load the file
|
// load the file
|
||||||
len = trap_FS_FOpenFile( filename, &f, FS_READ );
|
len = trap_FS_FOpenFile( filename, &f, FS_READ );
|
||||||
|
@ -45,6 +46,38 @@ static qboolean CG_ParseWeaponSoundFile( const char *filename, weaponInfo_t *wea
|
||||||
// Elder: uhh, what was this for?
|
// Elder: uhh, what was this for?
|
||||||
skip = 0; // quite the compiler warning
|
skip = 0; // quite the compiler warning
|
||||||
|
|
||||||
|
for ( i = 0; i < MAX_ANIM_SOUNDS; i++ )
|
||||||
|
{
|
||||||
|
// Grab frame number
|
||||||
|
token = COM_Parse( &text_p );
|
||||||
|
if ( !token ) break;
|
||||||
|
// Add it to the array
|
||||||
|
if ( atoi( token ) )
|
||||||
|
{
|
||||||
|
Com_Printf("(%i): %s\n", i, token);
|
||||||
|
weapTiming->sfxInfo[i].frame = atoi(token);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
break;
|
||||||
|
//return qfalse;
|
||||||
|
|
||||||
|
// Grab sound file path
|
||||||
|
token = COM_Parse( &text_p );
|
||||||
|
if ( !token ) break;
|
||||||
|
//return qfalse;
|
||||||
|
|
||||||
|
Com_Printf("(%i): %s\n", i, token);
|
||||||
|
weapTiming->sfxInfo[i].sound = trap_S_RegisterSound( token, qfalse );
|
||||||
|
}
|
||||||
|
|
||||||
|
// Store total number
|
||||||
|
weapTiming->numFrames = i;
|
||||||
|
Com_Printf("Total Frames: %i\n", weapTiming->numFrames);
|
||||||
|
|
||||||
|
return qtrue;
|
||||||
|
|
||||||
|
// Old crap code
|
||||||
|
/*
|
||||||
// read information for each phase of a reload
|
// read information for each phase of a reload
|
||||||
for ( i = 0 ; i < MAX_RELOAD_SOUNDS ; i++ )
|
for ( i = 0 ; i < MAX_RELOAD_SOUNDS ; i++ )
|
||||||
{
|
{
|
||||||
|
@ -130,6 +163,7 @@ static qboolean CG_ParseWeaponSoundFile( const char *filename, weaponInfo_t *wea
|
||||||
}
|
}
|
||||||
|
|
||||||
return qtrue;
|
return qtrue;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [QUARANTINE] - Weapon Animations - CG_ParseWeaponAnimFile
|
/* [QUARANTINE] - Weapon Animations - CG_ParseWeaponAnimFile
|
||||||
|
@ -890,9 +924,6 @@ 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->ejectBrassFunc = CG_MachineGunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
||||||
//weaponInfo->reloadSound1 = trap_S_RegisterSound( "sound/weapons/mk23/mk23out.wav", qfalse );
|
|
||||||
//weaponInfo->reloadSound2 = trap_S_RegisterSound( "sound/weapons/mk23/mk23in.wav", qfalse );
|
|
||||||
//weaponInfo->reloadSound3 = trap_S_RegisterSound( "sound/weapons/mk23/mk23slide.wav", qfalse );
|
|
||||||
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
||||||
|
|
||||||
// Load the animation information
|
// Load the animation information
|
||||||
|
@ -909,17 +940,6 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
if ( !CG_ParseWeaponSoundFile(filename, weaponInfo) ) {
|
if ( !CG_ParseWeaponSoundFile(filename, weaponInfo) ) {
|
||||||
Com_Printf("Failed to load weapon sound file %s\n", filename);
|
Com_Printf("Failed to load weapon sound file %s\n", filename);
|
||||||
}
|
}
|
||||||
else {
|
|
||||||
// Temporarily print the info
|
|
||||||
int k;
|
|
||||||
Com_Printf("Sync Sound Status:\n");
|
|
||||||
for (k = 0; k < MAX_RELOAD_SOUNDS; k++)
|
|
||||||
{
|
|
||||||
Com_Printf("%i: Frame %i Has sfxHandle: %s\n",
|
|
||||||
k, weaponInfo->reloadSounds[k].frame,
|
|
||||||
weaponInfo->reloadSounds[k].sound? "yes":"no");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -951,8 +971,6 @@ 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/m4/m4fire.wav", qfalse );
|
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/m4/m4fire.wav", qfalse );
|
||||||
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
||||||
//weaponInfo->reloadSound1 = trap_S_RegisterSound( "sound/weapons/m4/m4out.wav", qfalse );
|
|
||||||
//weaponInfo->reloadSound3 = trap_S_RegisterSound( "sound/weapons/m4/m4in.wav", qfalse );
|
|
||||||
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
||||||
|
|
||||||
Com_sprintf( filename, sizeof(filename), "models/weapons2/m4/animation.cfg" );
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/m4/animation.cfg" );
|
||||||
|
@ -969,6 +987,7 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
} else {
|
} else {
|
||||||
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_SSG3000:
|
case WP_SSG3000:
|
||||||
|
@ -976,14 +995,21 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
MAKERGB( weaponInfo->flashDlightColor, 1, 0.5f, 0 );
|
MAKERGB( weaponInfo->flashDlightColor, 1, 0.5f, 0 );
|
||||||
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/ssg3000/ssgfire.wav", qfalse );
|
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/ssg3000/ssgfire.wav", qfalse );
|
||||||
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
||||||
weaponInfo->reloadSound1 = trap_S_RegisterSound( "sound/weapons/ssg3000/ssgbolt.wav", qfalse );
|
|
||||||
weaponInfo->reloadSound2 = trap_S_RegisterSound( "sound/weapons/ssg3000/ssgin.wav", qfalse );
|
|
||||||
weaponInfo->reloadSound3 = trap_S_RegisterSound( "sound/weapons/ssg3000/ssgbolt.wav", qfalse );
|
|
||||||
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
||||||
Com_sprintf( filename, sizeof(filename), "models/weapons2/ssg3000/animation.cfg" );
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/ssg3000/animation.cfg" );
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Load sound information -- ALWAYS DO THIS AFTER THE ANIMATION
|
||||||
|
if (weapAnimLoad) {
|
||||||
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/ssg3000/sound.cfg" );
|
||||||
|
if ( !CG_ParseWeaponSoundFile(filename, weaponInfo) ) {
|
||||||
|
Com_Printf("Failed to load weapon sound file %s\n", filename);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_MP5:
|
case WP_MP5:
|
||||||
|
@ -991,9 +1017,9 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
MAKERGB( weaponInfo->flashDlightColor, 1, 0.75f, 0 );
|
MAKERGB( weaponInfo->flashDlightColor, 1, 0.75f, 0 );
|
||||||
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/mp5/mp5fire.wav", qfalse );
|
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/mp5/mp5fire.wav", qfalse );
|
||||||
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
||||||
weaponInfo->reloadSound1 = trap_S_RegisterSound( "sound/weapons/mp5/mp5out.wav", qfalse );
|
//weaponInfo->reloadSound1 = trap_S_RegisterSound( "sound/weapons/mp5/mp5out.wav", qfalse );
|
||||||
weaponInfo->reloadSound2 = trap_S_RegisterSound( "sound/weapons/mp5/mp5in.wav", qfalse );
|
//weaponInfo->reloadSound2 = trap_S_RegisterSound( "sound/weapons/mp5/mp5in.wav", qfalse );
|
||||||
weaponInfo->reloadSound3 = trap_S_RegisterSound( "sound/weapons/mp5/mp5slide.wav", qfalse );
|
//weaponInfo->reloadSound3 = trap_S_RegisterSound( "sound/weapons/mp5/mp5slide.wav", qfalse );
|
||||||
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1004,25 +1030,44 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/handcannon/hcfire.wav", qfalse );
|
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/handcannon/hcfire.wav", qfalse );
|
||||||
weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass;
|
||||||
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
||||||
weaponInfo->reloadSound1 = trap_S_RegisterSound( "sound/weapons/handcannon/hcopen.wav", qfalse );
|
|
||||||
weaponInfo->reloadSound2 = trap_S_RegisterSound( "sound/weapons/handcannon/hcout.wav", qfalse );
|
|
||||||
weaponInfo->reloadSound3 = trap_S_RegisterSound( "sound/weapons/handcannon/hcclose.wav", qfalse );
|
|
||||||
|
|
||||||
Com_sprintf( filename, sizeof(filename), "models/weapons2/handcannon/animation.cfg" );
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/handcannon/animation.cfg" );
|
||||||
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);
|
||||||
|
weapAnimLoad = qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (weapAnimLoad) {
|
||||||
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/handcannon/sound.cfg" );
|
||||||
|
if ( !CG_ParseWeaponSoundFile(filename, weaponInfo) ) {
|
||||||
|
Com_Printf("Failed to load weapon sound file %s\n", filename);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_M3:
|
case WP_M3:
|
||||||
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0 );
|
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0 );
|
||||||
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->reloadSound3 = trap_S_RegisterSound( "sound/weapons/m3/m3in.wav", qfalse );
|
|
||||||
weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_ShotgunEjectBrass;
|
||||||
|
|
||||||
Com_sprintf( filename, sizeof(filename), "models/weapons2/m3/animation.cfg" );
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/m3/animation.cfg" );
|
||||||
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);
|
||||||
|
weapAnimLoad = qfalse;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (weapAnimLoad) {
|
||||||
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/m3/sound.cfg" );
|
||||||
|
if ( !CG_ParseWeaponSoundFile(filename, weaponInfo) ) {
|
||||||
|
Com_Printf("Failed to load weapon sound file %s\n", filename);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_AKIMBO:
|
case WP_AKIMBO:
|
||||||
|
@ -1030,10 +1075,6 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0.5f );
|
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0.5f );
|
||||||
// Elder: no more pseudo-dual sound needed :)
|
// Elder: no more pseudo-dual sound needed :)
|
||||||
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/mk23/mk23fire.wav", qfalse );
|
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/mk23/mk23fire.wav", qfalse );
|
||||||
//Elder: changed to use pseudo-dual sound
|
|
||||||
//weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/akimbo/akimbofire.wav", qfalse );
|
|
||||||
//weaponInfo->flashSound[1] = trap_S_RegisterSound( "sound/weapons/akimbo/akimbofire.wav", qfalse );
|
|
||||||
|
|
||||||
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
|
||||||
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
|
||||||
Com_sprintf( filename, sizeof(filename), "models/weapons2/akimbo/animation.cfg" );
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/akimbo/animation.cfg" );
|
||||||
|
@ -1051,6 +1092,7 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
} else {
|
} else {
|
||||||
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WP_GRENADE:
|
case WP_GRENADE:
|
||||||
|
@ -1061,7 +1103,7 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
weaponInfo->wiTrailTime = 700;
|
weaponInfo->wiTrailTime = 700;
|
||||||
weaponInfo->trailRadius = 32;
|
weaponInfo->trailRadius = 32;
|
||||||
MAKERGB( weaponInfo->flashDlightColor, 1, 0.70f, 0 );
|
MAKERGB( weaponInfo->flashDlightColor, 1, 0.70f, 0 );
|
||||||
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/grenade/gren_throw.wav", qfalse );
|
//weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/grenade/gren_throw.wav", qfalse );
|
||||||
cgs.media.grenadeExplosionShader = trap_R_RegisterShader( "grenadeExplosion" );
|
cgs.media.grenadeExplosionShader = trap_R_RegisterShader( "grenadeExplosion" );
|
||||||
|
|
||||||
// Load the animation information
|
// Load the animation information
|
||||||
|
@ -1070,6 +1112,15 @@ void CG_RegisterWeapon( int weaponNum ) {
|
||||||
Com_Printf("Failed to load weapon animation file %s\n", filename);
|
Com_Printf("Failed to load weapon animation file %s\n", filename);
|
||||||
weapAnimLoad = qfalse;
|
weapAnimLoad = qfalse;
|
||||||
}
|
}
|
||||||
|
// Load sound information -- ALWAYS DO THIS AFTER THE ANIMATION
|
||||||
|
if (weapAnimLoad) {
|
||||||
|
Com_sprintf( filename, sizeof(filename), "models/weapons2/grenade/sound.cfg" );
|
||||||
|
if ( !CG_ParseWeaponSoundFile(filename, weaponInfo) ) {
|
||||||
|
Com_Printf("Failed to load weapon sound file %s\n", filename);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Com_Printf("Could not load sound.cfg because animation.cfg loading failed\n");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -1489,33 +1540,47 @@ void CG_AddPlayerWeapon( refEntity_t *parent, playerState_t *ps, centity_t *cent
|
||||||
// Temp hack because it isn't fully implemented
|
// Temp hack because it isn't fully implemented
|
||||||
if ( weapon->item->giTag == WP_PISTOL ||
|
if ( weapon->item->giTag == WP_PISTOL ||
|
||||||
weapon->item->giTag == WP_AKIMBO ||
|
weapon->item->giTag == WP_AKIMBO ||
|
||||||
weapon->item->giTag == WP_M4)
|
weapon->item->giTag == WP_M4 ||
|
||||||
|
weapon->item->giTag == WP_M3 ||
|
||||||
|
weapon->item->giTag == WP_HANDCANNON ||
|
||||||
|
weapon->item->giTag == WP_SSG3000 ||
|
||||||
|
weapon->item->giTag == WP_GRENADE)
|
||||||
{
|
{
|
||||||
if ( ps->weaponstate == WEAPON_RELOADING ) {
|
int i = 0;
|
||||||
if ( !cg.curSyncSound || cg.curSyncSound->frame == 0)
|
qboolean noSound = qfalse;
|
||||||
cg.curSyncSound = &weapon->reloadSounds[0];
|
|
||||||
|
while ( gun.frame != weapon->animationSounds->sfxInfo[i].frame )
|
||||||
|
{
|
||||||
|
if ( ++i == weapon->animationSounds->numFrames )
|
||||||
|
{
|
||||||
|
noSound = qtrue;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
else if ( ps->weaponstate == WEAPON_RAISING ) {
|
|
||||||
if ( !cg.curSyncSound || cg.curSyncSound->frame == 0)
|
|
||||||
cg.curSyncSound = &weapon->activateSound[0];
|
|
||||||
}
|
|
||||||
else if ( ps->weaponstate == WEAPON_DROPPING ) {
|
|
||||||
if ( !cg.curSyncSound || cg.curSyncSound->frame == 0)
|
|
||||||
cg.curSyncSound = &weapon->disarmSound[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cg.curSyncSound && cg.curSyncSound->frame == gun.frame) {
|
// reset the current sound
|
||||||
if ( cg.curSyncSound->sound ) {
|
if (cg.curSyncSound.played && cg.curSyncSound.frame != gun.frame)
|
||||||
|
cg.curSyncSound.played = qfalse;
|
||||||
|
|
||||||
|
if (!noSound)
|
||||||
|
{
|
||||||
|
// copy the struct to reset it
|
||||||
|
if (cg.curSyncSound.frame != gun.frame )
|
||||||
|
cg.curSyncSound = weapon->animationSounds->sfxInfo[i];
|
||||||
|
|
||||||
|
if (cg.curSyncSound.played == qfalse)
|
||||||
|
{
|
||||||
|
cg.curSyncSound.played = qtrue;
|
||||||
CG_Printf("Playing a timed sound (%i %i %1.1f)\n", gun.frame, gun.oldframe, gun.backlerp);
|
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 );
|
||||||
cg.curSyncSound = cg.curSyncSound->next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Elder: break off here so we still have weapon animations on bolt out
|
// Elder: break off here so we still have weapon animations on bolt out
|
||||||
if (cg.zoomed)
|
// Elder: added ps so we see SSG in third-person zoomed
|
||||||
|
if (cg.zoomed && ps)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CG_AddWeaponWithPowerups( &gun, cent->currentState.powerups );
|
CG_AddWeaponWithPowerups( &gun, cent->currentState.powerups );
|
||||||
|
@ -2018,9 +2083,11 @@ void CG_PrevWeapon_f( void ) {
|
||||||
|
|
||||||
//Elder: in the middle of firing, reloading or weapon-switching
|
//Elder: in the middle of firing, reloading or weapon-switching
|
||||||
//cg.snap->ps.weaponstate == WEAPON_RELOADING when it's in
|
//cg.snap->ps.weaponstate == WEAPON_RELOADING when it's in
|
||||||
|
/*
|
||||||
if (cg.snap->ps.weaponstate == WEAPON_RELOADING && cg.snap->ps.weaponTime > 0) {
|
if (cg.snap->ps.weaponstate == WEAPON_RELOADING && cg.snap->ps.weaponTime > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
//Elder: added
|
//Elder: added
|
||||||
//cg.zoomed = qfalse;
|
//cg.zoomed = qfalse;
|
||||||
|
@ -2089,9 +2156,11 @@ void CG_SpecialWeapon_f( void ) {
|
||||||
|
|
||||||
//Elder: in the middle of firing, reloading or weapon-switching
|
//Elder: in the middle of firing, reloading or weapon-switching
|
||||||
//cg.snap->ps.weaponstate == WEAPON_RELOADING when it's in
|
//cg.snap->ps.weaponstate == WEAPON_RELOADING when it's in
|
||||||
|
/*
|
||||||
if (cg.snap->ps.weaponstate == WEAPON_RELOADING && cg.snap->ps.weaponTime > 0) {
|
if (cg.snap->ps.weaponstate == WEAPON_RELOADING && cg.snap->ps.weaponTime > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
cg.weaponSelectTime = cg.time;
|
cg.weaponSelectTime = cg.time;
|
||||||
original = cg.weaponSelect;
|
original = cg.weaponSelect;
|
||||||
|
@ -2299,10 +2368,12 @@ void CG_Weapon_f( void ) {
|
||||||
if (cg.snap->ps.stats[STAT_BURST] > 0)
|
if (cg.snap->ps.stats[STAT_BURST] > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
/*
|
||||||
//Elder: in the middle of firing, reloading or weapon-switching
|
//Elder: in the middle of firing, reloading or weapon-switching
|
||||||
if (cg.snap->ps.weaponTime > 0 || cg.snap->ps.stats[STAT_RELOADTIME] > 0) {
|
if (cg.snap->ps.weaponTime > 0 || cg.snap->ps.stats[STAT_RELOADTIME] > 0) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
///Elder: spectator?
|
///Elder: spectator?
|
||||||
|
@ -2312,6 +2383,11 @@ void CG_Weapon_f( void ) {
|
||||||
|
|
||||||
// Hawkins (give 'weapon' dual meaning)
|
// Hawkins (give 'weapon' dual meaning)
|
||||||
if ( trap_Argc() == 1 ) {
|
if ( trap_Argc() == 1 ) {
|
||||||
|
//Elder: in the middle of firing, reloading or weapon-switching
|
||||||
|
if (cg.snap->ps.weaponTime > 0 || cg.snap->ps.stats[STAT_RELOADTIME] > 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (cg.snap->ps.weapon == WP_SSG3000) {
|
if (cg.snap->ps.weapon == WP_SSG3000) {
|
||||||
//trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_ITEM, cgs.media.lensSound);
|
//trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_ITEM, cgs.media.lensSound);
|
||||||
trap_S_StartLocalSound( cgs.media.lensSound, CHAN_ITEM);
|
trap_S_StartLocalSound( cgs.media.lensSound, CHAN_ITEM);
|
||||||
|
@ -2777,6 +2853,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_M4:
|
case WP_M4:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
|
|
||||||
r = rand() & 3;
|
r = rand() & 3;
|
||||||
|
@ -2790,6 +2869,16 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
sfx = cgs.media.sfx_metalric3;
|
sfx = cgs.media.sfx_metalric3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
{
|
||||||
|
if ( r < 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric1;
|
||||||
|
} else if ( r == 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric2;
|
||||||
|
} else {
|
||||||
|
sfx = cgs.media.sfx_glassric3;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( r < 2 ) {
|
if ( r < 2 ) {
|
||||||
|
@ -2807,6 +2896,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_PISTOL:
|
case WP_PISTOL:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
|
|
||||||
r = rand() & 3;
|
r = rand() & 3;
|
||||||
|
@ -2820,6 +2912,16 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
sfx = cgs.media.sfx_metalric3;
|
sfx = cgs.media.sfx_metalric3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
{
|
||||||
|
if ( r < 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric1;
|
||||||
|
} else if ( r == 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric2;
|
||||||
|
} else {
|
||||||
|
sfx = cgs.media.sfx_glassric3;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( r < 2 ) {
|
if ( r < 2 ) {
|
||||||
|
@ -2835,6 +2937,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_SSG3000:
|
case WP_SSG3000:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
|
|
||||||
r = rand() & 3;
|
r = rand() & 3;
|
||||||
|
@ -2848,6 +2953,16 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
sfx = cgs.media.sfx_metalric3;
|
sfx = cgs.media.sfx_metalric3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
{
|
||||||
|
if ( r < 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric1;
|
||||||
|
} else if ( r == 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric2;
|
||||||
|
} else {
|
||||||
|
sfx = cgs.media.sfx_glassric3;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( r < 2 ) {
|
if ( r < 2 ) {
|
||||||
|
@ -2863,6 +2978,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_AKIMBO:
|
case WP_AKIMBO:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
|
|
||||||
r = rand() & 3;
|
r = rand() & 3;
|
||||||
|
@ -2876,6 +2994,16 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
sfx = cgs.media.sfx_metalric3;
|
sfx = cgs.media.sfx_metalric3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
{
|
||||||
|
if ( r < 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric1;
|
||||||
|
} else if ( r == 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric2;
|
||||||
|
} else {
|
||||||
|
sfx = cgs.media.sfx_glassric3;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( r < 2 ) {
|
if ( r < 2 ) {
|
||||||
|
@ -2893,6 +3021,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_MP5:
|
case WP_MP5:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
|
|
||||||
r = rand() & 3;
|
r = rand() & 3;
|
||||||
|
@ -2906,6 +3037,16 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
sfx = cgs.media.sfx_metalric3;
|
sfx = cgs.media.sfx_metalric3;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
{
|
||||||
|
if ( r < 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric1;
|
||||||
|
} else if ( r == 2 ) {
|
||||||
|
sfx = cgs.media.sfx_glassric2;
|
||||||
|
} else {
|
||||||
|
sfx = cgs.media.sfx_glassric3;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if ( r == 0 ) {
|
if ( r == 0 ) {
|
||||||
|
@ -2922,6 +3063,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_M3:
|
case WP_M3:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
sfx = 0;
|
sfx = 0;
|
||||||
radius = 4;
|
radius = 4;
|
||||||
|
@ -2929,6 +3073,9 @@ void CG_MissileHitWall( int weapon, int clientNum, vec3_t origin,
|
||||||
case WP_HANDCANNON:
|
case WP_HANDCANNON:
|
||||||
mod = cgs.media.bulletFlashModel;
|
mod = cgs.media.bulletFlashModel;
|
||||||
shader = cgs.media.bulletExplosionShader;
|
shader = cgs.media.bulletExplosionShader;
|
||||||
|
if (soundType == IMPACTSOUND_GLASS)
|
||||||
|
mark = cgs.media.glassMarkShader;
|
||||||
|
else
|
||||||
mark = cgs.media.bulletMarkShader;
|
mark = cgs.media.bulletMarkShader;
|
||||||
sfx = 0;
|
sfx = 0;
|
||||||
radius = 4;
|
radius = 4;
|
||||||
|
@ -3234,6 +3381,17 @@ static void CG_ShotgunPellet( vec3_t start, vec3_t end, int skipNum, int shellWe
|
||||||
CG_MissileHitWall( WP_HANDCANNON, 0, tr.endpos, tr.plane.normal, IMPACTSOUND_METAL, 0 );
|
CG_MissileHitWall( WP_HANDCANNON, 0, tr.endpos, tr.plane.normal, IMPACTSOUND_METAL, 0 );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if ( tr.surfaceFlags & SURF_GLASS )
|
||||||
|
{
|
||||||
|
//Blaze: Changed WP_SHOTGUN to WP_M3
|
||||||
|
if (shellWeapon == WP_M3)
|
||||||
|
CG_MissileHitWall( WP_M3, 0, tr.endpos, tr.plane.normal, IMPACTSOUND_GLASS, 0 );
|
||||||
|
else if (shellWeapon == WP_HANDCANNON && crandom() > 0.5)
|
||||||
|
{
|
||||||
|
//Elder: show only approximately every other impact mark
|
||||||
|
CG_MissileHitWall( WP_HANDCANNON, 0, tr.endpos, tr.plane.normal, IMPACTSOUND_GLASS, 0 );
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Blaze: Changed WP_SHOTGUN to WP_M3
|
//Blaze: Changed WP_SHOTGUN to WP_M3
|
||||||
|
@ -3671,7 +3829,7 @@ void CG_ReloadWeapon (centity_t *cent, int reloadStage)
|
||||||
}
|
}
|
||||||
|
|
||||||
weap = &cg_weapons[ ent->weapon ];
|
weap = &cg_weapons[ ent->weapon ];
|
||||||
|
/*
|
||||||
switch (reloadStage)
|
switch (reloadStage)
|
||||||
{
|
{
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -3709,4 +3867,5 @@ void CG_ReloadWeapon (centity_t *cent, int reloadStage)
|
||||||
CG_Error("CG_ReloadWeapon: Reload stage > 2\n");
|
CG_Error("CG_ReloadWeapon: Reload stage > 2\n");
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue