diff --git a/Source/Client/Entities.c b/Source/Client/Entities.c
index ad15f17f..30f720bc 100755
--- a/Source/Client/Entities.c
+++ b/Source/Client/Entities.c
@@ -18,6 +18,10 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+void CSQC_ambient_generic( string sSample, float fVolume, float fAttenuation ) {
+ //print( sprintf( "SOUND: %s, %f, %d\n%d %d %d", sSample, fVolume, fAttenuation, self.origin_x, self.origin_y, self.origin_z ) );
+ sound( self, CHAN_VOICE, sSample, fVolume, fAttenuation, 0, SOUNDFLAG_FORCELOOP );
+}
/*
=================
@@ -57,6 +61,14 @@ void CSQC_Ent_Update( float flIsNew ) {
}
setorigin( self, self.origin );
+ } else if ( fEntType == ENT_AMBIENTSOUND ) {
+ self.origin_x = readcoord();
+ self.origin_y = readcoord();
+ self.origin_z = readcoord();
+
+ setorigin( self, self.origin );
+
+ CSQC_ambient_generic( readstring(), readfloat(), readbyte() );
} else if ( fEntType == ENT_SPRITE ) {
self.origin_x = readcoord();
self.origin_y = readcoord();
diff --git a/Source/Client/Event.c b/Source/Client/Event.c
index 647a8af6..48137e88 100755
--- a/Source/Client/Event.c
+++ b/Source/Client/Event.c
@@ -279,31 +279,31 @@ float CSQC_ConsoleCommand( string sCMD ) {
return TRUE;
break;
case "vest":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_KEVLAR );
+ sendevent( "PlayerBuyEquipment", "f", 0 );
return TRUE;
break;
case "vesthelm":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_HELMET );
+ sendevent( "PlayerBuyEquipment", "f", 1 );
return TRUE;
break;
case "flash":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_FLASHBANG );
+ sendevent( "PlayerBuyEquipment", "f", 2 );
return TRUE;
break;
case "hegren":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_HEGRENADE );
+ sendevent( "PlayerBuyEquipment", "f", 3 );
return TRUE;
break;
case "vsgren":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_SMOKEGRENADE );
+ sendevent( "PlayerBuyEquipment", "f", 4 );
return TRUE;
break;
case "defuser":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_DEFUSALKIT );
+ sendevent( "PlayerBuyEquipment", "f", 5 );
return TRUE;
break;
case "nvg":
- sendevent( "PlayerBuyEquipment", "f", EQUIPMENT_NIGHTVISION );
+ sendevent( "PlayerBuyEquipment", "f", 6 );
return TRUE;
break;
case "coverme":
diff --git a/Source/Client/HUDWeaponSelect.c b/Source/Client/HUDWeaponSelect.c
index da964a0c..1bf7a7bd 100755
--- a/Source/Client/HUDWeaponSelect.c
+++ b/Source/Client/HUDWeaponSelect.c
@@ -18,6 +18,10 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
+// We can only carry one item per slot, so this is hacking around the last one
+int iHUDGrenades;
+int iHUDGrenadesSelected;
+
typedef struct {
string sSprite;
vector vOrigin;
@@ -48,8 +52,8 @@ weaponsymbolinfo_t wpSymbolTable[ CS_WEAPON_COUNT ] = {
{ "sprites/640hud2.spr_0.tga", '0 0.703125' }, //WEAPON_G3SG1
{ "sprites/640hud14.spr_0.tga", '0 0.703125' }, //WEAPON_SG550
{ "sprites/640hud3.spr_0.tga", '0 0' }, //WEAPON_PARA
- { "sprites/640hud1.spr_0.tga", '0 0' }, //WEAPON_C4BOMB
- { "sprites/640hud3.spr_0.tga", '0 0.3515625' }, //WEAPON_FLASHBANG
+ { "sprites/640hud1.spr_0.tga", '0 0' }, //WEAPON_C4BOMB
+ { "sprites/640hud3.spr_0.tga", '0 0.3515625' }, //WEAPON_FLASHBANG
{ "sprites/640hud3.spr_0.tga", '0 0.17578125' }, //WEAPON_HEGRENADE
{ "sprites/640hud3.spr_0.tga", '0 0.52734375' } //WEAPON_SMOKEGRENADE
};
@@ -85,12 +89,48 @@ float HUD_DrawWeaponSelect_NextItem( float fSlot ) {
return HUD_DrawWeaponSelect_NextItem( SLOT_MELEE );
}
} else if ( fSlot == SLOT_MELEE ) {
- if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ // This happens when we go into the slot for the first time
+ iHUDGrenades = 0;
+
+ // Keep this order in order for the selection to work
+ if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
+ iHUDGrenades++;
+ }
+ if ( getstati_punf( STAT_ITEM_FLASHBANG ) ) {
+ iHUDGrenadesSelected = WEAPON_FLASHBANG;
+ iHUDGrenades++;
+ }
+
+ if ( getstati_punf( STAT_ITEM_HEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_HEGRENADE;
+ iHUDGrenades++;
+ }
+
+ // If we have any grenades, proceed with that slot
+ if ( iHUDGrenades ) {
return SLOT_GRENADE;
- } else {
+ } else {
return HUD_DrawWeaponSelect_NextItem( SLOT_GRENADE );
}
} else {
+ // If we're in the grenade slot, go down
+ if ( iHUDGrenadesSelected == WEAPON_HEGRENADE ) {
+ // Do we have a flash bang? If yes, select that thing
+ if ( getstatf( STAT_ITEM_FLASHBANG ) ) {
+ iHUDGrenadesSelected = WEAPON_FLASHBANG;
+ return SLOT_GRENADE;
+ } else if ( getstatf( STAT_ITEM_SMOKEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
+ return SLOT_GRENADE;
+ }
+ } else if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
+ if ( getstatf( STAT_ITEM_SMOKEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
+ return SLOT_GRENADE;
+ }
+ }
+
if ( getstatf( STAT_SLOT_PRIMARY ) ) {
return SLOT_PRIMARY;
} else {
@@ -108,7 +148,23 @@ Checks and returns the previous slot with a weapon in it
*/
float HUD_DrawWeaponSelect_PreviousItem( float fSlot ) {
if ( fSlot == SLOT_PRIMARY ) {
- if ( getstatf( STAT_SLOT_GRENADE ) ) {
+ iHUDGrenades = 0;
+
+ // Keep this order in order for the selection to work
+ if ( getstati_punf( STAT_ITEM_HEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_HEGRENADE;
+ iHUDGrenades++;
+ }
+ if ( getstati_punf( STAT_ITEM_FLASHBANG ) ) {
+ iHUDGrenadesSelected = WEAPON_FLASHBANG;
+ iHUDGrenades++;
+ }
+ if ( getstati_punf( STAT_ITEM_SMOKEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_SMOKEGRENADE;
+ iHUDGrenades++;
+ }
+
+ if ( iHUDGrenades ) {
return SLOT_GRENADE;
} else {
return HUD_DrawWeaponSelect_PreviousItem( SLOT_GRENADE );
@@ -126,10 +182,24 @@ float HUD_DrawWeaponSelect_PreviousItem( float fSlot ) {
return HUD_DrawWeaponSelect_PreviousItem( SLOT_SECONDARY );
}
} else {
- if ( getstatf( STAT_SLOT_MELEE ) ) {
- return SLOT_MELEE;
+ if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
+ if ( getstatf( STAT_ITEM_FLASHBANG ) ) {
+ iHUDGrenadesSelected = WEAPON_FLASHBANG;
+ return SLOT_GRENADE;
+ } else if ( getstatf( STAT_ITEM_HEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_HEGRENADE;
+ return SLOT_GRENADE;
+ }
+ } else if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
+ if ( getstatf( STAT_ITEM_HEGRENADE ) ) {
+ iHUDGrenadesSelected = WEAPON_HEGRENADE;
+ return SLOT_GRENADE;
+ }
+ }
+ if ( getstatf( STAT_SLOT_PRIMARY ) ) {
+ return SLOT_PRIMARY;
} else {
- return HUD_DrawWeaponSelect_PreviousItem( SLOT_MELEE );
+ return HUD_DrawWeaponSelect_NextItem( SLOT_PRIMARY );
}
}
}
@@ -149,7 +219,7 @@ float HUD_DrawWeaponSelect_GetWeapon( float fSlot ) {
} else if ( fSlot == SLOT_MELEE ) {
return getstatf( STAT_SLOT_MELEE );
} else {
- return getstatf( STAT_SLOT_GRENADE );
+ return iHUDGrenadesSelected;
}
}
@@ -217,7 +287,7 @@ HUD_DrawWeaponSelect
Drawn every frame through HUD.c
=================
*/
-void HUD_DrawWeaponSelect( void ) {
+void HUD_DrawWeaponSelect( void ) {
if ( fHUDWeaponSelectTime < time ) {
if ( fHUDWeaponSelected ) {
sound( self, CHAN_ITEM, "common/wpn_hudoff.wav", 0.5, ATTN_NONE );
@@ -231,11 +301,30 @@ void HUD_DrawWeaponSelect( void ) {
for ( int i = 0; i < 4; i++ ) {
HUD_DrawWeaponSelect_Num( vSelectPos, i );
- if ( wptTable[ fHUDWeaponSelected ].iSlot == i ) {
- drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ fHUDWeaponSelected ].sSprite, wpSymbolTable[ fHUDWeaponSelected ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
- vSelectPos_x += 170;
+ // Again, grenades are treated seperately
+ if ( i == SLOT_GRENADE ) {
+ if ( wptTable[ fHUDWeaponSelected ].iSlot == SLOT_GRENADE ) {
+ if ( iHUDGrenadesSelected == WEAPON_HEGRENADE ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ WEAPON_HEGRENADE ].sSprite, wpSymbolTable[ WEAPON_HEGRENADE ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
+ vSelectPos_y += 45;
+
+ if ( iHUDGrenadesSelected == WEAPON_FLASHBANG ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ WEAPON_FLASHBANG ].sSprite, wpSymbolTable[ WEAPON_FLASHBANG ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
+ vSelectPos_y += 45;
+
+ if ( iHUDGrenadesSelected == WEAPON_SMOKEGRENADE ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ WEAPON_SMOKEGRENADE ].sSprite, wpSymbolTable[ WEAPON_SMOKEGRENADE ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ }
+ }
} else {
- vSelectPos_x += 20;
+ if ( wptTable[ fHUDWeaponSelected ].iSlot == i ) {
+ drawsubpic( vSelectPos + '0 20', '170 45', wpSymbolTable[ fHUDWeaponSelected ].sSprite, wpSymbolTable[ fHUDWeaponSelected ].vOrigin, [ 0.6640625, 0.17578125 ], vHUDColor, 1, DRAWFLAG_ADDITIVE );
+ vSelectPos_x += 170;
+ } else {
+ vSelectPos_x += 20;
+ }
}
}
}
diff --git a/Source/Client/VGUI.c b/Source/Client/VGUI.c
index 4e87452c..11a4c073 100755
--- a/Source/Client/VGUI.c
+++ b/Source/Client/VGUI.c
@@ -22,17 +22,17 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
// Menus with their window titles and draw functions
vguiwindow_t vguiMenus[11] = {
- { "Message Of The Day", VGUI_MessageOfTheDay },
- { "Team Selection", VGUI_TeamSelect_Main },
- { "Terrorist Selection", VGUI_TeamSelect_T },
- { "Counter-Terrorist Selection", VGUI_TeamSelect_CT },
- { "Buy Menu", VGUI_BuyMenu_Main },
- { "Handguns", VGUI_BuyMenu_Handguns },
- { "Shotgun", VGUI_BuyMenu_Shotguns },
- { "Sub-Machine-Guns", VGUI_BuyMenu_SMGs },
- { "Rifles", VGUI_BuyMenu_Rifles },
- { "Machineguns", VGUI_BuyMenu_Machineguns },
- { "Equipment", VGUI_BuyMenu_Equipment }
+ { _("Message Of The Day"), VGUI_MessageOfTheDay },
+ { _("Team Selection"), VGUI_TeamSelect_Main },
+ { _("Terrorist Selection"), VGUI_TeamSelect_T },
+ { _("Counter-Terrorist Selection"), VGUI_TeamSelect_CT },
+ { _("Buy Menu"), VGUI_BuyMenu_Main },
+ { _("Handguns"), VGUI_BuyMenu_Handguns },
+ { _("Shotgun"), VGUI_BuyMenu_Shotguns },
+ { _("Sub-Machine-Guns"), VGUI_BuyMenu_SMGs },
+ { _("Rifles"), VGUI_BuyMenu_Rifles },
+ { _("Machineguns"), VGUI_BuyMenu_Machineguns },
+ { _("Equipment"), VGUI_BuyMenu_Equipment }
};
/*
diff --git a/Source/Client/VGUIBuyMenu.c b/Source/Client/VGUIBuyMenu.c
index 24983dae..8e9795fa 100755
--- a/Source/Client/VGUIBuyMenu.c
+++ b/Source/Client/VGUIBuyMenu.c
@@ -21,40 +21,40 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "VGUI.h"
vguiweaponobject_t vguiWeaponTable[ CS_WEAPON_COUNT ] = {
- { "None", "" },
- { "Knife", "" },
- { "H&K USP .45 Tactical", "gfx/vgui/640_usp" },
- { "Glock18 Select Fire", "gfx/vgui/640_glock18" },
- { "Desert Eagle .50AE", "gfx/vgui/640_deagle" },
- { "SIG P228", "gfx/vgui/640_p228" },
- { "Dual Beretta 96G Elite", "gfx/vgui/640_elite" },
- { "FN Five-Seven", "gfx/vgui/640_fiveseven" },
- { "Benelli M3 Super90", "gfx/vgui/640_m3" },
- { "Benelli XM1014", "gfx/vgui/640_xm1014" },
- { "H&K MP5-Navy", "gfx/vgui/640_mp5" },
- { "FN P90", "gfx/vgui/640_p90" },
- { "H&K UMP45", "gfx/vgui/640_ump45" },
- { "Ingram MAC-10", "gfx/vgui/640_mac10" },
- { "Steyr Tactical Machine Pistol", "gfx/vgui/640_tmp" },
- { "AK-47", "gfx/vgui/640_ak47" },
- { "Sig SG-552 Commando", "gfx/vgui/640_sg552" },
- { "Colt M4A1 Carbine", "gfx/vgui/640_m4a1" },
- { "Steyr Aug", "gfx/vgui/640_aug" },
- { "Steyr Scout", "gfx/vgui/640_scout" },
- { "AI Arctic Warfare/Magnum", "gfx/vgui/640_awp" },
- { "H&K G3/SG-1 Sniper Rifle", "gfx/vgui/640_g3sg1" },
- { "Sig SG-550 Sniper", "gfx/vgui/640_sg550" },
- { "FN M249 Para", "gfx/vgui/640_m249" }
+ { _("None"), "" },
+ { _("Knife"), "" },
+ { _("H&K USP .45 Tactical"), "gfx/vgui/640_usp" },
+ { _("Glock18 Select Fire"), "gfx/vgui/640_glock18" },
+ { _("Desert Eagle .50AE"), "gfx/vgui/640_deagle" },
+ { _("SIG P228"), "gfx/vgui/640_p228" },
+ { _("Dual Beretta 96G Elite"), "gfx/vgui/640_elite" },
+ { _("FN Five-Seven"), "gfx/vgui/640_fiveseven" },
+ { _("Benelli M3 Super90"), "gfx/vgui/640_m3" },
+ { _("Benelli XM1014"), "gfx/vgui/640_xm1014" },
+ { _("H&K MP5-Navy"), "gfx/vgui/640_mp5" },
+ { _("FN P90"), "gfx/vgui/640_p90" },
+ { _("H&K UMP45"), "gfx/vgui/640_ump45" },
+ { _("Ingram MAC-10"), "gfx/vgui/640_mac10" },
+ { _("Steyr Tactical Machine Pistol"), "gfx/vgui/640_tmp" },
+ { _("AK-47"), "gfx/vgui/640_ak47" },
+ { _("Sig SG-552 Commando"), "gfx/vgui/640_sg552" },
+ { _("Colt M4A1 Carbine"), "gfx/vgui/640_m4a1" },
+ { _("Steyr Aug"), "gfx/vgui/640_aug" },
+ { _("Steyr Scout"), "gfx/vgui/640_scout" },
+ { _("AI Arctic Warfare/Magnum"), "gfx/vgui/640_awp" },
+ { _("H&K G3/SG-1 Sniper Rifle"), "gfx/vgui/640_g3sg1" },
+ { _("Sig SG-550 Sniper"), "gfx/vgui/640_sg550" },
+ { _("FN M249 Para"), "gfx/vgui/640_m249" }
};
vguiequipobject_t vguiEquipmentTable[ 7 ] = {
- { EQUIPMENT_KEVLAR, "Kevlar", "gfx/vgui/640_kevlar" },
- { EQUIPMENT_HELMET, "Kevlar & Helmet", "gfx/vgui/640_kevlar_helmet" },
- { EQUIPMENT_FLASHBANG, "Flashband", "gfx/vgui/640_flashbang" },
- { EQUIPMENT_HEGRENADE, "HE Grenade", "gfx/vgui/640_hegrenade" },
- { EQUIPMENT_SMOKEGRENADE, "Smoke Grenade", "gfx/vgui/640_smokegrenade" },
- { EQUIPMENT_DEFUSALKIT, "Defusal Kit", "gfx/vgui/640_defuser" },
- { EQUIPMENT_NIGHTVISION, "NightVision", "gfx/vgui/640_nightvision" },
+ { EQUIPMENT_KEVLAR, _("Kevlar"), "gfx/vgui/640_kevlar" },
+ { EQUIPMENT_HELMET, _("Kevlar & Helmet"), "gfx/vgui/640_kevlar_helmet" },
+ { WEAPON_FLASHBANG, _("Flashbang"), "gfx/vgui/640_flashbang" },
+ { WEAPON_HEGRENADE, _("HE Grenade"), "gfx/vgui/640_hegrenade" },
+ { WEAPON_SMOKEGRENADE, _("Smoke Grenade"), "gfx/vgui/640_smokegrenade" },
+ { EQUIPMENT_DEFUSALKIT, _("Defusal Kit"), "gfx/vgui/640_defuser" },
+ { EQUIPMENT_NIGHTVISION, _("NightVision"), "gfx/vgui/640_nightvision" },
};
// TODO: Clean this up
@@ -89,17 +89,17 @@ void VGUI_BuyMenu_Main( vector vPos ) {
fVGUI_Display = VGUI_NONE;
}
- VGUI_Button( "Handguns", BuyMenu_Main_1, vPos + '16 116 0', '180 24 0' );
- VGUI_Button( "Shotguns", BuyMenu_Main_2, vPos + '16 148 0', '180 24 0' );
- VGUI_Button( "SMGs", BuyMenu_Main_3, vPos + '16 180 0', '180 24 0' );
- VGUI_Button( "Rifles", BuyMenu_Main_4, vPos + '16 212 0', '180 24 0' );
- VGUI_Button( "Machine Gun", BuyMenu_Main_5, vPos + '16 244 0', '180 24 0' );
+ VGUI_Button( _("Handguns"), BuyMenu_Main_1, vPos + '16 116 0', '180 24 0' );
+ VGUI_Button( _("Shotguns"), BuyMenu_Main_2, vPos + '16 148 0', '180 24 0' );
+ VGUI_Button( _("SMGs"), BuyMenu_Main_3, vPos + '16 180 0', '180 24 0' );
+ VGUI_Button( _("Rifles"), BuyMenu_Main_4, vPos + '16 212 0', '180 24 0' );
+ VGUI_Button( _("Machine Gun"), BuyMenu_Main_5, vPos + '16 244 0', '180 24 0' );
- VGUI_Button( "Primary Ammo", BuyMenu_Main_6, vPos + '16 308 0', '180 24 0' );
- VGUI_Button( "Secondary Ammo", BuyMenu_Main_7, vPos + '16 340 0', '180 24 0' );
- VGUI_Button( "Equipment", BuyMenu_Main_8, vPos + '16 372 0', '180 24 0' );
+ VGUI_Button( _("Primary Ammo"), BuyMenu_Main_6, vPos + '16 308 0', '180 24 0' );
+ VGUI_Button( _("Secondary Ammo"), BuyMenu_Main_7, vPos + '16 340 0', '180 24 0' );
+ VGUI_Button( _("Equipment"), BuyMenu_Main_8, vPos + '16 372 0', '180 24 0' );
- VGUI_Button( "Exit", BuyMenu_Main_9, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Exit"), BuyMenu_Main_9, vPos + '16 440 0', '180 24 0' );
}
void VGUI_BuyMenu_Back( void ) {
@@ -144,9 +144,9 @@ void VGUI_BuyMenu_WeaponButton( float fWeapon ) {
if ( wptTable[ fWeapon ].iPrice <= getstatf( STAT_MONEY ) ) {
if ( VGUI_Button( vguiWeaponTable[ fWeapon ].sName, VGUI_BuyMenu_BuyWeapon, vVGUIButtonPos, '264 24 0' ) == TRUE ) {
drawpic( vVGUIWindowPos + '328 116', vguiWeaponTable[ fWeapon ].sImage, '256 64', '1 1 1', 1 );
- VGUI_Text( sprintf( "Price: %i", wptTable[ fWeapon ].iPrice ), vVGUIWindowPos + '328 250', '8 8 0' );
- VGUI_Text( sprintf( "Caliber: %i", wptTable[ fWeapon ].iCaliber ), vVGUIWindowPos + '328 260', '8 8 0' );
- VGUI_Text( sprintf( "Rounds Per Minute: %d", ( wptTable[ fWeapon ].fAttackFinished) * 3600 ), vVGUIWindowPos + '328 270', '8 8 0' );
+ VGUI_Text( sprintf( _("Price: %i"), wptTable[ fWeapon ].iPrice ), vVGUIWindowPos + '328 250', '8 8 0' );
+ VGUI_Text( sprintf( _("Caliber: %i"), wptTable[ fWeapon ].iCaliber ), vVGUIWindowPos + '328 260', '8 8 0' );
+ VGUI_Text( sprintf( _("Rounds Per Minute: %d"), ( wptTable[ fWeapon ].fAttackFinished) * 3600 ), vVGUIWindowPos + '328 270', '8 8 0' );
}
} else {
VGUI_FakeButton( vguiWeaponTable[ fWeapon ].sName, vVGUIButtonPos, '264 24 0' );
@@ -168,7 +168,7 @@ void VGUI_BuyMenu_EquipmentButton( float fID ) {
if ( eqptTable[ fID ].iPrice <= getstatf( STAT_MONEY ) ) {
if ( VGUI_Button( vguiEquipmentTable[ fID ].sName, VGUI_BuyMenu_BuyEquipment, vVGUIButtonPos, '180 24 0' ) == TRUE ) {
drawpic( vVGUIWindowPos + '290 116', vguiEquipmentTable[ fID ].sImage, '256 64', '1 1 1', 1 );
- VGUI_Text( sprintf( "Price: %i", eqptTable[ fID ].iPrice ) , vVGUIWindowPos + '256 250', '8 8 0' );
+ VGUI_Text( sprintf( _("Price: %i"), eqptTable[ fID ].iPrice ) , vVGUIWindowPos + '256 250', '8 8 0' );
}
} else {
VGUI_FakeButton( vguiEquipmentTable[ fID ].sName, vVGUIButtonPos, '180 24 0' );
@@ -198,7 +198,7 @@ void VGUI_BuyMenu_Handguns( vector vPos ) {
VGUI_BuyMenu_WeaponButton( WEAPON_FIVESEVEN );
}
- VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Back"), VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
}
/*
@@ -212,7 +212,7 @@ void VGUI_BuyMenu_Shotguns( vector vPos ) {
VGUI_BuyMenu_WeaponButton( WEAPON_M3 );
VGUI_BuyMenu_WeaponButton( WEAPON_XM1014 );
- VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Back"), VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
}
/*
@@ -236,7 +236,7 @@ void VGUI_BuyMenu_SMGs( vector vPos ) {
VGUI_BuyMenu_WeaponButton( WEAPON_TMP );
}
- VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Back"), VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
}
/*
@@ -267,7 +267,7 @@ void VGUI_BuyMenu_Rifles( vector vPos ) {
VGUI_BuyMenu_WeaponButton( WEAPON_SG550 );
}
- VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Back"), VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
}
/*
@@ -280,7 +280,7 @@ void VGUI_BuyMenu_Machineguns( vector vPos ) {
VGUI_BuyMenu_WeaponButton( WEAPON_PARA );
- VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Back"), VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
}
/*
@@ -303,5 +303,5 @@ void VGUI_BuyMenu_Equipment( vector vPos ) {
VGUI_BuyMenu_EquipmentButton( 6 );
- VGUI_Button( "Back", VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
+ VGUI_Button( _("Back"), VGUI_BuyMenu_Back, vPos + '16 440 0', '180 24 0' );
}
diff --git a/Source/Client/VGUIMOTD.c b/Source/Client/VGUIMOTD.c
index 99902a37..6964480f 100755
--- a/Source/Client/VGUIMOTD.c
+++ b/Source/Client/VGUIMOTD.c
@@ -35,5 +35,5 @@ void VGUI_MessageOfTheDay( vector vPos ) {
vTextPos_y += 10;
}
- VGUI_Button( "OK", MessageOfTheDay_ButtonOK, vPos + '16 440 0', '80 24 0' );
+ VGUI_Button( _("OK"), MessageOfTheDay_ButtonOK, vPos + '16 440 0', '80 24 0' );
}
diff --git a/Source/Client/VGUIRadio.c b/Source/Client/VGUIRadio.c
index 06ba9603..43fc67bb 100755
--- a/Source/Client/VGUIRadio.c
+++ b/Source/Client/VGUIRadio.c
@@ -73,7 +73,7 @@ void VGUI_Radio_Draw( void ) {
vSize_y = ( 10 * VGUIRADIO_COMMANDS ) + 64;
vPos = [ 16, vVideoResolution_y - 148 - vSize_y ];
- VGUI_WindowSmall( "Radio Commands", vPos, vSize );
+ VGUI_WindowSmall( _("Radio Commands"), vPos, vSize );
vPos_y += 24;
vPos_x += 8;
@@ -86,7 +86,7 @@ void VGUI_Radio_Draw( void ) {
vSize_y = ( 10 * VGUIRADIO_GROUPCOMMANDS ) + 64;
vPos = [ 16, vVideoResolution_y - 148 - vSize_y ];
- VGUI_WindowSmall( "Group Radio Commands", vPos, vSize );
+ VGUI_WindowSmall( _("Group Radio Commands"), vPos, vSize );
vPos_y += 24;
vPos_x += 8;
@@ -99,7 +99,7 @@ void VGUI_Radio_Draw( void ) {
vSize_y = ( 10 * VGUIRADIO_RESPONSES ) + 64;
vPos = [ 16, vVideoResolution_y - 148 - vSize_y ];
- VGUI_WindowSmall( "Radio Responses", vPos, vSize );
+ VGUI_WindowSmall( _("Radio Responses"), vPos, vSize );
vPos_y += 24;
vPos_x += 8;
@@ -110,7 +110,7 @@ void VGUI_Radio_Draw( void ) {
}
vPos_y += 20;
- VGUI_Text( "0) Back", vPos, '8 8 0' );
+ VGUI_Text( sprintf( "0) %s", _("Back") ), vPos, '8 8 0' );
if ( fInputKeyCode == 48 ) {
fVGUI_Display = VGUI_NONE;
diff --git a/Source/Client/VGUIScoreboard.c b/Source/Client/VGUIScoreboard.c
index 1c628941..fcaeaed4 100755
--- a/Source/Client/VGUIScoreboard.c
+++ b/Source/Client/VGUIScoreboard.c
@@ -21,10 +21,10 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "VGUI.h"
string sScoreTeams[4] = {
- "Spectator",
- "Terrorists",
- "CT Forces",
- "VIP",
+ _("Spectator"),
+ _("Terrorists"),
+ _("CT Forces"),
+ _("VIP"),
};
// This is seperated from the other VGUI stuff so we can check scores while buying and whatnot
@@ -52,9 +52,9 @@ vector VGUI_Scores_DrawTeam( vector vPos, float fTeam ) {
}
if ( getplayerkeyvalue( i, "*dead" ) == "1" ) {
- drawstring( vNewPos + '38 0', sprintf( "%s [DEAD]", getplayerkeyvalue( i, "name" ) ), '8 8 0', vColor, 1, 0 );
+ drawstring( vNewPos + '38 0', sprintf( _("%s [DEAD]"), getplayerkeyvalue( i, "name" ) ), '8 8 0', vColor, 1, 0 );
} else if ( getplayerkeyvalue( i, "*dead" ) == "2" ) {
- drawstring( vNewPos + '38 0', sprintf( "%s [VIP]", getplayerkeyvalue( i, "name" ) ), '8 8 0', vColor, 1, 0 );
+ drawstring( vNewPos + '38 0', sprintf( _("%s [VIP]"), getplayerkeyvalue( i, "name" ) ), '8 8 0', vColor, 1, 0 );
} else {
drawstring( vNewPos + '38 0', getplayerkeyvalue( i, "name" ), '8 8 0', vColor, 1, 0 );
}
@@ -98,7 +98,7 @@ vector VGUI_Scores_DrawTeam( vector vPos, float fTeam ) {
// Now we know the playercount, so let's calculate the position next to the Teamname String and print it
vector vCountPos = vPos + '24 6';
vCountPos_x += stringwidth( sScoreTeams[ fTeam ], FALSE, '16 16 0' ) + 8;
- drawstring( vCountPos, sprintf( "(%i players)", iPlayerCount ), '8 8 0', vColor, 1, 0 );
+ drawstring( vCountPos, sprintf( _("(%i players)"), iPlayerCount ), '8 8 0', vColor, 1, 0 );
}
return vNewPos + '0 24';
}
@@ -135,7 +135,7 @@ void VGUI_Scores_Show( void ) {
drawstring( vMainPos + '24 13', serverkey( "hostname" ), '16 16 0', VGUI_WINDOW_FGCOLOR, 1, 0 );
// Tabs like Score, Ping etc.
- drawstring( vMainPos + '280 32', "SCORE DEATHS LATENCY VOICE", '8 8 0', VGUI_WINDOW_FGCOLOR, 1, 0 );
+ drawstring( vMainPos + '280 32', _("SCORE DEATHS LATENCY VOICE"), '8 8 0', VGUI_WINDOW_FGCOLOR, 1, 0 );
vector vOffset = VGUI_Scores_DrawTeam( vMainPos + '0 50', TEAM_CT );
vOffset = VGUI_Scores_DrawTeam( vOffset, TEAM_T );
diff --git a/Source/Client/VGUITeamSelect.c b/Source/Client/VGUITeamSelect.c
index ae018ba1..1e2d6768 100755
--- a/Source/Client/VGUITeamSelect.c
+++ b/Source/Client/VGUITeamSelect.c
@@ -21,69 +21,69 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#include "VGUI.h"
string sClassInfo[64] = {
- "Phoenix Connexion", "gfx/vgui/640_terror",
- "The Phoenix Faction was formed shortly",
- "after the breakup of the USSR. Having",
- "established a reputation for killing ",
- "anyone that gets in their way, the",
- "the Phoenix Faction is one of the most",
- "feared terrorist groups in Eastern Europe.",
+ _("Phoenix Connexion"), "gfx/vgui/640_terror",
+ _("The Phoenix Faction was formed shortly"),
+ _("after the breakup of the USSR. Having"),
+ _("established a reputation for killing "),
+ _("anyone that gets in their way, the"),
+ _("the Phoenix Faction is one of the most"),
+ _("feared terrorist groups in Eastern Europe."),
- "L337 Krew", "gfx/vgui/640_leet",
- "Middle Eastern fundamentalist group bent",
- "on world domination and various other",
- "evil deeds",
- "",
- "",
- "",
+ _("L337 Krew"), "gfx/vgui/640_leet",
+ _("Middle Eastern fundamentalist group bent"),
+ _("on world domination and various other"),
+ _("evil deeds"),
+ _(""),
+ _(""),
+ _(""),
- "Arctic Avengers", "gfx/vgui/640_arctic",
- "Swedish terrorist faction founded in 1977.",
- "Famous for their bombing of the Canadian",
- "embassy in 1990.",
- "",
- "",
- "",
+ _("Arctic Avengers"), "gfx/vgui/640_arctic",
+ _("Swedish terrorist faction founded in 1977."),
+ _("Famous for their bombing of the Canadian"),
+ _("embassy in 1990."),
+ _(""),
+ _(""),
+ _(""),
- "Guerilla Warfare", "gfx/vgui/640_guerilla",
- "A terrorist faction founded in the",
- "Middle East, Guerilla Warfare, has a",
- "reputation for ruthlessness. Their disgust",
- "for the American lifestyle was demonstrated",
- "in their 1982 bombing of a school bus full",
- "of Rock and Roll musicians.",
+ _("Guerilla Warfare"), "gfx/vgui/640_guerilla",
+ _("A terrorist faction founded in the"),
+ _("Middle East, Guerilla Warfare, has a"),
+ _("reputation for ruthlessness. Their disgust"),
+ _("for the American lifestyle was demonstrated"),
+ _("in their 1982 bombing of a school bus full"),
+ _("of Rock and Roll musicians."),
- "Seal Team 6", "gfx/vgui/640_urban",
- "Seal Team 6 (to be known later as DEVGRU)",
- "was founded in 1980 under the command of",
- "Lieutenant-Commander Richard Marcincko.",
- "ST-6 was placed on permanent alert to",
- "respond to terrorist attacks against ",
- "American targets worldwide.",
+ _("Seal Team 6"), "gfx/vgui/640_urban",
+ _("Seal Team 6 (to be known later as DEVGRU)"),
+ _("was founded in 1980 under the command of"),
+ _("Lieutenant-Commander Richard Marcincko."),
+ _("ST-6 was placed on permanent alert to"),
+ _("respond to terrorist attacks against"),
+ _("American targets worldwide."),
- "German GSG9", "gfx/vgui/640_gsg9",
- "GSG-9 was born out of the tragic events",
- "that led to the death of several",
- "Israeli athletes during the 1972 Olympic",
- "games in Munich, Germany.",
- "",
- "",
+ _("German GSG9"), "gfx/vgui/640_gsg9",
+ _("GSG-9 was born out of the tragic events"),
+ _("that led to the death of several"),
+ _("Israeli athletes during the 1972 Olympic"),
+ _("games in Munich, Germany."),
+ _(""),
+ _(""),
- "UK SAS", "gfx/vgui/640_sas",
- "The world-renowned British SAS was founded",
- "in the Second World War by a man named",
- "David Stirling. Their role during WW2",
- "involved gathering intelligence behind enemy",
- "lines and executing sabotage strikes and",
- "assassinations against key targets.",
+ _("UK SAS"), "gfx/vgui/640_sas",
+ _("The world-renowned British SAS was founded"),
+ _("in the Second World War by a man named"),
+ _("David Stirling. Their role during WW2"),
+ _("involved gathering intelligence behind enemy"),
+ _("lines and executing sabotage strikes and"),
+ _("assassinations against key targets."),
- "French GIGN", "gfx/vgui/640_gign",
- "France's elite Counter-Terrorist unit was",
- "designed to be a fast response force",
- "that could decisively react to any large-",
- "scale terrorist incident. Consisting of no",
- "more than 100 men, the GIGN has earned its",
- "reputation through a history of successful ops."
+ _("French GIGN"), "gfx/vgui/640_gign",
+ _("France's elite Counter-Terrorist unit was"),
+ _("designed to be a fast response force"),
+ _("that could decisively react to any large-"),
+ _("scale terrorist incident. Consisting of no"),
+ _("more than 100 men, the GIGN has earned its"),
+ _("reputation through a history of successful ops.")
};
void VGUI_TeamSelect_Main( vector vPos ) {
@@ -127,13 +127,13 @@ void VGUI_TeamSelect_Main( vector vPos ) {
vTextPos_y += 10;
}
- VGUI_Button( "Terrorists", TeamSelect_Main_ButtonT, vPos + '16 116 0', '180 24 0' );
- VGUI_Button( "Counter-Terrorists", TeamSelect_Main_ButtonCT, vPos + '16 148 0', '180 24 0' );
+ VGUI_Button( _("Terrorists"), TeamSelect_Main_ButtonT, vPos + '16 116 0', '180 24 0' );
+ VGUI_Button( _("Counter-Terrorists"), TeamSelect_Main_ButtonCT, vPos + '16 148 0', '180 24 0' );
- VGUI_Button( "Auto-Assign", TeamSelect_Main_ButtonAuto, vPos + '16 336 0', '180 24 0' );
- VGUI_Button( "Spectate", TeamSelect_Main_ButtonSpectate, vPos + '16 368 0', '180 24 0' );
+ VGUI_Button( _("Auto-Assign"), TeamSelect_Main_ButtonAuto, vPos + '16 336 0', '180 24 0' );
+ VGUI_Button( _("Spectate"), TeamSelect_Main_ButtonSpectate, vPos + '16 368 0', '180 24 0' );
- VGUI_Button( "Exit", TeamSelect_Main_Exit, vPos + '16 440 0', '120 24 0' );
+ VGUI_Button( _("Exit"), TeamSelect_Main_Exit, vPos + '16 440 0', '120 24 0' );
}
void VGUI_TeamSelect_Back( void ) {
@@ -175,7 +175,7 @@ void VGUI_TeamSelect_T( vector vPos ) {
VGUI_TeamSelect_Button( 1, TeamSelect_T2, vPos + '16 192 0', '180 24 0' );
VGUI_TeamSelect_Button( 2, TeamSelect_T3, vPos + '16 224 0', '180 24 0' );
VGUI_TeamSelect_Button( 3, TeamSelect_T4, vPos + '16 256 0', '180 24 0' );
- VGUI_Button( "Back", VGUI_TeamSelect_Back, vPos + '16 440 0', '120 24 0' );
+ VGUI_Button( _("Back"), VGUI_TeamSelect_Back, vPos + '16 440 0', '120 24 0' );
}
void VGUI_TeamSelect_CT ( vector vPos ) {
@@ -200,5 +200,5 @@ void VGUI_TeamSelect_CT ( vector vPos ) {
VGUI_TeamSelect_Button( 5, TeamSelect_CT2, vPos + '16 192 0', '180 24 0' );
VGUI_TeamSelect_Button( 6, TeamSelect_CT3, vPos + '16 224 0', '180 24 0' );
VGUI_TeamSelect_Button( 7, TeamSelect_CT4, vPos + '16 256 0', '180 24 0' );
- VGUI_Button( "Back", VGUI_TeamSelect_Back, vPos + '16 440 0', '120 24 0' );
+ VGUI_Button( _("Back"), VGUI_TeamSelect_Back, vPos + '16 440 0', '120 24 0' );
}
diff --git a/Source/FreeCS-CE.prj b/Source/FreeCS-CE.prj
new file mode 100755
index 00000000..049976d3
--- /dev/null
+++ b/Source/FreeCS-CE.prj
@@ -0,0 +1,118 @@
+
![]() + |
+ ![]() + |
+
+
+ Main Page About FreeCS The Team The FAQ Screenshots Downloads + |
+
+
+ About FreeCS The goal of this project is to provide a documented, open-source version of Counter-Strike 1.5. Counter-Strike, being one of the most popular multiplayer games to exist, surprisingly hasn't had +a free-software implementation done until now. +Six cool random things you can do with this: +
|
+
+
![]() + |
+ ![]() + |
+
+
+ Main Page About FreeCS The Team The FAQ Screenshots Downloads + |
+
+
+ Downloads Windows 32-bit: Coming soon, check repo! Windows 64-bit: Coming soon, check repo! Linux 32-bit: Coming soon, check repo! Linux 64-bit: Coming soon, check repo! Due to inconsistent packaging methods across all Linux distributions, I will only provide a tarball for the binaries. Sorry. Check out the source-repo here: https://github.com/eukara/FreeCS This is where you can find FTE QuakeWorlds source-repo: https://sourceforge.net/p/fteqw/ Currently hosted at GitHub. Will move it over to icculus hopefully + |
+
+
![]() + |
+ ![]() + |
+
+
+ Main Page About FreeCS The Team The FAQ Screenshots Downloads + |
+
+
+ The Frequently Asked Questions Please refer to this FAQ before sending any mails or C&D letters to my door. Q: Is this the full version of Counter-Strike? A: +These are only binaries for a rewritten, specific version of +Counter-Strike, the mod. It has nothing to do with the CS games of the +past 15 years. Q: Do I have to own Half-Life to play this? A: +It will run without. Hell, it can even "run" without the CS content. +But you certainly will have difficulties connecting to FreeCS servers. Q: Why do I have to download CS 1.5 manually? A: Legal reasons, cannot re-distribute them without potentially causing some trouble. Q: Why is this not using the Half-Life engine? A: +The SDK for that engine has one of the least open-source friendly +licenses ever written. Open-sourcing a Half-Life mod is actually +against the EULA of that SDK. Making it a QuakeWorld mod means I own +all the rights to it. Q: What does FreeCS mean? A: Primarily +it stands for Free Counter-Strike, as in Free-Software... it can also +mean "free" as in free beer because you don't have to pay anything to +download FreeCS itself. Some people have also speculated that it's a +political message... gotta love synonyms! Q: Can I connect to Counter-Strike 1.5 servers with this? A: No. Q: Can I connect to (anything other than FreeCS) with this? A: No. Q: Hey, can I take redistribute this on the PlayStore and make money off of this? A: +You'd be a scumbag if you did and possibly force me to adjust my +license. If you want to contribute towards a proper Android version, +contact me. Q: What motivated you to do all this? A: Good +memories, love, passion for Counter-Strike. Also as a middle finger to +anyone who told me to "do it better" when criticising the new CS game. Q: How can I contact you for further questions? A: E-Mail! Please send it to: marco at icculus dot org + |
+
+
![]() + |
+ ![]() + |
+
+
+ Main Page About FreeCS The Team The FAQ Screenshots Downloads + |
+
+
+ Main Page Hello! Welcome to the official site for FreeCS. Check out those links on the left side. They're for navigation. Gotta love the Web!(TM) + |
+
+
![]() + |
+ ![]() + |
+
+
+ Main Page About FreeCS The Team The FAQ Screenshots Downloads + |
+
+
+ ![]() ![]() ![]() ![]() ![]() + |
+
+
![]() + |
+ ![]() + |
+
+
+ Main Page About FreeCS The Team The FAQ Screenshots Downloads + |
+
+
+ The Team Project Founder: Marco 'eukara' Hladik Programming: See Project Founder Website: See Programming Hosting: Ryan C. Gordon aka icculus! By the way, if you have experience making websites... shoot me a mail. As you can probably tell: I don't! + |
+
+