Work towards grenades, translations etc.

This commit is contained in:
Marco Cawthorne 2017-06-21 14:50:02 +02:00
parent 4622e282e2
commit f68a9b9f25
44 changed files with 1009 additions and 251 deletions

View file

@ -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();

View file

@ -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":

View file

@ -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;
}
}
}
}

View file

@ -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 }
};
/*

View file

@ -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' );
}

View file

@ -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' );
}

View file

@ -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;

View file

@ -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 );

View file

@ -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' );
}

118
Source/FreeCS-CE.prj Executable file
View file

@ -0,0 +1,118 @@
<project version="Crimson Editor 3.60">
<category name="Client" expanded="no">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Defs.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Draw.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Entities.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Event.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\HUD.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\HUDCrosshair.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\HUDOrbituaries.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\HUDWeaponSelect.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Init.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Nightvision.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Player.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\progs.src" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\Sound.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUI.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUI.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIBuyMenu.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIMOTD.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIObjects.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIRadio.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUIScoreboard.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUISpectator.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\VGUITeamSelect.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Client\View.c" />
</category>
<category name="Server" expanded="no">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\AmbientSound.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Ammo.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\ArmouryEntity.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Client.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Damage.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Defs.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\EntHostage.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Entities.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\EnvObjects.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Footsteps.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncBombTarget.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncBreakable.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncButton.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncBuyZone.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncDoor.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncDoorRotating.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncEscapeZone.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncHostageRescue.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncLadder.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncPushable.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\FuncVIPSafetyZone.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Input.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Light.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Main.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Money.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\PhysicsMove.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Player.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\progs.src" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Rules.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Spawn.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Timer.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\TraceAttack.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Server\Triggers.c" />
</category>
<category name="Menu" expanded="yes">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Defs.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Draw.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Init.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Input.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Menu_Create.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Menu_Options.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Menu_Quit.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Menu_Replays.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Menu_Servers.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\Objects.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Menu\progs.src" />
</category>
<category name="Shared" expanded="no">
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Animations.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\BaseMelee.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Effects.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Equipment.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Radio.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponAK47.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponAUG.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponAWP.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponBase.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponC4Bomb.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponDeagle.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponElites.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponFiveSeven.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponFlashbang.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponG3SG1.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponGlock18.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponHEGrenade.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponKnife.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponM3.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponM4A1.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponMac10.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponMP5.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponP228.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponP90.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponPara.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\Weapons.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponScout.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponSG550.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponSG552.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponSmokeGrenade.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponTMP.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponUMP45.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponUSP45.c" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Shared\WeaponXM1014.c" />
</category>
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Builtins.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Globals.h" />
<localfile path="C:\Cygwin\home\eukara\Projects\FreeCS\Source\Math.h" />
</project>
<workspace version="Crimson Editor 3.60">
</workspace>

View file

@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#define PLAYER_SENDFLAG_UPDATE 1
#define PLAYER_SENDFLAG_INGAME 2
string sCSPlayers[9] = {
string sCSPlayers[ 9 ] = {
"",
"models/player/terror/terror.mdl",
"models/player/leet/leet.mdl",
@ -58,6 +58,9 @@ enum {
STAT_SLOT_SECONDARY,
STAT_SLOT_GRENADE,
STAT_EQUIPMENT,
STAT_ITEM_FLASHBANG,
STAT_ITEM_HEGRENADE,
STAT_ITEM_SMOKEGRENADE,
STAT_CURRENT_MAG,
STAT_CURRENT_CALIBER,
STAT_PROGRESS,
@ -114,17 +117,11 @@ enum {
WEAPON_SMOKEGRENADE
};
#define CS_EQUIPMENT_COUNT 7
#define CS_EQUIPMENT_COUNT 7
#define EQUIPMENT_KEVLAR 1
#define EQUIPMENT_HELMET 2
#define EQUIPMENT_DEFUSALKIT 32
#define EQUIPMENT_NIGHTVISION 64
//#define WEAPON_C4BOMB 32
#define EQUIPMENT_FLASHBANG 64
#define EQUIPMENT_HEGRENADE 128
#define EQUIPMENT_SMOKEGRENADE 256
#define EQUIPMENT_DEFUSALKIT 4
#define EQUIPMENT_NIGHTVISION 8
enum {
CALIBER_50AE = 1,

View file

@ -44,8 +44,14 @@ Not Toggled (32) - Older FGDs show this as Not Looped.
.float pitch;
void ambient_generic( void ) {
static float ambient_generic_send( entity ePEnt, float fChanged ) {
sound( self, CHAN_VOICE, self.message, self.health, self.style, self.pitch, 0, SOUNDFLAG_FORCELOOP );
return FALSE;
WriteByte( MSG_ENTITY, ENT_AMBIENTSOUND );
WriteCoord( MSG_ENTITY, self.origin_x );
WriteCoord( MSG_ENTITY, self.origin_y );
WriteCoord( MSG_ENTITY, self.origin_z );
WriteString( MSG_ENTITY, self.message );
WriteFloat( MSG_ENTITY, self.health );
WriteByte( MSG_ENTITY, self.style );
return TRUE;
}
static void ambient_generic_use( void ) {
sound( self, CHAN_VOICE, self.message, self.health, self.style, self.pitch );
@ -88,7 +94,7 @@ void ambient_generic( void ) {
self.vUse = ambient_generic_use;
} else {
self.noise = self.message; // Needed later for resuming
self.pvsflags = PVSF_USEPHS;
self.pvsflags = PVSF_NOREMOVE | PVSF_IGNOREPVS;
self.vUse = ambient_generic_useloop;
self.SendEntity = ambient_generic_send;
self.state = TRUE;

View file

@ -33,11 +33,11 @@ int iArmouryItems[ 19 ] = {
WEAPON_M3,
WEAPON_XM1014,
WEAPON_PARA,
EQUIPMENT_FLASHBANG,
EQUIPMENT_HEGRENADE,
WEAPON_FLASHBANG,
WEAPON_HEGRENADE,
EQUIPMENT_KEVLAR,
EQUIPMENT_HELMET,
EQUIPMENT_SMOKEGRENADE,
WEAPON_SMOKEGRENADE,
};
string sArmouryModels[ 19 ] = {

View file

@ -43,6 +43,13 @@ enum {
BODY_LEGRIGHT
};
// Grenade states
enum {
GRENADE_UNREADY,
GRENADE_PULLING,
GRENADE_READY
};
// Player specific fields
.float fInBuyZone;
.float fInHostageZone;

View file

@ -91,6 +91,10 @@ void worldspawn( void ) {
precache_model( sWeaponModels[ i ] );
}
precache_model( "models/w_flashbang.mdl" );
precache_model( "models/w_hegrenade.mdl" );
precache_model( "models/w_smokegrenade.mdl" );
precache_model( sCSPlayers[1] );
precache_model( sCSPlayers[2] );
precache_model( sCSPlayers[3] );
@ -369,6 +373,9 @@ 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_ITEM_FLASHBANG, EV_INTEGER, iAmmo_FLASHBANG );
clientstat( STAT_ITEM_HEGRENADE, EV_INTEGER, iAmmo_HEGRENADE );
clientstat( STAT_ITEM_SMOKEGRENADE, EV_INTEGER, iAmmo_SMOKEGRENADE );
clientstat( STAT_EQUIPMENT, EV_INTEGER, iEquipment );
clientstat( STAT_CURRENT_MAG, EV_INTEGER, iCurrentMag );
clientstat( STAT_CURRENT_CALIBER, EV_INTEGER, iCurrentCaliber );

View file

@ -21,9 +21,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
equipmentinfo_t eqptTable [ CS_EQUIPMENT_COUNT ] = {
{ EQUIPMENT_KEVLAR, 650 },
{ EQUIPMENT_HELMET, 1000 },
{ EQUIPMENT_FLASHBANG, 300 },
{ EQUIPMENT_HEGRENADE, 300 },
{ EQUIPMENT_SMOKEGRENADE, 300 },
{ WEAPON_FLASHBANG, 300 },
{ WEAPON_HEGRENADE, 300 },
{ WEAPON_SMOKEGRENADE, 300 },
{ EQUIPMENT_DEFUSALKIT, 200 },
{ EQUIPMENT_NIGHTVISION, 1250 },
};
@ -35,7 +35,25 @@ void CSEv_PlayerBuyEquipment_f( float fID ) {
}
if ( ( self.fMoney - eqptTable[ fID ].iPrice ) >= 0 ) {
if ( eqptTable[ fID ].iID == EQUIPMENT_KEVLAR ) {
if ( eqptTable[ fID ].iID == WEAPON_HEGRENADE ) {
if ( self.iAmmo_HEGRENADE < 2 ) {
self.iAmmo_HEGRENADE++;
} else {
centerprint( self, "You can't carry any more!" );
}
} else if ( eqptTable[ fID ].iID == WEAPON_FLASHBANG ) {
if ( self.iAmmo_FLASHBANG < 2 ) {
self.iAmmo_FLASHBANG++;
} else {
centerprint( self, "You can't carry any more!" );
}
} else if ( eqptTable[ fID ].iID == WEAPON_SMOKEGRENADE ) {
if ( self.iAmmo_SMOKEGRENADE < 2 ) {
self.iAmmo_SMOKEGRENADE++;
} else {
centerprint( self, "You can't carry any more!" );
}
} else if ( eqptTable[ fID ].iID == EQUIPMENT_KEVLAR ) {
if ( self.armor == 100 ) {
// You already own kevlar etc.
centerprint( self, "You already have kevlar!" );
@ -76,7 +94,7 @@ void CSEv_PlayerBuyEquipment_f( float fID ) {
self.fAttackFinished = time + 1.0;
return;
}
}
Money_AddMoney( self, -eqptTable[ fID ].iPrice );
self.iEquipment = self.iEquipment | ( eqptTable[ fID ].iID );

View file

@ -18,33 +18,38 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
.int iMag_GLOCK18;
.int iAmmo_FLASHBANG;
// This is to keep track of us holding down the nade
#ifdef SSQC
.int iMode_FLASHBANG;
#endif
// Weapon Info
weaponinfo_t wptFLASHBANG = {
WEAPON_FLASHBANG, // Identifier
SLOT_GRENADE, // Slot
0, // Price
0, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
50, // Damage Per Bullet
1, // Penetration Multiplier
64, // Bullet Range
0.75, // Range Modifier
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iMag_GLOCK18, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_GRENADE // Animation Type
WEAPON_FLASHBANG, // Identifier
SLOT_GRENADE, // Slot
200, // Price
0, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
50, // Damage Per Bullet
1, // Penetration Multiplier
64, // Bullet Range
0.75, // Range Modifier
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iAmmo_FLASHBANG, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_GRENADE // Animation Type
};
// Anim Table
@ -58,6 +63,7 @@ enum {
void WeaponFLASHBANG_Draw( void ) {
#ifdef SSQC
BaseMelee_Draw();
self.iMode_FLASHBANG = GRENADE_UNREADY;
#else
View_PlayAnimation( ANIM_FLASHBANG_DRAW );
#endif
@ -65,10 +71,75 @@ void WeaponFLASHBANG_Draw( void ) {
void WeaponFLASHBANG_PrimaryFire( void ) {
#ifdef SSQC
static void WeaponFLASHBANG_Release_Ready( void ) {
self.iMode_FLASHBANG = GRENADE_READY;
}
if ( self.iMode_FLASHBANG != GRENADE_UNREADY ) {
return;
}
Client_SendEvent( self, EV_WEAPON_PRIMARYATTACK );
Animation_ShootWeapon();
self.fAttackFinished = time + wptFLASHBANG.fAttackFinished;
// Mark the nade as ready once the pin has been pulled
self.iMode_FLASHBANG = GRENADE_PULLING;
self.think = WeaponFLASHBANG_Release_Ready;
self.nextthink = self.fAttackFinished;
#else
View_PlayAnimation( ANIM_FLASHBANG_PULLPIN );
#endif
}
#ifdef SSQC
void WeaponFLASHBANG_Throw( void ) {
static void WeaponFLASHBANG_Explode( void ) {
remove( self );
}
static void Weapon_FLASHBANG_Touch( void ) {
if ( other.classname == "func_breakable" ) {
Damage_Apply( other, self, 10, self.origin );
}
sound( self, CHAN_WEAPON, sprintf( "weapons/grenade_hit%d.wav", floor( random() * 3 ) + 1 ), 1, ATTN_NORM );
}
makevectors( self.v_angle );
entity eNade = spawn();
setorigin( eNade, ( self.origin + self.view_ofs ) + ( v_forward * 16 ) );
setmodel( eNade, "models/w_flashbang.mdl" );
setsize( eNade, '-4 -4 -4', '4 4 4' );
vector vDir = aim ( self, 100000 );
eNade.owner = self;
eNade.solid = SOLID_TRIGGER;
eNade.angles = vectoangles( vDir );
eNade.velocity = ( vDir * 800 );
eNade.avelocity = ( v_forward * 600 );
eNade.movetype = MOVETYPE_BOUNCE;
eNade.touch = Weapon_FLASHBANG_Touch;
eNade.think = WeaponFLASHBANG_Explode;
eNade.nextthink = time + 3.0f;
self.iAmmo_FLASHBANG--;
if ( !self.iAmmo_FLASHBANG ) {
Weapon_SwitchBest();
}
}
#endif
void WeaponFLASHBANG_Release( void ) {
#ifdef SSQC
if ( self.iMode_FLASHBANG == GRENADE_READY ) {
// Throw immediately
WeaponFLASHBANG_Throw();
self.iMode_FLASHBANG = GRENADE_UNREADY;
} else if ( self.iMode_FLASHBANG == GRENADE_PULLING ) {
// Trying to release the grenade before it's done pulling, throw asap
self.iMode_FLASHBANG = GRENADE_UNREADY;
self.think = WeaponFLASHBANG_Throw;
}
#endif
}

View file

@ -18,33 +18,38 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
.int iMag_HEGRENADE;
.int iAmmo_HEGRENADE;
// This is to keep track of us holding down the nade
#ifdef SSQC
.int iMode_HEGRENADE;
#endif
// Weapon Info
weaponinfo_t wptHEGRENADE = {
WEAPON_HEGRENADE, // Identifier
SLOT_GRENADE, // Slot
0, // Price
0, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
50, // Damage Per Bullet
1, // Penetration Multiplier
64, // Bullet Range
0.75, // Range Modifier
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iMag_HEGRENADE, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_GRENADE // Animation Type
WEAPON_HEGRENADE, // Identifier
SLOT_GRENADE, // Slot
200, // Price
0, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
50, // Damage Per Bullet
1, // Penetration Multiplier
64, // Bullet Range
0.75, // Range Modifier
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iAmmo_HEGRENADE, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_GRENADE // Animation Type
};
// Anim Table
@ -58,6 +63,7 @@ enum {
void WeaponHEGRENADE_Draw( void ) {
#ifdef SSQC
BaseMelee_Draw();
self.iMode_HEGRENADE = GRENADE_UNREADY;
#else
View_PlayAnimation( ANIM_HEGRENADE_DRAW );
#endif
@ -65,10 +71,75 @@ void WeaponHEGRENADE_Draw( void ) {
void WeaponHEGRENADE_PrimaryFire( void ) {
#ifdef SSQC
static void WeaponHEGRENADE_Release_Ready( void ) {
self.iMode_HEGRENADE = GRENADE_READY;
}
if ( self.iMode_HEGRENADE != GRENADE_UNREADY ) {
return;
}
Client_SendEvent( self, EV_WEAPON_PRIMARYATTACK );
Animation_ShootWeapon();
self.fAttackFinished = time + wptHEGRENADE.fAttackFinished;
// Mark the nade as ready once the pin has been pulled
self.iMode_HEGRENADE = GRENADE_PULLING;
self.think = WeaponHEGRENADE_Release_Ready;
self.nextthink = self.fAttackFinished;
#else
View_PlayAnimation( ANIM_HEGRENADE_PULLPIN );
#endif
}
#ifdef SSQC
void WeaponHEGRENADE_Throw( void ) {
static void WeaponHEGRENADE_Explode( void ) {
remove( self );
}
static void Weapon_HEGRENADE_Touch( void ) {
if ( other.classname == "func_breakable" ) {
Damage_Apply( other, self, 10, self.origin );
}
sound( self, CHAN_WEAPON, sprintf( "weapons/grenade_hit%d.wav", floor( random() * 3 ) + 1 ), 1, ATTN_NORM );
}
makevectors( self.v_angle );
entity eNade = spawn();
setorigin( eNade, ( self.origin + self.view_ofs ) + ( v_forward * 16 ) );
setmodel( eNade, "models/w_hegrenade.mdl" );
setsize( eNade, '-4 -4 -4', '4 4 4' );
vector vDir = aim ( self, 100000 );
eNade.owner = self;
eNade.solid = SOLID_TRIGGER;
eNade.angles = vectoangles( vDir );
eNade.velocity = ( vDir * 800 );
eNade.avelocity = ( v_forward * 600 );
eNade.movetype = MOVETYPE_BOUNCE;
eNade.touch = Weapon_HEGRENADE_Touch;
eNade.think = WeaponHEGRENADE_Explode;
eNade.nextthink = time + 3.0f;
self.iAmmo_HEGRENADE--;
if ( !self.iAmmo_HEGRENADE ) {
Weapon_SwitchBest();
}
}
#endif
void WeaponHEGRENADE_Release( void ) {
#ifdef SSQC
if ( self.iMode_HEGRENADE == GRENADE_READY ) {
// Throw immediately
WeaponHEGRENADE_Throw();
self.iMode_HEGRENADE = GRENADE_UNREADY;
} else if ( self.iMode_HEGRENADE == GRENADE_PULLING ) {
// Trying to release the grenade before it's done pulling, throw asap
self.iMode_HEGRENADE = GRENADE_UNREADY;
self.think = WeaponHEGRENADE_Throw;
}
#endif
}

View file

@ -97,6 +97,9 @@ void WeaponM3_PrimaryFire( void ) {
#endif
}
// The gun has no real secondary mode, but part of the reloading uses this function
// mainly for client-side cosmetics. The server doesn't have a function telling
// the client to switch animations (we save 1 byte in networking by reusing this)
void WeaponM3_Reload( void);
void WeaponM3_Secondary( void ) {
#ifdef SSQC

View file

@ -18,33 +18,38 @@ along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
.int iMag_SMOKEGRENADE;
.int iAmmo_SMOKEGRENADE;
// This is to keep track of us holding down the nade
#ifdef SSQC
.int iMode_SMOKEGRENADE;
#endif
// Weapon Info
weaponinfo_t wptSMOKEGRENADE = {
WEAPON_SMOKEGRENADE, // Identifier
SLOT_GRENADE, // Slot
0, // Price
0, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
50, // Damage Per Bullet
1, // Penetration Multiplier
64, // Bullet Range
0.75, // Range Modifier
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iMag_SMOKEGRENADE, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_GRENADE // Animation Type
WEAPON_SMOKEGRENADE, // Identifier
SLOT_GRENADE, // Slot
200, // Price
0, // Caliber ID
1.0, // Max Player Speed
1, // Bullets Per Shot
1, // Clip/MagSize
50, // Damage Per Bullet
1, // Penetration Multiplier
64, // Bullet Range
0.75, // Range Modifier
TYPE_SEMI, // Firing Type
1.0, // Attack-Delay
1.0, // Reload-Delay
iAmmo_9MM, // Caliber Pointer
iAmmo_SMOKEGRENADE, // Clip Pointer
1, // Accuracy Divisor
1.0, // Accuracy Offset
1.0, // Max Inaccuracy
7, // Minimum Crosshair Distance
3, // Crosshair Movement Delta
1.0, // Armor penetration ratio
ATYPE_GRENADE // Animation Type
};
// Anim Table
@ -58,6 +63,7 @@ enum {
void WeaponSMOKEGRENADE_Draw( void ) {
#ifdef SSQC
BaseMelee_Draw();
self.iMode_SMOKEGRENADE = GRENADE_UNREADY;
#else
View_PlayAnimation( ANIM_SMOKEGRENADE_DRAW );
#endif
@ -65,10 +71,75 @@ void WeaponSMOKEGRENADE_Draw( void ) {
void WeaponSMOKEGRENADE_PrimaryFire( void ) {
#ifdef SSQC
static void WeaponSMOKEGRENADE_Release_Ready( void ) {
self.iMode_SMOKEGRENADE = GRENADE_READY;
}
if ( self.iMode_SMOKEGRENADE != GRENADE_UNREADY ) {
return;
}
Client_SendEvent( self, EV_WEAPON_PRIMARYATTACK );
Animation_ShootWeapon();
self.fAttackFinished = time + wptSMOKEGRENADE.fAttackFinished;
// Mark the nade as ready once the pin has been pulled
self.iMode_SMOKEGRENADE = GRENADE_PULLING;
self.think = WeaponSMOKEGRENADE_Release_Ready;
self.nextthink = self.fAttackFinished;
#else
View_PlayAnimation( ANIM_SMOKEGRENADE_PULLPIN );
#endif
}
#ifdef SSQC
void WeaponSMOKEGRENADE_Throw( void ) {
static void WeaponSMOKEGRENADE_Explode( void ) {
remove( self );
}
static void Weapon_SMOKEGRENADE_Touch( void ) {
if ( other.classname == "func_breakable" ) {
Damage_Apply( other, self, 10, self.origin );
}
sound( self, CHAN_WEAPON, sprintf( "weapons/grenade_hit%d.wav", floor( random() * 3 ) + 1 ), 1, ATTN_NORM );
}
makevectors( self.v_angle );
entity eNade = spawn();
setorigin( eNade, ( self.origin + self.view_ofs ) + ( v_forward * 16 ) );
setmodel( eNade, "models/w_smokegrenade.mdl" );
setsize( eNade, '-4 -4 -4', '4 4 4' );
vector vDir = aim ( self, 100000 );
eNade.owner = self;
eNade.solid = SOLID_TRIGGER;
eNade.angles = vectoangles( vDir );
eNade.velocity = ( vDir * 800 );
eNade.avelocity = ( v_forward * 600 );
eNade.movetype = MOVETYPE_BOUNCE;
eNade.touch = Weapon_SMOKEGRENADE_Touch;
eNade.think = WeaponSMOKEGRENADE_Explode;
eNade.nextthink = time + 3.0f;
self.iAmmo_SMOKEGRENADE--;
if ( !self.iAmmo_SMOKEGRENADE ) {
Weapon_SwitchBest();
}
}
#endif
void WeaponSMOKEGRENADE_Release( void ) {
#ifdef SSQC
if ( self.iMode_SMOKEGRENADE == GRENADE_READY ) {
// Throw immediately
WeaponSMOKEGRENADE_Throw();
self.iMode_SMOKEGRENADE = GRENADE_UNREADY;
} else if ( self.iMode_SMOKEGRENADE == GRENADE_PULLING ) {
// Trying to release the grenade before it's done pulling, throw asap
self.iMode_SMOKEGRENADE = GRENADE_UNREADY;
self.think = WeaponSMOKEGRENADE_Throw;
}
#endif
}

View file

@ -206,6 +206,14 @@ Called when letting go one of the weapon firing buttons
*/
void Weapon_Release( void ) {
self.flags = self.flags | FL_SEMI_TOGGLED;
if ( self.weapon == WEAPON_FLASHBANG ) {
WeaponFLASHBANG_Release();
} else if ( self.weapon == WEAPON_HEGRENADE ) {
WeaponHEGRENADE_Release();
} else if ( self.weapon == WEAPON_SMOKEGRENADE ) {
WeaponSMOKEGRENADE_Release();
}
}
/*

47
Source/Web/about.html Executable file
View file

@ -0,0 +1,47 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="SHORTCUT ICON" href="site.ico">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>FreeCS - About FreeCS</title>
<meta content="eukara" name="author"></head>
<body style="color: white; background-color: transparent; background-image: url(back.gif);" alink="#99ffff" link="#ccccff" vlink="#ccccff">
<table style="text-align: left; height: 149px; width: 636px; font-family: Times New Roman,Times,serif; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top; text-align: center; height: 74px; width: 128px;"><img style="width: 128px; height: 128px;" alt="" src="logo_m.png"><br>
</td>
<td style="vertical-align: top; height: 74px; width: 398px;"><img src="header.png" alt="" style="width: 450px; height: 128px;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; height: 220px; width: 128px;">
<hr style="width: 100%; height: 2px;"><a href="index.html"><span style="font-weight: bold;"></span></a><a href="index.html">Main Page</a><br><a href="about.html">About FreeCS</a><br><a href="team.html">The&nbsp;Team</a><br><a href="faq.html">The FAQ</a><br><a href="screens.html">Screenshots</a><br><a href="dloads.html">Downloads</a><br>
</td>
<td style="vertical-align: top; height: 220px; width: 398px;">
<hr style="width: 100%; height: 2px;"><span style="font-weight: bold; text-decoration: underline;">About FreeCS</span><br><p>The goal of this project is to provide a documented, open-source version of Counter-Strike 1.5.&nbsp;</p><p>Counter-Strike, being one of the most popular multiplayer games to exist, surprisingly hasn't had
a free-software implementation done until now.</p>
<p>Six cool random things you can do with this:</p>
<ol><li>Play/Host CS on virtually every platform.</li><li>Customize the game to whatever extent you like.</li><li>Create entirely new weapons!</li><li>Create completely new and refreshing gamemodes!</li><li>Have a guarantee to be able to play it 20 years into the future!</li><li>Use it as a base for your own games/mods!</li></ol>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; font-family: Times New Roman,Times,serif;">
<small><span style="font-style: italic;">1995 - 2017 - by Marco 'eukara' Hladik</span></small>
</div>
</body></html>

BIN
Source/Web/back.gif Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 B

43
Source/Web/dloads.html Executable file
View file

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="SHORTCUT ICON" href="site.ico">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>FreeCS - Downloads</title>
<meta content="eukara" name="author"></head>
<body style="color: white; background-color: transparent; background-image: url(back.gif);" alink="#99ffff" link="#ccccff" vlink="#ccccff">
<table style="text-align: left; height: 149px; width: 636px; font-family: Times New Roman,Times,serif; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top; text-align: center; height: 74px; width: 128px;"><img style="width: 128px; height: 128px;" alt="" src="logo_m.png"><br>
</td>
<td style="vertical-align: top; height: 74px; width: 398px;"><img src="header.png" alt="" style="width: 450px; height: 128px;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; height: 220px; width: 128px;">
<hr style="width: 100%; height: 2px;"><a href="index.html"><span style="font-weight: bold;"></span></a><a href="index.html">Main Page</a><br><a href="about.html">About FreeCS</a><br><a href="team.html">The&nbsp;Team</a><br><a href="faq.html">The FAQ</a><br><a href="screens.html">Screenshots</a><br><a href="dloads.html">Downloads</a><br>
</td>
<td style="vertical-align: top; height: 220px; width: 398px;">
<hr style="width: 100%; height: 2px;"><span style="font-weight: bold; text-decoration: underline;">Downloads</span><br><br>Windows 32-bit: Coming soon, check repo!<br>Windows 64-bit: Coming soon, check repo!<br>Linux 32-bit: Coming soon, check repo!<br>Linux 64-bit: Coming soon, check repo!<br><br>Due to inconsistent packaging methods across all Linux distributions, I will only provide a tarball for the binaries. Sorry.<br><br>Check out the source-repo here:<br><a href="https://github.com/eukara/FreeCS">https://github.com/eukara/FreeCS</a><br><br>This is where you can find FTE QuakeWorlds source-repo:<br><a href="https://sourceforge.net/p/fteqw/">https://sourceforge.net/p/fteqw/</a><br><br>Currently hosted at GitHub. Will move it over to icculus hopefully<br>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; font-family: Times New Roman,Times,serif;">
<small><span style="font-style: italic;">1995 - 2017 - by Marco 'eukara' Hladik</span></small>
</div>
</body></html>

61
Source/Web/faq.html Executable file
View file

@ -0,0 +1,61 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="SHORTCUT ICON" href="site.ico">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>FreeCS - The FAQ</title>
<meta content="eukara" name="author"></head>
<body style="color: white; background-color: transparent; background-image: url(back.gif);" alink="#99ffff" link="#ccccff" vlink="#ccccff">
<table style="text-align: left; height: 149px; width: 636px; font-family: Times New Roman,Times,serif; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top; text-align: center; height: 74px; width: 128px;"><img style="width: 128px; height: 128px;" alt="" src="logo_m.png"><br>
</td>
<td style="vertical-align: top; height: 74px; width: 398px;"><img src="header.png" alt="" style="width: 450px; height: 128px;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; height: 220px; width: 128px;">
<hr style="width: 100%; height: 2px;"><a href="index.html"><span style="font-weight: bold;"></span></a><a href="index.html">Main Page</a><br><a href="about.html">About FreeCS</a><br><a href="team.html">The&nbsp;Team</a><br><a href="faq.html">The FAQ</a><br><a href="screens.html">Screenshots</a><br><a href="dloads.html">Downloads</a><br>
</td>
<td style="vertical-align: top; height: 220px; width: 398px;">
<hr style="width: 100%; height: 2px;"><span style="font-weight: bold; text-decoration: underline;">The Frequently Asked Questions</span><br><br>Please refer to this FAQ before sending any mails or C&amp;D letters to my door.<br><br>Q: Is this the full version of Counter-Strike?<br>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.<br><br>Q: Do I have to own Half-Life to play this?<br>A:
It will run without. Hell, it can even "run" without the CS content.
But you certainly will have difficulties connecting to FreeCS servers.<br><br>Q: Why do I have to download CS 1.5 manually?<br>A: Legal reasons, cannot re-distribute them without potentially causing some trouble.<br><br>Q: Why is this not using the Half-Life engine?<br>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.<br><br>Q: What does FreeCS mean?<br>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!<br><br>Q: Can I connect to Counter-Strike 1.5 servers with this?<br>A: No.<br><br>Q: Can I connect to (anything other than FreeCS) with this?<br>A: No.<br><br>Q: Hey, can I take redistribute this on the PlayStore and make money off of this?<br>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.<br><br>Q: What motivated you to do all this?<br>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.<br><br>Q: How can I contact you for further questions?<br>A: E-Mail! Please send it to: marco at icculus dot org<br>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; font-family: Times New Roman,Times,serif;">
<small><span style="font-style: italic;">1995 - 2017 - by Marco 'eukara' Hladik</span></small>
</div>
</body></html>

BIN
Source/Web/header.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

43
Source/Web/index.html Executable file
View file

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="SHORTCUT ICON" href="site.ico">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>FreeCS - Home</title>
<meta content="eukara" name="author"></head>
<body style="color: white; background-color: transparent; background-image: url(back.gif);" alink="#99ffff" link="#ccccff" vlink="#ccccff">
<table style="text-align: left; height: 149px; width: 636px; font-family: Times New Roman,Times,serif; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top; text-align: center; height: 74px; width: 128px;"><img style="width: 128px; height: 128px;" alt="" src="logo_m.png"><br>
</td>
<td style="vertical-align: top; height: 74px; width: 398px;"><img src="header.png" alt="" style="width: 450px; height: 128px;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; height: 220px; width: 128px;">
<hr style="width: 100%; height: 2px;"><a href="index.html"><span style="font-weight: bold;"></span></a><a href="index.html">Main Page</a><br><a href="about.html">About FreeCS</a><br><a href="team.html">The&nbsp;Team</a><br><a href="faq.html">The FAQ</a><br><a href="screens.html">Screenshots</a><br><a href="dloads.html">Downloads</a><br>
</td>
<td style="vertical-align: top; height: 220px; width: 398px;">
<hr style="width: 100%; height: 2px;"><span style="font-weight: bold; text-decoration: underline;">Main Page</span><br><br>Hello! Welcome to the official site for FreeCS. <br>Check out those links on the left side. They're for navigation.<br>Gotta love the Web!(TM)<br>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; font-family: Times New Roman,Times,serif;">
<small><span style="font-style: italic;">1995 - 2017 - by Marco 'eukara' Hladik</span></small>
</div>
</body></html>

BIN
Source/Web/logo_m.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

43
Source/Web/screens.html Executable file
View file

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="SHORTCUT ICON" href="site.ico">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>FreeCS - Screenshots</title>
<meta content="eukara" name="author"></head>
<body style="color: white; background-color: transparent; background-image: url(back.gif);" alink="#99ffff" link="#ccccff" vlink="#ccccff">
<table style="text-align: left; height: 149px; width: 636px; font-family: Times New Roman,Times,serif; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top; text-align: center; height: 74px; width: 128px;"><img style="width: 128px; height: 128px;" alt="" src="logo_m.png"><br>
</td>
<td style="vertical-align: top; height: 74px; width: 398px;"><img src="header.png" alt="" style="width: 450px; height: 128px;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; height: 220px; width: 128px;">
<hr style="width: 100%; height: 2px;"><a href="index.html"><span style="font-weight: bold;"></span></a><a href="index.html">Main Page</a><br><a href="about.html">About FreeCS</a><br><a href="team.html">The&nbsp;Team</a><br><a href="faq.html">The FAQ</a><br><a href="screens.html">Screenshots</a><br><a href="dloads.html">Downloads</a><br>
</td>
<td style="vertical-align: top; height: 220px; width: 398px;">
<hr style="width: 100%; height: 2px;"><span style="font-weight: bold;"></span><a href="screens/screen1.png"><img style="border: 2px solid ; width: 128px; height: 96px;" alt="Screenshot 1" title="Class Selection" src="screens/screen1_thumb.jpg"></a> <a href="screens/screen2.png"><img style="border: 2px solid ; width: 128px; height: 96px;" alt="Screenshot 2" title="cs_assault CT Spawn" src="screens/screen2_thumb.jpg"></a> <a href="screens/screen3.png"><img style="border: 2px solid ; width: 128px; height: 96px;" alt="Screenshot 3" title="Scoreboard Display" src="screens/screen3_thumb.jpg"></a><br><a href="screens/screen4.png"><img style="border: 2px solid ; width: 128px; height: 96px;" alt="Screenshot 4" title="Correct Lighting" src="screens/screen4_thumb.jpg"></a> <a href="screens/portable.jpg"><img style="border: 2px solid ; width: 128px; height: 72px;" alt="Screenshot 5" title="Running on an Android tablet, natively" src="screens/portable_thmb.jpg"></a><br>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; font-family: Times New Roman,Times,serif;">
<small><span style="font-style: italic;">1995 - 2017 - by Marco 'eukara' Hladik</span></small>
</div>
</body></html>

BIN
Source/Web/screens/portable.jpg Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

BIN
Source/Web/screens/screen1.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 360 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

BIN
Source/Web/screens/screen2.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 621 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6 KiB

BIN
Source/Web/screens/screen3.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 569 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7 KiB

BIN
Source/Web/screens/screen4.png Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

43
Source/Web/team.html Executable file
View file

@ -0,0 +1,43 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html><head>
<link rel="SHORTCUT ICON" href="site.ico">
<meta content="text/html; charset=ISO-8859-1" http-equiv="content-type"><title>FreeCS - The Team</title>
<meta content="eukara" name="author"></head>
<body style="color: white; background-color: transparent; background-image: url(back.gif);" alink="#99ffff" link="#ccccff" vlink="#ccccff">
<table style="text-align: left; height: 149px; width: 636px; font-family: Times New Roman,Times,serif; margin-left: auto; margin-right: auto;" border="0" cellpadding="2" cellspacing="2">
<tbody>
<tr>
<td style="vertical-align: top; text-align: center; height: 74px; width: 128px;"><img style="width: 128px; height: 128px;" alt="" src="logo_m.png"><br>
</td>
<td style="vertical-align: top; height: 74px; width: 398px;"><img src="header.png" alt="" style="width: 450px; height: 128px;"><br>
</td>
</tr>
<tr>
<td style="vertical-align: top; height: 220px; width: 128px;">
<hr style="width: 100%; height: 2px;"><a href="index.html"><span style="font-weight: bold;"></span></a><a href="index.html">Main Page</a><br><a href="about.html">About FreeCS</a><br><a href="team.html">The&nbsp;Team</a><br><a href="faq.html">The FAQ</a><br><a href="screens.html">Screenshots</a><br><a href="dloads.html">Downloads</a><br>
</td>
<td style="vertical-align: top; height: 220px; width: 398px;">
<hr style="width: 100%; height: 2px;"><span style="font-weight: bold; text-decoration: underline;">The Team</span><br><br>Project Founder: Marco 'eukara' Hladik<br>Programming: See Project Founder<br>Website: See Programming<br>Hosting: Ryan C. Gordon aka icculus!<br><br>By the way, if you have experience making websites... shoot me a mail. <br>As you can probably tell: I don't!<br>
</td>
</tr>
</tbody>
</table>
<div style="text-align: center; font-family: Times New Roman,Times,serif;">
<small><span style="font-style: italic;">1995 - 2017 - by Marco 'eukara' Hladik</span></small>
</div>
</body></html>

Binary file not shown.

BIN
freecs/freecs.ico Executable file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Binary file not shown.