diff --git a/code/cgame/cg_local.h b/code/cgame/cg_local.h index 0b77d53..ff1350d 100644 --- a/code/cgame/cg_local.h +++ b/code/cgame/cg_local.h @@ -1573,6 +1573,7 @@ void CG_DrawWeaponBar4(int count, int bits, float *color); void CG_DrawWeaponBar5(int count, int bits, float *color); void CG_DrawWeaponBar6(int count, int bits, float *color); void CG_DrawWeaponBar7(int count, int bits, float *color); +void CG_DrawWeaponBar8(int count, int bits); void CG_OutOfAmmoChange( void ); // should this be in pmove? diff --git a/code/cgame/cg_weapons.c b/code/cgame/cg_weapons.c index a75707e..ad57623 100644 --- a/code/cgame/cg_weapons.c +++ b/code/cgame/cg_weapons.c @@ -1732,6 +1732,9 @@ void CG_DrawWeaponSelect( void ) { case 7: CG_DrawWeaponBar7(count,bits, color); break; + case 8: + CG_DrawWeaponBar8(count,bits); + break; } trap_R_SetColor(NULL); return; @@ -2101,7 +2104,7 @@ void CG_DrawWeaponBar4(int count, int bits, float *color){ float yellow[4]; boxColor[1]=0; - boxColor[3]=0.4f; + boxColor[3]=0.0f; yellow[0] = 1.0f; yellow[1] = 1.0f; @@ -2387,7 +2390,7 @@ void CG_DrawWeaponBar7(int count, int bits, float *color){ float boxColor[4]; boxColor[1]=0; - boxColor[3]=0.4f; + boxColor[3]=0.0f; yellow[0] = 1.0f; yellow[1] = 1.0f; @@ -2454,6 +2457,84 @@ void CG_DrawWeaponBar7(int count, int bits, float *color){ } } +/* +=============== +CG_DrawWeaponBar8 +=============== +*/ + +/* + * Y.A.K.U.M.O. + * This brings back the classic weapon bar from + * Quake III Arena fame + */ +void CG_DrawWeaponBar8( int count, int bits ) { + int i; + int x, y, w; + char *name; + float *color; + + // Don't display if dead + if ( cg.predictedPlayerState.stats[STAT_HEALTH] <= 0 ) { + return; + } + + color = CG_FadeColor( cg.weaponSelectTime, WEAPON_SELECT_TIME ); + if (!color) { + return; + } + trap_R_SetColor( color ); + + // Showing weapon select clears pickup item display, but not the blend blob + cg.itemPickupTime = 0; + + // Count the number of weapons owned + bits = cg.snap->ps.stats[ STAT_WEAPONS ]; + count = 0; + for ( i = 1 ; i < MAX_WEAPONS ; i++ ) { + if ( bits & ( 1 << i ) ) { + count++; + } + } + + x = 320 - count * 20; + y = 380; + + for ( i = 1 ; i < MAX_WEAPONS ; i++ ) { + if ( !( bits & ( 1 << i ) ) ) { + continue; + } + + CG_RegisterWeapon( i ); + + // Draw weapon icon + CG_DrawPic( x, y, 32, 32, cg_weapons[i].weaponIcon ); + + // Draw selection marker + if ( i == cg.weaponSelect ) { + CG_DrawPic( x-4, y-4, 40, 40, cgs.media.selectShader ); + } + + // No more cross on top + if ( !cg.snap->ps.ammo[ i ] ) { + CG_DrawPic( x, y, 32, 32, cgs.media.noammoShader ); + } + + x += 40; + } + + // Draw the selected name + if ( cg_weapons[ cg.weaponSelect ].item ) { + name = cg_weapons[ cg.weaponSelect ].item->pickup_name; + if ( name ) { + w = CG_DrawStrlen( name ) * BIGCHAR_WIDTH; + x = ( SCREEN_WIDTH -w ) / 2; + CG_DrawBigStringColor(x, y - 22, name, color); + } + } + + trap_R_SetColor( NULL ); +} /* ===============