Reworking the sniper zoom and bandage required extensive client changes
to fit the new model.
This commit is contained in:
Victor Chow 2001-06-18 00:40:38 +00:00
parent b3b1fe4098
commit 3fe61cd477
8 changed files with 174 additions and 39 deletions

View file

@ -41,8 +41,8 @@ static void CG_DropWeapon_f (void) {
return;
}
cg.zoomed = 0;
cg.zoomLevel = 0;
//cg.zoomed = 0;
//cg.zoomLevel = 0;
trap_SendClientCommand("dropweapon");
}
@ -58,15 +58,34 @@ static void CG_Bandage_f (void) {
return;
}
///Elder: spectator?
//Elder: spectator?
if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
return;
}
if (cg.snap->ps.stats[STAT_BANDAGE]) {
cg.zoomed = 0;
cg.zoomLevel = 0;
//Elder: prevent "bandaging" when dead hehe
if ( cg.snap->ps.stats[STAT_HEALTH] < 0 ) {
CG_Printf("It's a bit too late to bandage yourself...\n");
return;
}
//Elder: added to prevent bandaging while reloading or firing
if ( cg.snap->ps.weaponTime > 0 ) {
CG_Printf("You are too busy with your weapon!\n");
return;
}
//if (cg.snap->ps.stats[STAT_BANDAGE]) {
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK) {
CG_Printf("You are already bandaging!\n");
//cg.zoomed = 0;
//cg.zoomLevel = 0;
return;
}
//else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_BANDAGE_NEED) == RQ3_BANDAGE_NEED) {
//cg.zoomed = 0;
//cg.zoomLevel = 0;
//}
trap_SendClientCommand("bandage");
}
@ -89,13 +108,25 @@ static void CG_Reload_f (void) {
if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
return;
}
//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: 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;
//cg.zoomed = 0;
//cg.zoomLevel = 0;
}
trap_SendClientCommand("reload");
}
@ -501,7 +532,7 @@ static consoleCommand_t commands[] = {
{ "sizedown", CG_SizeDown_f },
{ "weapnext", CG_NextWeapon_f },
{ "weapprev", CG_PrevWeapon_f },
{ "weapon", CG_Weapon_f }, // Elder: it's for AQ2 and Q3!?
{ "weapon", CG_Weapon_f }, // Elder: it's for RQ3 and Q3A
{ "dropweapon", CG_DropWeapon_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
@ -614,7 +645,7 @@ void CG_InitConsoleCommands( void ) {
trap_AddCommand ("reload");
trap_AddCommand ("opendoor");
trap_AddCommand ("bandage");
trap_AddCommand ("drop"); // XRAY FMJ weap drop cmd
//trap_AddCommand ("drop"); // XRAY FMJ weap drop cmd - Elder: not used
//Elder: added to give drop weapon auto-complete
trap_AddCommand ("dropweapon");
//Elder: try this

View file

@ -529,7 +529,7 @@ static void CG_DrawStatusBar( void ) {
style |= UI_PULSE;
//Elder: Need bandaging?
if (ps->stats[STAT_BANDAGE])
if ( (ps->stats[STAT_RQ3] & RQ3_BANDAGE_NEED) == RQ3_BANDAGE_NEED)
hicon = cgs.media.rq3_healthicon2;
else
hicon = cgs.media.rq3_healthicon;
@ -2020,12 +2020,33 @@ static void CG_DrawCrosshair(void) {
//Elder: Sniper crosshairs - lots of hardcoded values :/
if ( cg.snap->ps.weapon==WP_SSG3000 && cg.zoomLevel > 0 && cg.zoomLevel < 4) {
//if ( cg.snap->ps.weapon==WP_SSG3000 && cg.zoomLevel > 0 && cg.zoomLevel < 4) {
if ( cg.snap->ps.weapon==WP_SSG3000 &&
( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW ||
(cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED ) ) {
int zoomMag;
x = 640 / 2;
y = 480 / 2;
//I can probably scale the zoom with the screen width -/+ keys
//derive zoom level - seems complicated but they're only bit comparisions
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW &&
(cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED ) {
zoomMag = 2;
}
else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW) {
zoomMag = 0;
}
else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED) {
zoomMag = 1;
}
else {
//Shouldn't need to be here
CG_Error("CG_DrawCrosshair: received bad zoom value %d\n", zoomMag);
}
//I can probably scale the zoom with the screen width -/+ keys
//But I'll do it later.
CG_DrawPic( x - 128, y - 128, 256, 256, cgs.media.ssgCrosshair[cg.zoomLevel - 1]);
CG_DrawPic( x - 128, y - 128, 256, 256, cgs.media.ssgCrosshair[zoomMag]);
return;
}
else {

View file

@ -275,6 +275,7 @@ static void CG_Item( centity_t *cent ) {
//Elder: added knife conditional
if ( item->giType == IT_WEAPON &&
!(item->giTag == WP_KNIFE && ( (es->eFlags & FL_THROWN_KNIFE) == FL_THROWN_KNIFE) ) ) {
vec3_t myvec;
//CG_Printf("Should not be in here if it's a thrown knife\n");
@ -293,7 +294,11 @@ static void CG_Item( centity_t *cent ) {
wi->weaponMidpoint[2] * ent.axis[2][2];
//Blaze: Dont raise the weapon, but lower it
//Elder: increased value
cent->lerpOrigin[2] -= 14;
//Elder: don't lower knives by much - this is bad hardcode but oh well
if ( item->giTag == WP_KNIFE)
cent->lerpOrigin[2] -= 10;
else
cent->lerpOrigin[2] -= 14;
// cent->lerpOrigin[2] += 8; // an extra height boost
// Blaze: rotate the gun by 90 degrees to place it on the ground
VectorCopy(ent.axis[1], myvec);

View file

@ -507,7 +507,7 @@ typedef struct {
// zoom key
qboolean zoomed; // Hawkins: not just zoomed... but
int zoomLevel; // Zoom LEVEL!
// int zoomLevel; // Zoom LEVEL!
int zoomTime;
float zoomSensitivity;

View file

@ -184,8 +184,8 @@ void CG_Respawn( void ) {
cg.weaponSelect = cg.snap->ps.weapon;
//Elder: added to reset zoom stuff LOCALLY
cg.zoomed = qfalse;
cg.zoomLevel = 0;
//cg.zoomed = qfalse;
//cg.zoomLevel = 0;
}
extern char *eventnames[];

View file

@ -1054,9 +1054,9 @@ static void CG_ServerCommand( void ) {
default:
cg.weaponSelectTime = cg.time;
cg.weaponSelect = WP_PISTOL;
cg.zoomed = qfalse;
cg.zoomLevel = 0;
trap_SendClientCommand("unzoom");
//cg.zoomed = qfalse;
//cg.zoomLevel = 0;
//trap_SendClientCommand("unzoom");
break;
}
}

View file

@ -487,7 +487,10 @@ static int CG_CalcFov( void ) {
// zoomFov = cg_zoomFov.value;
*/
// Hawkins Reaction zooming.
if(cg.zoomed){
if ( cg.snap->ps.weapon==WP_SSG3000 &&
( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW ||
(cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED ) ) {
/*
switch(cg.zoomLevel){
case 1:
zoomFov=45;
@ -505,13 +508,38 @@ static int CG_CalcFov( void ) {
zoomFov=90;
cg.zoomed=qfalse;
break;
}*/
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW &&
(cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED ) {
//6x
fov_x = 20;
zoomFov = 10;
cg.zoomed = qtrue;
}
else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW) {
//2x
zoomFov = 45;
cg.zoomed = qtrue;
}
else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED) {
//4x
fov_x = 45;
zoomFov = 20;
cg.zoomed = qtrue;
}
else {
//1x
zoomFov = 90;
cg.zoomed = qfalse;
}
if ( zoomFov < 1 ) {
zoomFov = 1;
} else if ( zoomFov > 160 ) {
zoomFov = 160;
}
if ( cg.zoomed ) {
if ( cg.zoomed ) {
f = ( cg.time - cg.zoomTime ) / (float)ZOOM_TIME;
if ( f > 1.0 ) {
fov_x = zoomFov;
@ -529,7 +557,8 @@ static int CG_CalcFov( void ) {
}
else {
//Elder: safety check
cg.zoomLevel = 0;
//cg.zoomLevel = 0;
cg.zoomed = qfalse;
}
x = cg.refdef.width / tan( fov_x / 360 * M_PI );

View file

@ -728,8 +728,10 @@ void CG_RegisterWeapon( int weaponNum ) {
case WP_AKIMBO:
//Elder: added
MAKERGB( weaponInfo->flashDlightColor, 1, 1, 0.5f );
weaponInfo->flashSound[0] = trap_S_RegisterSound( "sound/weapons/mk23/mk23fire.wav", qfalse );
weaponInfo->flashSound[1] = 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->flashSound[1] = trap_S_RegisterSound( "sound/weapons/mk23/mk23fire.wav", qfalse );
weaponInfo->ejectBrassFunc = CG_MachineGunEjectBrass;
cgs.media.bulletExplosionShader = trap_R_RegisterShader( "bulletExplosion" );
break;
@ -1589,8 +1591,14 @@ void CG_NextWeapon_f( void ) {
}
//Elder: added
cg.zoomed = qfalse;
cg.zoomLevel = 0;
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK) {
CG_Printf("You are too busy bandaging...\n");
return;
}
//Elder: added
//cg.zoomed = qfalse;
//cg.zoomLevel = 0;
cg.weaponSelectTime = cg.time;
original = cg.weaponSelect;
@ -1630,8 +1638,14 @@ void CG_PrevWeapon_f( void ) {
}
//Elder: added
cg.zoomed = qfalse;
cg.zoomLevel = 0;
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK) {
CG_Printf("You are too busy bandaging...\n");
return;
}
//Elder: added
//cg.zoomed = qfalse;
//cg.zoomLevel = 0;
cg.weaponSelectTime = cg.time;
original = cg.weaponSelect;
@ -1654,11 +1668,18 @@ void CG_PrevWeapon_f( void ) {
}
}
//Elder: for returning to the zoom state in ps stats
void CG_RQ3_QuickZoom ( void ) {
//cg.zoomLevel = lastzoom;
}
// Hawkins (weapon command)
// Elder: Don't call it the weapon command heh :)
//void CG_RXN_Zoom(int n){
//Elder: not used again - AQ2 doesn't tell the player about the zoom level
void CG_RXN_Zoom( void ) {
//Elder: reworked SSG zoom
/*
if(cg.snap->ps.weapon==WP_SSG3000) {
cg.zoomLevel++;
if (cg.zoomLevel == 4) {
@ -1672,6 +1693,21 @@ void CG_RXN_Zoom( void ) {
}
cg.zoomTime = cg.time;
}
*/
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW &&
(cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED ) {
CG_Printf("Zoomed to 6x\n");
}
else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_LOW) == RQ3_ZOOM_LOW) {
CG_Printf("Zoomed to 2x\n");
}
else if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_ZOOM_MED) == RQ3_ZOOM_MED) {
CG_Printf("Zoomed to 4x\n");
}
else {
CG_Printf("Zoomed out\n");
}
/*
if ( n == 0 ) {
cg.zoomLevel=0;
@ -1716,6 +1752,18 @@ void CG_Weapon_f( void ) {
return;
}
//Elder: added to prevent weapon switching while bandaging
if ( (cg.snap->ps.stats[STAT_RQ3] & RQ3_BANDAGE_WORK) == RQ3_BANDAGE_WORK) {
CG_Printf("You are too busy bandaging...\n");
return;
}
//Elder: in the middle of firing, reloading or weapon-switching
if (cg.snap->ps.weaponTime > 0) {
return;
}
///Elder: spectator?
if ( cg.snap->ps.pm_flags & PMF_FOLLOW ) {
return;
@ -1723,14 +1771,15 @@ void CG_Weapon_f( void ) {
// Hawkins (give 'weapon' dual meaning)
if ( trap_Argc() == 1 ) {
//Elder: if SSG, use local zooming THEN forward to server for stats
if (cg.snap->ps.weapon == WP_SSG3000) {
//trap_S_StartSound( NULL, cg.snap->ps.clientNum, CHAN_ITEM, cgs.media.lensSound);
trap_S_StartLocalSound( cgs.media.lensSound, CHAN_ITEM);
CG_RXN_Zoom();
}
trap_SendClientCommand("weapon");
//CG_RXN_Zoom();
}
else {
//do weapon select sound
}
trap_SendClientCommand("weapon");
}
num = atoi( CG_Argv( 1 ) );
@ -1753,8 +1802,8 @@ void CG_Weapon_f( void ) {
return;
}
cg.zoomed = qfalse;
cg.zoomLevel = 0;
//cg.zoomed = qfalse;
//cg.zoomLevel = 0;
trap_SendClientCommand("unzoom");
cg.weaponSelect = num;