Finally added the 5th weapon slot, where the C4 rightfully belongs.

This commit is contained in:
Marco Cawthorne 2019-01-05 21:35:38 +01:00
parent 9c78208af7
commit 7bb9281db7
10 changed files with 84 additions and 69 deletions

View File

@ -203,8 +203,7 @@ void HUD_DrawIcons(void) {
}
// Bomb-Area
vector vBIconPos = vVideoMins + [16, (vVideoResolution[1] / 2) + 24];
if (getstatf(STAT_SLOT_GRENADE) == WEAPON_C4BOMB) {
if (getstatf(STAT_SLOT_C4BOMB) == WEAPON_C4BOMB) {
if (getstatf(STAT_BOMBZONE) == TRUE) {
float fAlpha = fabs(sin(time * 20));
drawsubpic(iconpos, [32,32], HUD_NUMFILE_LAYER, [0, 0.125 * 5 - 0.046875], [0.125, 0.125], [1,0,0], fAlpha, DRAWFLAG_ADDITIVE);

View File

@ -60,11 +60,12 @@ weaponsymbolinfo_t wpSymbolTable[CS_WEAPON_COUNT] = {
{ "sprites/640hud3.spr_0.tga", [0,0.52734375] } //WEAPON_SMOKEGRENADE
};
vector vHUDSlotNumPos[4] = {
vector vHUDSlotNumPos[5] = {
[0.65625,0.28125], // 1 PRIMARY
[0.734375,0.28125], // 2 SECONDARY
[0.8125,0.28125], // 3 MELEE
[0.65625,0.359375] // 4 GRENADE
[0.65625,0.359375], // 4 GRENADE
[0.734375,0.359375] // 5 C4-BOMB
};
/*
@ -93,11 +94,6 @@ float HUD_DrawWeaponSelect_NextItem(float fSlot)
pSeat->iHUDGrenades = 0;
// Keep this order in order for the selection to work
if (getstatf(STAT_SLOT_GRENADE)) {
pSeat->iHUDGrenadesSelected = getstatf(STAT_SLOT_GRENADE);
pSeat->iHUDGrenades++;
}
if (getstati_punf(STAT_ITEM_SMOKEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
pSeat->iHUDGrenades++;
@ -118,6 +114,12 @@ float HUD_DrawWeaponSelect_NextItem(float fSlot)
} else {
return HUD_DrawWeaponSelect_NextItem(SLOT_GRENADE);
}
} else if (fSlot == SLOT_C4BOMB) {
if (getstatf(STAT_SLOT_PRIMARY)) {
return SLOT_PRIMARY;
} else {
return HUD_DrawWeaponSelect_NextItem(SLOT_PRIMARY);
}
} else {
// If we're in the grenade slot, go down
if (pSeat->iHUDGrenadesSelected == WEAPON_HEGRENADE) {
@ -147,10 +149,10 @@ float HUD_DrawWeaponSelect_NextItem(float fSlot)
}
}
if (getstatf(STAT_SLOT_PRIMARY)) {
return SLOT_PRIMARY;
if (getstatf(STAT_SLOT_C4BOMB)) {
return SLOT_C4BOMB;
} else {
return HUD_DrawWeaponSelect_NextItem(SLOT_PRIMARY);
return HUD_DrawWeaponSelect_NextItem(SLOT_C4BOMB);
}
}
}
@ -165,30 +167,10 @@ Checks and returns the previous slot with a weapon in it
float HUD_DrawWeaponSelect_PreviousItem(float fSlot)
{
if (fSlot == SLOT_PRIMARY) {
pSeat->iHUDGrenades = 0;
// Keep this order in order for the selection to work
if (getstati_punf(STAT_ITEM_HEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_HEGRENADE;
pSeat->iHUDGrenades++;
}
if (getstati_punf(STAT_ITEM_FLASHBANG)) {
pSeat->iHUDGrenadesSelected = WEAPON_FLASHBANG;
pSeat->iHUDGrenades++;
}
if (getstati_punf(STAT_ITEM_SMOKEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
pSeat->iHUDGrenades++;
}
if (getstatf(STAT_SLOT_GRENADE)) {
pSeat->iHUDGrenadesSelected = getstatf(STAT_SLOT_GRENADE);
pSeat->iHUDGrenades++;
}
if (pSeat->iHUDGrenades) {
return SLOT_GRENADE;
if (getstatf(STAT_SLOT_C4BOMB)) {
return SLOT_C4BOMB;
} else {
return HUD_DrawWeaponSelect_PreviousItem(SLOT_GRENADE);
return HUD_DrawWeaponSelect_PreviousItem(SLOT_C4BOMB);
}
} else if (fSlot == SLOT_SECONDARY) {
if (getstatf(STAT_SLOT_PRIMARY)) {
@ -202,19 +184,30 @@ float HUD_DrawWeaponSelect_PreviousItem(float fSlot)
} else {
return HUD_DrawWeaponSelect_PreviousItem(SLOT_SECONDARY);
}
} else {
if (pSeat->iHUDGrenadesSelected == getstatf(STAT_SLOT_GRENADE)) {
if (getstati_punf(STAT_ITEM_SMOKEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
return SLOT_GRENADE;
} else if (getstati_punf(STAT_ITEM_FLASHBANG)) {
pSeat->iHUDGrenadesSelected = WEAPON_FLASHBANG;
return SLOT_GRENADE;
} else if (getstati_punf(STAT_ITEM_HEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_HEGRENADE;
return SLOT_GRENADE;
}
} else if (fSlot == SLOT_C4BOMB) {
pSeat->iHUDGrenades = 0;
/* See if we any any type of grenade in this slot */
if (getstati_punf(STAT_ITEM_HEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_HEGRENADE;
pSeat->iHUDGrenades++;
}
if (getstati_punf(STAT_ITEM_FLASHBANG)) {
pSeat->iHUDGrenadesSelected = WEAPON_FLASHBANG;
pSeat->iHUDGrenades++;
}
if (getstati_punf(STAT_ITEM_SMOKEGRENADE)) {
pSeat->iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
pSeat->iHUDGrenades++;
}
/* If we actually found a grenade, switch to the slot */
if (pSeat->iHUDGrenades) {
return SLOT_GRENADE;
} else {
return HUD_DrawWeaponSelect_PreviousItem(SLOT_GRENADE);
}
} else {
if (pSeat->iHUDGrenadesSelected == WEAPON_SMOKEGRENADE) {
if (getstati_punf(STAT_ITEM_FLASHBANG)) {
pSeat->iHUDGrenadesSelected = WEAPON_FLASHBANG;
@ -228,7 +221,8 @@ float HUD_DrawWeaponSelect_PreviousItem(float fSlot)
pSeat->iHUDGrenadesSelected = WEAPON_HEGRENADE;
return SLOT_GRENADE;
}
}
}
if (getstatf(STAT_SLOT_MELEE)) {
return SLOT_MELEE;
} else {
@ -252,6 +246,8 @@ float HUD_DrawWeaponSelect_GetWeapon(float fSlot)
return getstatf(STAT_SLOT_SECONDARY);
} else if (fSlot == SLOT_MELEE) {
return getstatf(STAT_SLOT_MELEE);
} else if (fSlot == SLOT_C4BOMB) {
return getstatf(STAT_SLOT_C4BOMB);
} else {
return pSeat->iHUDGrenadesSelected;
}
@ -266,7 +262,7 @@ Called via the invprev command
*/
void HUD_DrawWeaponSelect_Forward(void)
{
if (!getstatf(STAT_SLOT_MELEE) && !getstatf(STAT_SLOT_MELEE) && !getstatf(STAT_SLOT_MELEE) && !getstatf(STAT_SLOT_MELEE)) {
if (!getstatf(STAT_SLOT_MELEE)) {
return;
}
@ -290,7 +286,7 @@ Called via the invnext command
*/
void HUD_DrawWeaponSelect_Back(void)
{
if (!getstatf(STAT_SLOT_MELEE) && !getstatf(STAT_SLOT_MELEE) && !getstatf(STAT_SLOT_MELEE) && !getstatf(STAT_SLOT_MELEE)) {
if (!getstatf(STAT_SLOT_MELEE)) {
return;
}
@ -336,11 +332,13 @@ void HUD_DrawWeaponSelect(void)
vector vSelectPos = vVideoMins + [160,12];
for (int i = 0; i < 4; i++) {
for (int i = 0; i < 5; i++) {
vSelectPos[1] = vVideoMins[1] + 12;
HUD_DrawWeaponSelect_Num(vSelectPos, i);
// Again, grenades are treated seperately
if (i == SLOT_GRENADE) {
int ihasnade = FALSE;
if (wptTable[pSeat->fHUDWeaponSelected].iSlot == SLOT_GRENADE) {
if (getstati_punf(STAT_ITEM_HEGRENADE)) {
drawsubpic(vSelectPos + [0,20], [170,45], wpSymbolTable[WEAPON_HEGRENADE].sSprite, wpSymbolTable[WEAPON_HEGRENADE].vOrigin, [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
@ -348,6 +346,7 @@ void HUD_DrawWeaponSelect(void)
drawsubpic(vSelectPos + [0,20], [170,45], "sprites/640hud3.spr_0.tga", [0,0.703125], [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
}
vSelectPos_y += 45;
ihasnade = TRUE;
}
if (getstati_punf(STAT_ITEM_FLASHBANG)) {
drawsubpic(vSelectPos + [0,20], [170,45], wpSymbolTable[WEAPON_FLASHBANG].sSprite, wpSymbolTable[WEAPON_FLASHBANG].vOrigin, [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
@ -355,6 +354,7 @@ void HUD_DrawWeaponSelect(void)
drawsubpic(vSelectPos + [0,20], [170,45], "sprites/640hud3.spr_0.tga", [0,0.703125], [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
}
vSelectPos_y += 45;
ihasnade = TRUE;
}
if (getstati_punf(STAT_ITEM_SMOKEGRENADE)) {
drawsubpic(vSelectPos + [0,20], [170,45], wpSymbolTable[WEAPON_SMOKEGRENADE].sSprite, wpSymbolTable[WEAPON_SMOKEGRENADE].vOrigin, [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
@ -362,14 +362,13 @@ void HUD_DrawWeaponSelect(void)
drawsubpic(vSelectPos + [0,20], [170,45], "sprites/640hud3.spr_0.tga", [0,0.703125], [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
}
vSelectPos_y += 45;
ihasnade = TRUE;
}
if (getstatf(STAT_SLOT_GRENADE)) {
drawsubpic(vSelectPos + [0,20], [170,45], wpSymbolTable[getstatf(STAT_SLOT_GRENADE)].sSprite, wpSymbolTable[getstatf(STAT_SLOT_GRENADE)].vOrigin, [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
if (pSeat->iHUDGrenadesSelected == getstatf(STAT_SLOT_GRENADE)) {
drawsubpic(vSelectPos + [0,20], [170,45], "sprites/640hud3.spr_0.tga", [0,0.703125], [0.6640625, 0.17578125], vHUDColor, 1, DRAWFLAG_ADDITIVE);
}
vSelectPos_y += 45;
}
}
if (ihasnade) {
vSelectPos_x += 170;
} else {
vSelectPos_x += 20;
}
} else {
if (wptTable[pSeat->fHUDWeaponSelected].iSlot == i) {

View File

@ -67,11 +67,11 @@ float CSQC_VGUI_Draw( void ) {
vVGUIWindowPos_x += ( vVideoResolution_x / 2 ) - 320;
vVGUIWindowPos_y += ( vVideoResolution_y / 2 ) - 240;
VGUI_Window( vguiMenus[ pSeat->fVGUI_Display - 1 ].sTitle, vVGUIWindowPos, '640 480 0' );
iVGUIKey = 48;
// Display the contents of whatever we have selected
vguiMenus[ pSeat->fVGUI_Display - 1 ].vDraw( vVGUIWindowPos );
return TRUE;
}
@ -86,15 +86,15 @@ void CSQC_VGUI_Init( void ) {
string sTemp;
int iMOTDLength;
filestream fmMapDescr;
// First load the MESSAGE OF THE DAY
// TODO: Move this to the server and put strings into infokeys
iMOTDLength = stof( serverkey( "motdlength" ) );
for ( int i = 0; i < iMOTDLength; i++ ) {
sMOTDString[ i ] = serverkey( sprintf( "motdline%i", i ) );
}
// Now load the MAP DESCRIPTION
fmMapDescr = fopen( sprintf( "maps/%s.txt", mapname ), FILE_READ );
if ( fmMapDescr != -1 ) {
@ -107,7 +107,7 @@ void CSQC_VGUI_Init( void ) {
}
fclose( fmMapDescr );
}
if (serverkeyfloat("slots") == 1) {
pSeat->fVGUI_Display = VGUI_NONE;
return;

View File

@ -71,6 +71,7 @@ enum {
STAT_SLOT_PRIMARY,
STAT_SLOT_SECONDARY,
STAT_SLOT_GRENADE,
STAT_SLOT_C4BOMB,
STAT_EQUIPMENT,
STAT_ITEM_FLASHBANG,
STAT_ITEM_HEGRENADE,
@ -179,7 +180,8 @@ enum {
SLOT_PRIMARY,
SLOT_SECONDARY,
SLOT_MELEE,
SLOT_GRENADE
SLOT_GRENADE,
SLOT_C4BOMB
};
// These variables are taken from CS:S' .ctx script files, usually and interpreted as I go along...

View File

@ -69,6 +69,7 @@
.float fSlotPrimary;
.float fSlotSecondary;
.float fSlotGrenade;
.float fSlotC4Bomb;
.float fAttackFinished;
.float fRadioFinished;
.float fAccuracy;

View File

@ -642,6 +642,7 @@ void worldspawn( void ) {
clientstat( STAT_SLOT_PRIMARY, EV_FLOAT, fSlotPrimary );
clientstat( STAT_SLOT_SECONDARY, EV_FLOAT, fSlotSecondary );
clientstat( STAT_SLOT_GRENADE, EV_FLOAT, fSlotGrenade );
clientstat( STAT_SLOT_C4BOMB, EV_FLOAT, fSlotC4Bomb );
clientstat( STAT_ITEM_FLASHBANG, EV_INTEGER, iAmmo_FLASHBANG );
clientstat( STAT_ITEM_HEGRENADE, EV_INTEGER, iAmmo_HEGRENADE );
clientstat( STAT_ITEM_SMOKEGRENADE, EV_INTEGER, iAmmo_SMOKEGRENADE );

View File

@ -15,7 +15,7 @@ int iBombProgress;
// Weapon Info
weaponinfo_t wptC4BOMB = {
WEAPON_C4BOMB, // Identifier
SLOT_GRENADE,
SLOT_C4BOMB,
0, // Price
EXPLOSIVE_C4, // Caliber ID
1.0, // Max Player Speed
@ -177,7 +177,7 @@ void WeaponC4BOMB_Drop( vector vBombPos, vector vNormal ) {
iBombPlanted = TRUE;
// Tell the bomb-planter to get rid of the weapon!
self.fSlotGrenade = self.fSlotGrenade - WEAPON_C4BOMB;
self.fSlotC4Bomb = 0;
Weapon_SwitchBest();
//eprint( eBomb );
}

View File

@ -302,6 +302,10 @@ float Weapon_AlreadyExists( float fWeapon ) {
if ( self.fSlotGrenade == fWeapon ) {
return TRUE;
}
} else if ( wptTable[ fWeapon ].iSlot == SLOT_C4BOMB ) {
if ( self.fSlotC4Bomb == fWeapon ) {
return TRUE;
}
}
}
@ -328,6 +332,10 @@ float Weapon_SlotEmpty( int fSlot ) {
if ( self.fSlotGrenade == 0 ) {
return TRUE;
}
} else if ( fSlot == SLOT_C4BOMB ) {
if ( self.fSlotC4Bomb == 0 ) {
return TRUE;
}
}
return FALSE;
@ -351,6 +359,8 @@ void Weapon_Switch( int iSlot ) {
fWeapon = self.fSlotSecondary;
} else if ( iSlot == SLOT_GRENADE ) {
fWeapon = self.fSlotGrenade;
} else if ( iSlot == SLOT_C4BOMB ) {
fWeapon = self.fSlotC4Bomb;
}
if ( !fWeapon || self.weapon == fWeapon ) {
@ -393,6 +403,8 @@ void Weapon_AddItem( float fWeapon ) {
self.fSlotPrimary = fWeapon;
} else if ( wptTable[ fWeapon ].iSlot == SLOT_GRENADE ) {
self.fSlotGrenade = fWeapon;
} else if ( wptTable[ fWeapon ].iSlot == SLOT_C4BOMB ) {
self.fSlotC4Bomb = fWeapon;
}
// Make sure we've got at least one full clip
@ -480,6 +492,9 @@ void Weapon_DropWeapon( int iSlot ) {
} else if ( iSlot == SLOT_GRENADE ) {
fWeapon = self.fSlotGrenade;
self.fSlotGrenade = 0;
} else if ( iSlot == SLOT_C4BOMB ) {
fWeapon = self.fSlotC4Bomb;
self.fSlotGrenade = 0;
} else {
return;
}
@ -562,8 +577,6 @@ void CSEv_PlayerSwitchWeapon_f( float fWeapon ) {
return;
} else if (fWeapon == WEAPON_SMOKEGRENADE && !(self.iAmmo_SMOKEGRENADE)) {
return;
} else if (fWeapon == WEAPON_C4BOMB && !(self.fSlotGrenade & WEAPON_C4BOMB)) {
return;
}
}
if ( fWeapon != self.weapon ) {

Binary file not shown.

Binary file not shown.