diff --git a/README.md b/README.md
index d2c0855..9760ff3 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# FreeCS
+# Tactical Retreat (FreeCS)
[As seen on phoronix.com](https://phoronix.com/scan.php?page=news_item&px=FreeCS-Open-Counter-Strike)
Clean-room reimplementation of Counter-Strike 1.5 (mod-version).
diff --git a/manifest.fmf b/manifest.fmf
deleted file mode 100644
index bde984f..0000000
--- a/manifest.fmf
+++ /dev/null
@@ -1,14 +0,0 @@
-FTEMANIFEST 1
-GAME cstrike
-NAME "Counter-Strike"
-BASEGAME platform
-BASEGAME valve
-BASEGAME cstrike
-
-// you don't really want to change these
-RTCBROKER master.frag-net.com:27950
-PROTOCOLNAME "Nuclide"
-MAINCONFIG game.cfg
-DOWNLOADSURL "http://www.frag-net.com/dl/packages"
-
--exec platform_default.cfg
diff --git a/radiant.game b/radiant.game
new file mode 100644
index 0000000..bfc8b49
--- /dev/null
+++ b/radiant.game
@@ -0,0 +1,26 @@
+
+
diff --git a/radiant.xml b/radiant.xml
new file mode 100644
index 0000000..84fafec
--- /dev/null
+++ b/radiant.xml
@@ -0,0 +1,76 @@
+
+
+
+ "hlcsg"
+ "hlbsp"
+ "hlvis"
+ "hlrad"
+
+ qbsp -hlbsp -basedir "[EnginePath]" -gamedir "[GameName]" -path "[UserEnginePath]"
+ qvis -basedir "[EnginePath]" -gamedir "[GameName]" -path "[UserEnginePath]"
+ qlight -basedir "[EnginePath]" -gamedir "[GameName]" -path "[UserEnginePath]"
+
+
+ [csg] "[MapFile]"
+ [bsp] "[MapFile]"
+ [vis] -full "[MapFile]"
+ [light] -extra "[MapFile]"
+
+
+ [csg] "[MapFile]"
+ [bsp] "[MapFile]"
+ [vis] "[MapFile]"
+ [light] "[MapFile]"
+
+
+ [csg] "[MapFile]"
+ [bsp] "[MapFile]"
+ [vis] -fast "[MapFile]"
+ [light] -fast "[MapFile]"
+
+
+ [csg] "[MapFile]"
+ [bsp] "[MapFile]"
+ [vis] -fast "[MapFile]"
+
+
+ [csg] "[MapFile]"
+ [bsp] "[MapFile]"
+
+
+ [csg] -onlyents "[MapFile]"
+ [bsp]"[MapFile]"
+
+
+
+
+ [qbsp] "[MapFile]"
+ [qvis] "[MapFile]"
+ [qlight] -extra "[MapFile]"
+
+
+ [qbsp] "[MapFile]"
+ [qvis] "[MapFile]"
+ [qlight] "[MapFile]"
+
+
+ [qbsp] "[MapFile]"
+ [qvis] -fast "[MapFile]"
+ [qlight] -fast "[MapFile]"
+
+
+ [qbsp] "[MapFile]"
+ [qvis] -fast "[MapFile]"
+
+
+ [qbsp] "[MapFile]"
+
+
+ [qbsp] -onlyents "[MapFile]"
+
+
+
diff --git a/src/client/Makefile b/src/client/Makefile
index 627019a..2fe44a4 100644
--- a/src/client/Makefile
+++ b/src/client/Makefile
@@ -1,4 +1,4 @@
-CC=fteqcc
+QCC=fteqcc
all:
- $(CC) progs.src
+ $(QCC) progs.src
diff --git a/src/client/cmds.qc b/src/client/cmds.qc
index bb9156b..76b3b01 100644
--- a/src/client/cmds.qc
+++ b/src/client/cmds.qc
@@ -33,7 +33,7 @@ CMD_ChooseTeam(void)
void
CMD_BuyMenu(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
/* only in buy zones... */
if (!(pl.gflags & GF_BUYZONE)) {
diff --git a/src/client/crosshair.qc b/src/client/crosshair.qc
index f06f0d1..92614c2 100644
--- a/src/client/crosshair.qc
+++ b/src/client/crosshair.qc
@@ -27,19 +27,18 @@ var bool autocvar_cl_crosshair_additive = true;
#define CS_CROSS_THICKNESS autocvar_cl_crosshair_thickness
void
-Cstrike_DrawCrosshair(void)
+Cstrike_DrawCrosshair(CSPlayer pl)
{
- player pl = (player)self;
int cross_dist;
int line_length;
/* these are defined in the weapon-code files */
- float distance = pl.cs_cross_mindist;
- float delta = pl.cs_cross_deltadist;
+ float distance = (float)pl.cs_cross_mindist;
+ float delta = (float)pl.cs_cross_deltadist;
if (!(pl.flags & FL_ONGROUND)) {
distance = distance * 2.0f;
- } else if (pl.flags & FL_CROUCHING) { /* crouching... */
+ } else if (pl.IsCrouching()) { /* crouching... */
distance = distance * 0.5f;
} else if (vlen(pl.velocity) > 120) { /* running, not walking */
distance = distance * 1.5f;
diff --git a/src/client/defs.h b/src/client/defs.h
index ff4a016..cd6155a 100644
--- a/src/client/defs.h
+++ b/src/client/defs.h
@@ -17,6 +17,7 @@
#include "hud.h"
#include "radio.h"
#include "../../../valve/src/client/obituary.h"
+#include "../../../valve/src/client/hud_sprite.h"
var int autocvar_cl_autoweaponswitch = TRUE;
@@ -87,7 +88,6 @@ void HUD_DrawAmmo3(void);
void HUD_WeaponPickupNotify(int);
void HUD_DrawAmmoBar(vector pos, float val, float max, float a);
-void Cstrike_DrawCrosshair(void);
void Cstrike_DrawSimpleCrosshair(void);
void Cstrike_DrawScope(void);
void Textmenu_Call(string);
diff --git a/src/client/entities.qc b/src/client/entities.qc
index d37263e..91f0140 100644
--- a/src/client/entities.qc
+++ b/src/client/entities.qc
@@ -21,6 +21,12 @@ ClientGame_EntityUpdate(float id, float new)
case ENT_C4BOMB:
w_c4bomb_parse();
break;
+ case ENT_PLAYER:
+ NSENTITY_READENTITY(CSPlayer, new)
+ break;
+ case ENT_WEAPON:
+ NSENTITY_READENTITY(CSWeapon, new)
+ break;
default:
return (0);
}
diff --git a/src/client/hud.qc b/src/client/hud.qc
index 4732f44..13ad143 100644
--- a/src/client/hud.qc
+++ b/src/client/hud.qc
@@ -284,7 +284,7 @@ void
HUD_DrawHealth(void)
{
vector pos;
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (pl.health != pSeatLocal->m_iHealthOld) {
pSeatLocal->m_flHealthAlpha = 1.0;
@@ -331,7 +331,7 @@ void
HUD_DrawArmor(void)
{
vector pos;
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
pos = g_hudmins + [198, g_hudres[1] - 42];
@@ -405,7 +405,7 @@ HUD_DrawArmor(void)
void
HUD_DrawAmmo1(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
vector pos;
if (pl.a_ammo1 != pSeatLocal->m_iAmmo1Old) {
@@ -428,7 +428,7 @@ HUD_DrawAmmo1(void)
void
HUD_DrawAmmo2(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
vector pos;
if (pl.a_ammo2 != pSeatLocal->m_iAmmo2Old) {
@@ -450,7 +450,7 @@ HUD_DrawAmmo2(void)
void
HUD_DrawAmmo3(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
vector pos;
if (pl.a_ammo3 != pSeatLocal->m_iAmmo3Old) {
@@ -486,7 +486,7 @@ void
HUD_DrawFlashlight(void)
{
vector pos;
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
pos = g_hudmins + [g_hudres[0] - 48, 16];
/* both on, draw both sprites at full intensity */
@@ -531,7 +531,7 @@ HUD_DrawZones(void)
{
int zc = 0;
vector pos = [0,0,0];
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (pl.gflags & GF_BUYZONE) {
zc++;
@@ -652,7 +652,7 @@ HUD_DrawProgress(void)
void
HUD_DrawNotify(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
vector pos;
float a;
@@ -666,7 +666,7 @@ HUD_DrawNotify(void)
}
a = bound(0.0, pSeatLocal->m_flPickupAlpha, 1.0);
- Weapons_HUDPic(pl, pSeatLocal->m_iPickupWeapon, 1, pos, a);
+ //Weapons_HUDPic(pl, pSeatLocal->m_iPickupWeapon, 1, pos, a);
pos[0] += 148;
pos[1] -= 32;
HUD_AmmoNotify_Draw(pos);
@@ -720,12 +720,14 @@ HUD_PlayerNames(void)
void
HUD_Draw(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
g_hud_color = autocvar_con_color * (1 / 255);
/* little point in not drawing these, even if you don't have a suit */
- Weapons_DrawCrosshair(pl);
+ if (pl.m_activeWeapon)
+ pl.m_activeWeapon.UpdateGUI();
+
HUD_DrawWeaponSelect();
Obituary_Draw();
@@ -734,7 +736,7 @@ HUD_Draw(void)
HUD_DrawMoney();
HUD_DrawTimer(0);
- if (!(pl.g_items & ITEM_SUIT)) {
+ if (pl.HasItem("item_suit") == false) {
return;
}
@@ -761,7 +763,7 @@ HUD_DrawSpectator(void)
g_specHUD = spawn(CSSpectateHUD);
g_specHUD.SetPos(video_mins);
- g_specHUD.SetSize(video_res);
+ g_specHUD.SetSize(g_vidsize);
g_specHUD.Draw();
}
diff --git a/src/client/hud_ammonotify.qc b/src/client/hud_ammonotify.qc
index 51fee30..08a5355 100644
--- a/src/client/hud_ammonotify.qc
+++ b/src/client/hud_ammonotify.qc
@@ -83,8 +83,9 @@ HUD_AmmoNotify_Insert(int type, int count)
/* called whenever we should check for pickup updates */
void
-HUD_AmmoNotify_Check(player pl)
+HUD_AmmoNotify_Check(CSPlayer pl)
{
+#if 0
HUD_AmmoNotify_Insert(0, pl.ammo_50ae - pl.ammo_50ae_net);
HUD_AmmoNotify_Insert(1, pl.ammo_762mm - pl.ammo_762mm_net);
HUD_AmmoNotify_Insert(2, pl.ammo_556mm - pl.ammo_556mm_net);
@@ -98,4 +99,5 @@ HUD_AmmoNotify_Check(player pl)
HUD_AmmoNotify_Insert(10, pl.ammo_hegrenade - pl.ammo_hegrenade_net);
HUD_AmmoNotify_Insert(11, pl.ammo_fbgrenade - pl.ammo_fbgrenade_net);
HUD_AmmoNotify_Insert(12, pl.ammo_smokegrenade - pl.ammo_smokegrenade_net);
+#endif
}
\ No newline at end of file
diff --git a/src/client/hud_weaponselect.qc b/src/client/hud_weaponselect.qc
index e072d74..d282fce 100644
--- a/src/client/hud_weaponselect.qc
+++ b/src/client/hud_weaponselect.qc
@@ -14,7 +14,7 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-void View_ForceChange(player pl, int targetWeapon);
+void View_ForceChange(CSPlayer pl, int targetWeapon);
vector g_vecHUDNums[6] =
{
@@ -29,7 +29,7 @@ vector g_vecHUDNums[6] =
void
HUD_DrawWeaponSelect_Forward(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (!pl.activeweapon) {
return;
@@ -57,7 +57,7 @@ HUD_DrawWeaponSelect_Forward(void)
void
HUD_DrawWeaponSelect_Back(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (!pl.activeweapon) {
return;
@@ -85,7 +85,7 @@ HUD_DrawWeaponSelect_Back(void)
void
HUD_DrawWeaponSelect_Trigger(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (pl.activeweapon != pSeat->m_iHUDWeaponSelected)
View_ForceChange(pl, pSeat->m_iHUDWeaponSelected);
@@ -98,7 +98,7 @@ HUD_DrawWeaponSelect_Trigger(void)
void
HUD_DrawWeaponSelect_Last(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (pl.g_items & g_weapons[pSeat->m_iOldWeapon].id) {
pl.activeweapon = pSeat->m_iOldWeapon;
sendevent("PlayerSwitchWeapon", "i", pSeat->m_iOldWeapon);
@@ -114,7 +114,7 @@ HUD_DrawWeaponSelect_Num(vector vecPos, int val)
int
HUD_InSlotPos(int slot, int pos)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
for (int i = 1; i < g_weapons.length; i++) {
if (g_weapons[i].slot == slot && g_weapons[i].slot_pos == pos) {
if (pl.g_items & g_weapons[i].id) {
@@ -130,7 +130,7 @@ HUD_InSlotPos(int slot, int pos)
void
HUD_SlotSelect(int slot)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
int curslot = g_weapons[pSeat->m_iHUDWeaponSelected].slot;
int i;
@@ -184,7 +184,7 @@ HUD_SlotSelect(int slot)
void
HUD_DrawWeaponSelect(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (!pl.activeweapon) {
return;
}
@@ -211,13 +211,13 @@ HUD_DrawWeaponSelect(void)
slot_selected = TRUE;
if (x == wantpos) {
// Selected Sprite
- Weapons_HUDPic(pl, pSeat->m_iHUDWeaponSelected, 1, vecPos, 1.0f);
+ //Weapons_HUDPic(pl, pSeat->m_iHUDWeaponSelected, 1, vecPos, 1.0f);
drawsubpic(vecPos, [170,45], g_hud3_spr,
[0,180/256], [170/256,45/256], g_hud_color, 1, DRAWFLAG_ADDITIVE);
vecPos[1] += 50;
} else if ((b=HUD_InSlotPos(i, x)) != -1) {
// Unselected Sprite
- Weapons_HUDPic(pl, b, 0, vecPos, 1.0f);
+ //Weapons_HUDPic(pl, b, 0, vecPos, 1.0f);
vecPos[1] += 50;
}
} else if (HUD_InSlotPos(i, x) != -1) {
diff --git a/src/client/init.qc b/src/client/init.qc
index 300c683..8af4885 100644
--- a/src/client/init.qc
+++ b/src/client/init.qc
@@ -115,6 +115,9 @@ ClientGame_Init(float apilevel, string enginename, float engineversion)
bool
ClientGame_IsUsingVGUI(void)
{
+#if defined(CZERO) || defined(CSSOURCE)
+ return true;
+#else
/* FTE has a bug with _ infokeys, so we'll accept both formats in case
that gets fixed in the future :/ */
if (getplayerkeyfloat(player_localnum, "vgui_menus") == 1)
@@ -123,6 +126,7 @@ ClientGame_IsUsingVGUI(void)
return true;
return false;
+#endif
}
void VGUI_ShowMOTD(void);
diff --git a/src/client/nightvision.qc b/src/client/nightvision.qc
index 1e6675e..bb6347d 100644
--- a/src/client/nightvision.qc
+++ b/src/client/nightvision.qc
@@ -17,12 +17,14 @@
void
Nightvision_Toggle(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
+#if 0
if (!(pl.g_items & ITEM_NIGHTVISION)) {
pSeatLocal->m_iNightvision = 0;
return;
}
+#endif
pSeatLocal->m_iNightvision = 1 - pSeatLocal->m_iNightvision;
@@ -35,15 +37,17 @@ Nightvision_Toggle(void)
void
Nightvision_PreFrame(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (!pSeatLocal->m_iNightvision)
return;
+#if 0
if (!(pl.g_items & ITEM_NIGHTVISION)) {
pSeatLocal->m_iNightvision = 0;
return;
}
+#endif
dynamiclight_add(pSeat->m_vecPredictedOrigin, 768, [1,1,1]);
}
@@ -51,15 +55,17 @@ Nightvision_PreFrame(void)
void
Nightvision_PostFrame(void)
{
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
if (!pSeatLocal->m_iNightvision)
return;
+#if 0
if (!(pl.g_items & ITEM_NIGHTVISION)) {
pSeatLocal->m_iNightvision = 0;
return;
}
+#endif
drawpic(video_mins, "fade_modulate", g_hudres, [0,1,0], 1.0f, 0);
}
diff --git a/src/client/progs.src b/src/client/progs.src
index 28a8602..75e3b7c 100644
--- a/src/client/progs.src
+++ b/src/client/progs.src
@@ -1,6 +1,6 @@
#pragma target fte_5768
//#pragma flag enable assumeint
-#pragma progs_dat "../../csprogs.dat"
+#pragma progs_dat "../../zpak001.pk3dir/csprogs.dat"
#define CSQC
#define CLIENT
@@ -36,8 +36,8 @@ crosshair.qc
hud_ammonotify.qc
vgui_spectator.qc
hud.qc
-hud_weaponselect.qc
../../../valve/src/client/hud_sprite.qc
+../../../valve/src/client/hud_weaponselect.qc
../../../valve/src/client/scoreboard.qc
radio.qc
diff --git a/src/client/radar.qc b/src/client/radar.qc
index f6472f5..dccac6d 100644
--- a/src/client/radar.qc
+++ b/src/client/radar.qc
@@ -17,69 +17,27 @@
#define CSRADAR_DISTANCE 1024
var string g_cs_radar;
+var NSRadar g_csRadar;
void
Radar_Init(void)
{
g_cs_radar = spriteframe("sprites/radar640.spr", 0, 0.0f);
+
+ g_csRadar = NSRadar::InitEmpty();
}
void
Radar_Draw(void)
{
- vector radpos = g_hudmins + [16,16];
+ vector radpos = g_view.GetHUDCanvasPos() + [16,16];
drawpic(radpos, g_cs_radar, [128,128], [1,1,1], 0.25f, DRAWFLAG_ADDITIVE);
- for (entity a = world; (a = find(a, ::classname, "player"));) {
- vector color;
- vector own_pos = pSeat->m_vecPredictedOrigin;
- vector difference = (a.origin - own_pos);
+ /* these need constant adjustment for when the display changes */
+ g_csRadar.SetViewPosition(radpos);
+ g_csRadar.SetViewSize([128,128]);
+ g_csRadar.UpdateView();
- /* don't draw when we're exceeding the view radius */
- if (vlen(difference) > CSRADAR_DISTANCE)
- continue;
- /* this is perhaps a bit too aggressive, so fix this and uncomment */
-#if 0
- /* test if we can actually see the player */
- traceline(a.origin, own_pos + pSeat->m_ePlayer.view_ofs, MOVE_NORMAL, pSeat->m_ePlayer);
- if (trace_ent != a) {
- traceline(a.origin + [0,0,a.maxs[2]], own_pos + pSeat->m_ePlayer.view_ofs, MOVE_OTHERONLY, pSeat->m_ePlayer);
- if (trace_ent != a) {
- traceline(a.origin + [0,0,a.mins[2]], own_pos + pSeat->m_ePlayer.view_ofs, MOVE_OTHERONLY, pSeat->m_ePlayer);
- if (trace_ent != a) {
- continue;
- }
- }
- }
-#endif
-
- vector matrix;
- float ht;
- makevectors([0,view_angles[1] - 90, 0]);
- matrix[0] = dotproduct(difference, v_forward);
- matrix[1] = dotproduct(difference, v_right);
- matrix[2] = 0;
-
- /* we need to fit 1024 in-game units into the 64px radar image */
- vector apos = radpos + [62,62] + (matrix * (64/CSRADAR_DISTANCE));
-
- if (getplayerkeyfloat(a.entnum-1, "*team") == TEAM_CT)
- color = [115, 155, 205] / 255;
- else
- color = [190, 52, 57] / 255;
-
- drawfill(apos, [4,4], color, 1.0f, DRAWFLAG_NORMAL);
-
- /* do the line indicating the height of the player relative to us */
- ht = fabs(difference[2] * (64 / CSRADAR_DISTANCE));
-
- if (difference[2] > 0)
- drawfill(apos + [1,0], [2,ht], color, 1.0f, DRAWFLAG_NORMAL);
- else if (difference[2] < 0)
- drawfill(apos + [1,-ht], [2,ht], color, 1.0f, DRAWFLAG_NORMAL);
-
- //drawpic(apos, "fade_modulate", [4,4], color, 1.0f, 0);
- }
}
diff --git a/src/client/textmenu.qc b/src/client/textmenu.qc
index a943282..7bf41b0 100644
--- a/src/client/textmenu.qc
+++ b/src/client/textmenu.qc
@@ -85,8 +85,8 @@ CT_SELECT(int n)
void
BUY(int n)
{
- player pl;
- pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl;
+ pl = (CSPlayer)pSeat->m_ePlayer;
int inteam = getplayerkeyfloat(pl.entnum-1, "*team");
switch (n) {
diff --git a/src/client/vgui_buymenu.qc b/src/client/vgui_buymenu.qc
index 3700adf..dcd7b16 100644
--- a/src/client/vgui_buymenu.qc
+++ b/src/client/vgui_buymenu.qc
@@ -220,5 +220,5 @@ VGUI_BuyMenu(void)
}
winBuyMenu.Show();
- winBuyMenu.SetPos((video_res / 2) - (winBuyMenu.GetSize() / 2));
+ winBuyMenu.SetPos((g_vidsize / 2) - (winBuyMenu.GetSize() / 2));
}
diff --git a/src/client/vgui_buypages.qc b/src/client/vgui_buypages.qc
index 27e00b6..74e9ace 100644
--- a/src/client/vgui_buypages.qc
+++ b/src/client/vgui_buypages.qc
@@ -30,6 +30,10 @@ typedef enum
BUYITEM_FIVESEVEN,
BUYITEM_M3,
BUYITEM_XM1014,
+#if defined(CZERO) || defined(CSSOURCE)
+ BUYITEM_FAMAS,
+ BUYITEM_GALIL,
+#endif
BUYITEM_AK47,
BUYITEM_SG552,
BUYITEM_M4A1,
@@ -62,7 +66,7 @@ typedef struct
string titleName; /* the name of the titles.txt entry */
} buyItems_t;
-const buyItems_t g_buyItemList [29] = {
+const buyItems_t g_buyItemList [] = {
{ "BuyWeapon", WEAPON_USP45, "classes/usp.txt", "gfx/vgui/640_usp", "USP45" },
{ "BuyWeapon", WEAPON_GLOCK18, "classes/glock18.txt", "gfx/vgui/640_glock18", "Glock18" },
{ "BuyWeapon", WEAPON_DEAGLE, "classes/deagle.txt", "gfx/vgui/640_deagle", "DesertEagle" },
@@ -71,6 +75,10 @@ const buyItems_t g_buyItemList [29] = {
{ "BuyWeapon", WEAPON_FIVESEVEN, "classes/fiveseven.txt", "gfx/vgui/640_fiveseven", "FiveSeven" },
{ "BuyWeapon", WEAPON_M3, "classes/m3.txt", "gfx/vgui/640_m3", "Super90" },
{ "BuyWeapon", WEAPON_XM1014, "classes/xm1014.txt", "gfx/vgui/640_xm1014", "XM1014" },
+#if defined(CZERO) || defined(CSSOURCE)
+ { "BuyWeapon", WEAPON_FAMAS, "classes/famas.txt", "gfx/vgui/640_famas", "Famas" },
+ { "BuyWeapon", WEAPON_GALIL, "classes/galil.txt", "gfx/vgui/640_galil", "Galil" },
+#endif
{ "BuyWeapon", WEAPON_AK47, "classes/ak47.txt", "gfx/vgui/640_ak47", "AK47" },
{ "BuyWeapon", WEAPON_SG552, "classes/sg552.txt", "gfx/vgui/640_sg552", "SG552" },
{ "BuyWeapon", WEAPON_M4A1, "classes/m4a1.txt", "gfx/vgui/640_m4a1", "M4A1" },
@@ -156,7 +164,7 @@ VGUI_BuyMenu_Page(int buyPage)
static CSBuyItemButton btnBuyItem8;
static CSBuyItemButton btnBuyItem9;
- player pl = (player)pSeat->m_ePlayer;
+ CSPlayer pl = (CSPlayer)pSeat->m_ePlayer;
int inTeam = getplayerkeyfloat(pl.entnum-1, "*team");
@@ -284,7 +292,7 @@ VGUI_BuyMenu_Page(int buyPage)
imgBuyItemPic.SetImage("");
winBuyMenuPage.Show();
- winBuyMenuPage.SetPos((video_res / 2) - (winBuyMenuPage.GetSize() / 2));
+ winBuyMenuPage.SetPos((g_vidsize / 2) - (winBuyMenuPage.GetSize() / 2));
switch (buyPage) {
case BUYPAGE_PISTOLS:
@@ -386,6 +394,18 @@ VGUI_BuyMenu_Page(int buyPage)
btnBuyItem8.Show();
btnBuyItem9.Hide();
+#if defined(CZERO) || defined(CSSOURCE)
+ if (inTeam == TEAM_CT) {
+ btnBuyItem9.SetTitle(Titles_GetTextBody("Famas"));
+ btnBuyItem9.SetTag(BUYITEM_FAMAS);
+ btnBuyItem9.Show();
+ } else {
+ btnBuyItem9.SetTitle(Titles_GetTextBody("Galil"));
+ btnBuyItem9.SetTag(BUYITEM_GALIL);
+ btnBuyItem9.Show();
+ }
+#endif
+
btnBuyItem1.SetTitle(Titles_GetTextBody("AK47"));
btnBuyItem1.SetTag(BUYITEM_AK47);
btnBuyItem2.SetTitle(Titles_GetTextBody("Krieg552"));
diff --git a/src/client/vgui_changeclass_ct.qc b/src/client/vgui_changeclass_ct.qc
index f53f3fd..5c532fa 100644
--- a/src/client/vgui_changeclass_ct.qc
+++ b/src/client/vgui_changeclass_ct.qc
@@ -192,5 +192,5 @@ VGUI_ChooseClassCT(void)
}
winClassSelectionCT.Show();
- winClassSelectionCT.SetPos((video_res / 2) - (winClassSelectionCT.GetSize() / 2));
+ winClassSelectionCT.SetPos((g_vidsize / 2) - (winClassSelectionCT.GetSize() / 2));
}
\ No newline at end of file
diff --git a/src/client/vgui_changeclass_t.qc b/src/client/vgui_changeclass_t.qc
index d0fad34..bbe07d3 100644
--- a/src/client/vgui_changeclass_t.qc
+++ b/src/client/vgui_changeclass_t.qc
@@ -193,5 +193,5 @@ VGUI_ChooseClassT(void)
}
winClassSelection.Show();
- winClassSelection.SetPos((video_res / 2) - (winClassSelection.GetSize() / 2));
+ winClassSelection.SetPos((g_vidsize / 2) - (winClassSelection.GetSize() / 2));
}
\ No newline at end of file
diff --git a/src/client/vgui_chooseteam.qc b/src/client/vgui_chooseteam.qc
index f3ed81d..e5cb099 100644
--- a/src/client/vgui_chooseteam.qc
+++ b/src/client/vgui_chooseteam.qc
@@ -163,5 +163,5 @@ VGUI_ChooseTeam(void)
}
winChooseTeam.Show();
- winChooseTeam.SetPos((video_res / 2) - (winChooseTeam.GetSize() / 2));
+ winChooseTeam.SetPos((g_vidsize / 2) - (winChooseTeam.GetSize() / 2));
}
diff --git a/src/client/vgui_motd.qc b/src/client/vgui_motd.qc
index 26c022d..2293217 100644
--- a/src/client/vgui_motd.qc
+++ b/src/client/vgui_motd.qc
@@ -68,5 +68,5 @@ VGUI_ShowMOTD(void)
}
winMotd.Show();
- winMotd.SetPos((video_res / 2) - (winMotd.GetSize() / 2));
+ winMotd.SetPos((g_vidsize / 2) - (winMotd.GetSize() / 2));
}
diff --git a/src/server/Makefile b/src/server/Makefile
index 627019a..2fe44a4 100644
--- a/src/server/Makefile
+++ b/src/server/Makefile
@@ -1,4 +1,4 @@
-CC=fteqcc
+QCC=fteqcc
all:
- $(CC) progs.src
+ $(QCC) progs.src
diff --git a/src/server/ammo.qc b/src/server/ammo.qc
index 87d2565..3fa4ed6 100644
--- a/src/server/ammo.qc
+++ b/src/server/ammo.qc
@@ -108,11 +108,12 @@ ammoinfo_t cs_ammoinfo[11] = {
};
int
-Ammo_BuyCaliber(player pl, int cal, int free)
+Ammo_BuyCaliber(CSPlayer pl, int cal, int free)
{
int *ptr_ammo = __NULL__;
int rv = 0;
+#if 0
while (pl.money - cs_ammoinfo[cal].price > 0 || free) {
switch (cal) {
case CALIBER_50AE:
@@ -166,6 +167,7 @@ Ammo_BuyCaliber(player pl, int cal, int free)
rv = 1;
}
+#endif
return rv;
}
@@ -173,9 +175,10 @@ Ammo_BuyCaliber(player pl, int cal, int free)
void
Ammo_BuySecondary(NSClientPlayer pp, int free)
{
+#if 0
int cal = 0;
int ps = 0;
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
for (int i = 1; i < g_weapons.length; i++) {
if ((pl.g_items & g_weapons[i].id) && (g_weapons[i].slot == 1)) {
@@ -210,6 +213,7 @@ Ammo_BuySecondary(NSClientPlayer pp, int free)
Sound_Play(pl, CHAN_ITEM, "buy.ammo");
}
Weapons_RefreshAmmo(pl);
+#endif
}
/* We want to loop through all the possible weapons in case the server
@@ -217,7 +221,7 @@ Ammo_BuySecondary(NSClientPlayer pp, int free)
void
CSEv_AmmoBuySecondary(void)
{
- player pl = (player)self;
+ CSPlayer pl = (CSPlayer)self;
CSGameRules rules = (CSGameRules)g_grMode;
if (rules.BuyingPossible(pl) == FALSE) {
@@ -230,9 +234,10 @@ CSEv_AmmoBuySecondary(void)
void
Ammo_BuyPrimary(NSClientPlayer pp, int free)
{
+#if 0
int ps = 0;
int cal = 0;
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
for (int i = 1; i < g_weapons.length; i++) {
if ((pl.g_items & g_weapons[i].id) && (g_weapons[i].slot == 0)) {
@@ -258,6 +263,14 @@ Ammo_BuyPrimary(NSClientPlayer pp, int free)
case WEAPON_TMP:
cal = CALIBER_9MM;
break;
+#if defined(CZERO) || defined(CSSOURCE)
+ case WEAPON_GALIL:
+ cal = CALIBER_762MM;
+ break;
+ case WEAPON_FAMAS:
+ cal = CALIBER_762MM;
+ break;
+#endif
case WEAPON_AK47:
cal = CALIBER_762MM;
break;
@@ -298,12 +311,13 @@ Ammo_BuyPrimary(NSClientPlayer pp, int free)
}
Weapons_RefreshAmmo(pl);
+#endif
}
void
CSEv_AmmoBuyPrimary(void)
{
- player pl = (player)self;
+ CSPlayer pl = (CSPlayer)self;
CSGameRules rules = (CSGameRules)g_grMode;
if (rules.BuyingPossible(pl) == FALSE) {
@@ -316,7 +330,7 @@ CSEv_AmmoBuyPrimary(void)
void
Ammo_AutoFill(NSClientPlayer pp)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
if (autocvar_fcs_fillweapons == FALSE) {
return;
diff --git a/src/server/armoury_entity.qc b/src/server/armoury_entity.qc
index d0148c4..83f6660 100644
--- a/src/server/armoury_entity.qc
+++ b/src/server/armoury_entity.qc
@@ -53,26 +53,26 @@ List of available items:
var int autocvar_fcs_nopickups = FALSE;
-int g_cstrike_armouryitems[19] = {
- WEAPON_MP5,
- WEAPON_TMP,
- WEAPON_P90,
- WEAPON_MAC10,
- WEAPON_AK47,
- WEAPON_SG552,
- WEAPON_M4A1,
- WEAPON_AUG,
- WEAPON_SCOUT,
- WEAPON_G3SG1,
- WEAPON_AWP,
- WEAPON_M3,
- WEAPON_XM1014,
- WEAPON_PARA,
- WEAPON_FLASHBANG,
- WEAPON_HEGRENADE,
- 0,/*EQUIPMENT_KEVLAR,*/
- 0,/*EQUIPMENT_HELMET,*/
- WEAPON_SMOKEGRENADE
+string g_cstrike_armouryitems[19] = {
+ "weapon_mp5navy",
+ "weapon_tmp",
+ "weapon_p90",
+ "weapon_max10",
+ "weapon_ak47",
+ "weapon_sg552",
+ "weapon_m4a1",
+ "weapon_aug",
+ "weapon_scout",
+ "weapon_g3sg1",
+ "weapon_awp",
+ "weapon_m3",
+ "weapon_xm1014",
+ "weapon_m249",
+ "weapon_flashbang",
+ "weapon_hegrenade",
+ "equipment_kevlar",
+ "equipment_helmet",
+ "weapon_smokegrenade"
};
string g_cstrike_armourymodels[19] = {
@@ -165,12 +165,12 @@ armoury_entity::Restore(string strKey, string strValue)
void
armoury_entity::Touch(entity eToucher)
{
- player pl;
+ CSPlayer pl;
if (eToucher.classname != "player") {
return;
}
- pl = (player)eToucher;
+ pl = (CSPlayer)eToucher;
/* armor is separate from weapons */
if (m_iID == 17 || m_iID == 16) {
@@ -194,7 +194,7 @@ armoury_entity::Touch(entity eToucher)
sound(pl, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_NORM);
} else { /* weapon pickup code */
- if (Weapons_AddItem(pl, g_cstrike_armouryitems[m_iID], -1) == FALSE)
+ if (pl.GiveItem(g_cstrike_armouryitems[m_iID]) == FALSE)
return;
sound(pl, CHAN_ITEM, "items/gunpickup2.wav", 1, ATTN_NORM);
@@ -211,7 +211,7 @@ armoury_entity::Touch(entity eToucher)
void
armoury_entity::Respawn(void)
{
- SetOrigin(GetSpawnOrigin());
+ super::Respawn();
SetSolid(SOLID_TRIGGER);
SetModel(g_cstrike_armourymodels[m_iID]);
SetSize([-16,-16,0], [16,16,16]);
diff --git a/src/server/bot.qc b/src/server/bot.qc
index 5ef69d6..360ea1b 100644
--- a/src/server/bot.qc
+++ b/src/server/bot.qc
@@ -159,31 +159,8 @@ void csbot::Roam(vector roamOrigin, int maxDistance) {
randLoc.x += sin(radian) * distance;
randLoc.y += cos(radian) * distance;
- /* Find closest waypoint to our random location. */
- float flBestDist = COST_INFINITE;
- int iBestNodeIndex = -1;
- for (int i = 0; i < g_iNodes; i++) {
- float fDist = vlen(g_pNodes[i].origin - randLoc) - g_pNodes[i].radius;
-
- if (fDist > (float)maxDistance) {
- /* Distance is greater then our maxDistance */
- continue;
- }
-
- if (fDist < flBestDist) {
- flBestDist = fDist;
- iBestNodeIndex = i;
- }
- }
-
- if (iBestNodeIndex == -1) {
- /* TODO No waypoint in range found */
- print("WARNING!: Roaming failed, could not find waypoint in range.\n");
- return;
- }
-
/* Go to the random waypoint. */
- RouteToPosition(g_pNodes[iBestNodeIndex].origin);
+ RouteToPosition(Nodes_PositionOfClosestNode(randLoc));
}
void
@@ -236,7 +213,7 @@ csbot::CreateObjective(void)
} else {
/* Aim at the bomb. */
input_buttons |= INPUT_BUTTON8; // duck
- if ((flags & FL_ONUSABLE)) {
+ if ((HasVFlags(VFL_ONUSABLE))) {
// Aimed at the bomb, ready to defuse!
ChatSayTeam("Defusing!");
input_buttons |= INPUT_BUTTON5;
@@ -262,13 +239,14 @@ csbot::CreateObjective(void)
else {
if (team == TEAM_T) {
/* T-bot: plant bomb */
- if ((g_items & ITEM_C4BOMB)) {
+ if (HasItem("weapon_c4")) {
/* We carry the bomb */
if (m_gflagsBackup & GF_BOMBZONE) {
/* We are at a bombsite and ready to plant the bomb */
if (activeweapon != WEAPON_C4BOMB) {
+ /* TODO: REPLACE THIS WITH NSNAVAI METHOD */
activeweapon = WEAPON_C4BOMB;
- Weapons_Draw((player)self);
+ //Weapons_Draw((CSPlayer)self);
}
if (!m_actionIsPlanting) {
@@ -346,27 +324,17 @@ void csbot::AimLerp(vector aimpos, float flLerp) {
vector oldAngle = v_angle;
/* that's the old angle */
- makevectors(v_angle);
- vecNewAngles = v_forward;
+ vecNewAngles = anglesToForward(v_angle);
/* aimdir = new final angle */
- aimdir = vectoangles(aimpos - origin);
- makevectors(aimdir);
+ aimdir = vectorToAngles(aimpos - origin);
/* slowly lerp towards the final angle */
- vecNewAngles[0] = Math_Lerp(vecNewAngles[0], v_forward[0], flLerp);
- vecNewAngles[1] = Math_Lerp(vecNewAngles[1], v_forward[1], flLerp);
- vecNewAngles[2] = Math_Lerp(vecNewAngles[2], v_forward[2], flLerp);
+ vecNewAngles = vectorLerp(vecNewAngles, anglesToForward(aimdir), flLerp);
/* make sure we're aiming tight */
- v_angle = vectoangles(vecNewAngles);
- v_angle[0] = Math_FixDelta(v_angle[0]);
- v_angle[1] = Math_FixDelta(v_angle[1]);
- v_angle[2] = Math_FixDelta(v_angle[2]);
- angles[0] = Math_FixDelta(v_angle[0]);
- angles[1] = Math_FixDelta(v_angle[1]);
- angles[2] = Math_FixDelta(v_angle[2]);
- input_angles = v_angle;
+ v_angle = vectorToAngles(vecNewAngles);
+ input_angles = angles = v_angle = fixAngle(v_angle);
}
void
@@ -386,6 +354,7 @@ csbot::WeaponThink(void)
if (activeweapon == WEAPON_KNIFE)
return;
+#if FIXME
/* clip empty */
if (a_ammo1 == 0) {
/* still got ammo left, reload! */
@@ -396,6 +365,7 @@ csbot::WeaponThink(void)
Weapons_SwitchBest(this);
}
}
+#endif
};
/** @brief Get entity by class name and index **/
@@ -491,7 +461,7 @@ CSBot_BuyStart_Shop(void)
{
int done = 0;
int count = 0;
- player pl = (player)self;
+ CSPlayer pl = (CSPlayer)self;
pl.team = infokeyf(pl, "*team");
@@ -546,6 +516,7 @@ CSBot_BuyStart_Shop(void)
CSEv_BuyEquipment_f(1);
}
+#if FIXME
/* make SURE we switch to it */
for (int i = 0; i < g_weapons.length; i++)
if (pl.g_items & g_weapons[i].id) {
@@ -553,6 +524,7 @@ CSBot_BuyStart_Shop(void)
Weapons_Draw(pl);
return;
}
+#endif
/* force buy right now */
CSEv_AmmoBuyPrimary();
diff --git a/src/server/buy.qc b/src/server/buy.qc
index 4c773e8..85fb9ac 100644
--- a/src/server/buy.qc
+++ b/src/server/buy.qc
@@ -17,10 +17,11 @@
void
CSEv_BuyWeapon_f(float fWeapon)
{
+#if 0
CSGameRules rules = (CSGameRules)g_grMode;
int iWeapon;
- player pl = (player)self;
+ CSPlayer pl = (CSPlayer)self;
iWeapon = (int)fWeapon;
if (rules.BuyingPossible(pl) == FALSE) {
@@ -77,15 +78,17 @@ CSEv_BuyWeapon_f(float fWeapon)
} else {
//centerprint(pl, "You have insufficient funds!");
}
+#endif
}
void
CSEv_BuyEquipment_f(float fUtil)
{
+#if 0
CSGameRules rules = (CSGameRules)g_grMode;
int iUtil;
- player pl = (player)self;
+ CSPlayer pl = (CSPlayer)self;
iUtil = (int)fUtil;
if (rules.BuyingPossible(pl) == FALSE) {
@@ -162,10 +165,10 @@ CSEv_BuyEquipment_f(float fUtil)
Sound_Play(pl, CHAN_ITEM, "buy.weapon");
break;
case 6:
- if (pl.g_items & ITEM_NIGHTVISION)
+ if (pl.m_bHasNightvision == true)
return;
- pl.g_items |= ITEM_NIGHTVISION;
+ pl.m_bHasNightvision = true;
Sound_Play(pl, CHAN_ITEM, "buy.weapon");
break;
}
@@ -173,4 +176,5 @@ CSEv_BuyEquipment_f(float fUtil)
} else {
centerprint(pl, "You have insufficient funds!");
}
+#endif
}
diff --git a/src/server/func_bomb_target.qc b/src/server/func_bomb_target.qc
index 6096b70..0462ee3 100644
--- a/src/server/func_bomb_target.qc
+++ b/src/server/func_bomb_target.qc
@@ -51,7 +51,7 @@ func_bomb_target::Respawn(void)
void
func_bomb_target::Touch(entity eToucher)
{
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
if (!(eToucher.flags & FL_CLIENT)) {
return;
diff --git a/src/server/func_buyzone.qc b/src/server/func_buyzone.qc
index 3f1b457..f7f883c 100644
--- a/src/server/func_buyzone.qc
+++ b/src/server/func_buyzone.qc
@@ -76,7 +76,7 @@ func_buyzone::SpawnKey(string strKey, string strValue)
void
func_buyzone::Touch(entity eToucher)
{
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
if (!(eToucher.flags & FL_CLIENT))
return;
diff --git a/src/server/func_escapezone.qc b/src/server/func_escapezone.qc
index 136d6ce..cf1d6f3 100644
--- a/src/server/func_escapezone.qc
+++ b/src/server/func_escapezone.qc
@@ -61,7 +61,7 @@ func_escapezone::Touch(entity eToucher)
if (to_escape > 3)
to_escape = 3;
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
/* don't matter when rules are not active */
if (g_cs_gamestate != GAME_ACTIVE)
@@ -78,7 +78,7 @@ func_escapezone::Touch(entity eToucher)
/* balancing tweak: for every escaped T, each and every CT will lose funds */
if (autocvar_fcs_escapepenalty != 0) {
for (entity eFind = world; (eFind = find(eFind, ::classname, "player"));) {
- player ct = (player)eFind;
+ CSPlayer ct = (CSPlayer)eFind;
if (ct.team == TEAM_CT) {
Money_AddMoney(ct, autocvar_fcs_escapepenalty);
diff --git a/src/server/func_hostage_rescue.qc b/src/server/func_hostage_rescue.qc
index ba5e17a..845f83a 100644
--- a/src/server/func_hostage_rescue.qc
+++ b/src/server/func_hostage_rescue.qc
@@ -52,7 +52,7 @@ void
func_hostage_rescue::Touch(entity eToucher)
{
if (eToucher.flags & FL_CLIENT) {
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
pl.gflags |= GF_RESCUEZONE;
return;
}
@@ -61,7 +61,7 @@ func_hostage_rescue::Touch(entity eToucher)
return;
}
- hostage_entity hosty = (hostage_entity)eToucher;
+ CSHostage hosty = (CSHostage)eToucher;
if (hosty.GetSolid() == SOLID_NOT) {
return;
@@ -73,7 +73,7 @@ func_hostage_rescue::Touch(entity eToucher)
Radio_BroadcastMessage(RADIO_RESCUED);
g_cs_hostagesrescued++;
- Money_AddMoney((player)hosty.m_eFollowing, 1000);
+ Money_AddMoney((CSPlayer)hosty.m_eFollowing, 1000);
CSBot_HostageRescueNotify();
/* In Hostage Rescue, all Counter-Terrorists receive an $850
diff --git a/src/server/func_vip_safetyzone.qc b/src/server/func_vip_safetyzone.qc
index f344562..f588375 100644
--- a/src/server/func_vip_safetyzone.qc
+++ b/src/server/func_vip_safetyzone.qc
@@ -52,7 +52,7 @@ func_vip_safetyzone::Touch(entity eToucher)
{
CSMultiplayerRules rule = (CSMultiplayerRules)g_grMode;
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
if (pl.classname != "player")
return;
diff --git a/src/server/game_money.qc b/src/server/game_money.qc
index a5932cf..b29ab41 100644
--- a/src/server/game_money.qc
+++ b/src/server/game_money.qc
@@ -17,7 +17,7 @@
void
Money_AddMoney(NSClientPlayer pp, int iMoneyValue)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
dprint(sprintf("^2Money_AddMoney^7: giving %s $%i\n", pl.netname, iMoneyValue));
pl.money += (float)iMoneyValue;
diff --git a/src/server/gamerules.h b/src/server/gamerules.h
index ecaf505..2988265 100644
--- a/src/server/gamerules.h
+++ b/src/server/gamerules.h
@@ -16,7 +16,6 @@
class CSGameRules:CGameRules
{
- virtual void PlayerKill(NSClientPlayer);
virtual void PlayerPreFrame(NSClientPlayer);
virtual void PlayerDeath(NSClientPlayer);
virtual void PlayerPain(NSClientPlayer);
diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc
index 4f9be0e..23f765e 100644
--- a/src/server/gamerules.qc
+++ b/src/server/gamerules.qc
@@ -49,7 +49,7 @@ CSGameRules::PlayerPreFrame(NSClientPlayer pp)
void
CSGameRules::LevelDecodeParms(NSClientPlayer pp)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
g_landmarkpos[0] = parm1;
g_landmarkpos[1] = parm2;
g_landmarkpos[2] = parm3;
@@ -62,45 +62,9 @@ CSGameRules::LevelDecodeParms(NSClientPlayer pp)
pl.g_items = parm10;
pl.activeweapon = parm11;
pl.flags = parm64;
-
- pl.ammo_50ae = parm12;
- pl.ammo_762mm = parm13;
- pl.ammo_556mm = parm14;
- pl.ammo_556mmbox = parm15;
- pl.ammo_338mag = parm16;
- pl.ammo_9mm = parm17;
- pl.ammo_buckshot = parm18;
- pl.ammo_45acp = parm19;
- pl.ammo_357sig = parm20;
- pl.ammo_57mm = parm21;
- pl.ammo_hegrenade = parm22;
- pl.ammo_fbgrenade = parm23;
- pl.ammo_smokegrenade = parm24;
- pl.usp45_mag = parm25;
- pl.glock18_mag = parm26;
- pl.deagle_mag = parm27;
- pl.p228_mag = parm28;
- pl.elites_mag = parm29;
- pl.fiveseven_mag = parm30;
- pl.m3_mag = parm31;
- pl.xm1014_mag = parm32;
- pl.mp5_mag = parm33;
- pl.p90_mag = parm34;
- pl.ump45_mag = parm35;
- pl.mac10_mag = parm36;
- pl.tmp_mag = parm37;
- pl.ak47_mag = parm38;
- pl.sg552_mag = parm39;
- pl.m4a1_mag = parm40;
- pl.aug_mag = parm41;
- pl.scout_mag = parm42;
- pl.awp_mag = parm43;
- pl.g3sg1_mag = parm44;
- pl.sg550_mag = parm45;
- pl.para_mag = parm46;
pl.gflags = parm63;
- if (pl.flags & FL_CROUCHING) {
+ if (pl.IsCrouching()) {
setsize(pl, VEC_CHULL_MIN, VEC_CHULL_MAX);
} else {
setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX);
@@ -110,7 +74,7 @@ CSGameRules::LevelDecodeParms(NSClientPlayer pp)
void
CSGameRules::LevelChangeParms(NSClientPlayer pp)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
parm1 = g_landmarkpos[0];
parm2 = g_landmarkpos[1];
parm3 = g_landmarkpos[2];
@@ -124,42 +88,6 @@ CSGameRules::LevelChangeParms(NSClientPlayer pp)
parm64 = pl.flags;
parm10 = pl.g_items;
parm11 = pl.activeweapon;
-
- parm12 = pl.ammo_50ae;
- parm13 = pl.ammo_762mm;
- parm14 = pl.ammo_556mm;
- parm15 = pl.ammo_556mmbox;
- parm16 = pl.ammo_338mag;
- parm17 = pl.ammo_9mm;
- parm18 = pl.ammo_buckshot;
- parm19 = pl.ammo_45acp;
- parm20 = pl.ammo_357sig;
- parm21 = pl.ammo_57mm;
- parm22 = pl.ammo_hegrenade;
- parm23 = pl.ammo_fbgrenade;
- parm24 = pl.ammo_smokegrenade;
- parm25 = pl.usp45_mag;
- parm26 = pl.glock18_mag;
- parm27 = pl.deagle_mag;
- parm28 = pl.p228_mag;
- parm29 = pl.elites_mag;
- parm30 = pl.fiveseven_mag;
- parm31 = pl.m3_mag;
- parm32 = pl.xm1014_mag;
- parm33 = pl.mp5_mag;
- parm34 = pl.p90_mag;
- parm35 = pl.ump45_mag;
- parm36 = pl.mac10_mag;
- parm37 = pl.tmp_mag;
- parm38 = pl.ak47_mag;
- parm39 = pl.sg552_mag;
- parm40 = pl.m4a1_mag;
- parm41 = pl.aug_mag;
- parm42 = pl.scout_mag;
- parm43 = pl.awp_mag;
- parm44 = pl.g3sg1_mag;
- parm45 = pl.sg550_mag;
- parm46 = pl.para_mag;
}
void
@@ -175,28 +103,10 @@ CSGameRules::LevelNewParms(void)
parm64 = FL_CLIENT;
}
-void
-CSGameRules::PlayerKill(NSClientPlayer pl)
-{
- Damage_Apply(pl, pl, pl.health, WEAPON_NONE, DMG_SKIP_ARMOR);
-}
-
-void
-TriggerFlashlight(NSClient target)
-{
- entity oldself = self;
- self = target;
- Flashlight_Toggle();
- self = oldself;
-}
-
bool
CSGameRules::ImpulseCommand(NSClient bp, float num)
{
switch (num) {
- case 100:
- TriggerFlashlight(bp);
- break;
default:
return super::ImpulseCommand(bp, num);
}
diff --git a/src/server/gamerules_deathmatch.qc b/src/server/gamerules_deathmatch.qc
index dbe7969..1b9cdba 100644
--- a/src/server/gamerules_deathmatch.qc
+++ b/src/server/gamerules_deathmatch.qc
@@ -119,7 +119,7 @@ CSDeathmatchRules::PlayerDeath(NSClientPlayer pl)
/* explode all satchels */
s_satchel_detonate((entity)pl);
/* drop their posessions into a weaponbox item */
- weaponbox_spawn((player)pl);
+ weaponbox_spawn((CSPlayer)pl);
#endif
/* either gib, or make a corpse */
@@ -128,12 +128,12 @@ CSDeathmatchRules::PlayerDeath(NSClientPlayer pl)
float gibStrength = g_dmg_iDamage * 2.0f;
BreakModel_Entity(pl, gibDir, gibStrength);
} else {
- FX_Corpse_Spawn((player)pl, ANIM_DEATH1);
- //FX_Corpse_Spawn((player)pl, ANIM_DIESIMPLE);
+ FX_Corpse_Spawn((CSPlayer)pl, ANIM_DEATH1);
+ //FX_Corpse_Spawn((CSPlayer)pl, ANIM_DIESIMPLE);
}
/* now let's make the real client invisible */
- pl.Death();
+ //pl.Death();
pl.SetTakedamage(DAMAGE_NO);
pl.gflags &= ~GF_FLASHLIGHT;
@@ -149,7 +149,7 @@ CSDeathmatchRules::PlayerDeath(NSClientPlayer pl)
void
CSDeathmatchRules::PlayerSpawn(NSClientPlayer pp)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
/* this is where the mods want to deviate */
entity spot;
@@ -223,7 +223,7 @@ CSDeathmatchRules::PlayerSpawn(NSClientPlayer pp)
pl.SetInfoKey("*dead", "0");
pl.SetInfoKey("*deaths", ftos(pl.deaths));
pl.SetPropData("actor_human");
- pl.SetCanBleed(true);
+ pl.EnableBleeding();
LevelNewParms();
LevelDecodeParms(pl);
@@ -232,9 +232,9 @@ CSDeathmatchRules::PlayerSpawn(NSClientPlayer pp)
pl.activeweapon = WEAPON_KNIFE;
int randomGun = (int)rint(random(WEAPON_USP45, WEAPON_FIVESEVEN));
- Weapons_AddItem(pl, randomGun, -1);
+ //Weapons_AddItem(pl, randomGun, -1);
randomGun = (int)rint(random(WEAPON_M3, WEAPON_PARA));
- Weapons_AddItem(pl, randomGun, -1);
+ //Weapons_AddItem(pl, randomGun, -1);
pl.activeweapon = randomGun;
Ammo_BuyPrimary(pl, TRUE);
@@ -242,7 +242,6 @@ CSDeathmatchRules::PlayerSpawn(NSClientPlayer pp)
spot = Spawn_SelectRandom("info_player_deathmatch");
pl.Transport(spot.origin, spot.angles);
- Weapons_RefreshAmmo(pl);
Client_FixAngle(pl, pl.angles);
}
diff --git a/src/server/gamerules_multiplayer.qc b/src/server/gamerules_multiplayer.qc
index 7215382..677bd2e 100644
--- a/src/server/gamerules_multiplayer.qc
+++ b/src/server/gamerules_multiplayer.qc
@@ -14,6 +14,14 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+#ifdef CSSOURCE
+ #define SPAWNPOINT_CT "info_player_counterterrorist"
+ #define SPAWNPOINT_T "info_player_terrorist"
+#else
+ #define SPAWNPOINT_CT "info_player_start"
+ #define SPAWNPOINT_T "info_player_deathmatch"
+#endif
+
string
CSMultiplayerRules::Title(void)
{
@@ -42,12 +50,12 @@ CSMultiplayerRules::PlayerDisconnect(NSClientPlayer pl)
void
CSMultiplayerRules::PlayerDeath(NSClientPlayer pl)
{
- player targ = (player)g_dmg_eTarget;
- player attk = (player)g_dmg_eAttacker;
+ CSPlayer targ = (CSPlayer)g_dmg_eTarget;
+ CSPlayer attk = (CSPlayer)g_dmg_eAttacker;
NSRenderableEntity newCorpse;
float deathAnimation = ANIM_DEATH1;
- if (targ.flags & FL_CROUCHING) {
+ if (targ.IsCrouching()) {
deathAnimation = ANIM_CROUCH_DIE;
} else {
switch (g_dmg_iHitBody) {
@@ -128,21 +136,25 @@ CSMultiplayerRules::PlayerDeath(NSClientPlayer pl)
targ.SetInfoKey("*icon1_b", "0");
}
- Weapon_DropCurrentWeapon(targ);
+ /* TODO: implement this in NSNavAI */
+ //targ.DropActiveWeapon();
+
+ ///Weapon_DropCurrentWeapon(targ);
/* if we're the bomb carrier, make sure we drop the bomb. */
- if (targ.g_items & ITEM_C4BOMB) {
- targ.activeweapon = WEAPON_C4BOMB;
- Weapon_DropCurrentWeapon(targ);
+ if (targ.HasItem("weapon_c4")) {
+ //targ.SwitchToWeapon("weapon_c4");
+ //Weapon_DropCurrentWeapon(targ);
} else {
- targ.activeweapon = Cstrike_WeaponToDropUponDeath(targ);
- Weapon_DropCurrentWeapon(targ);
+ //targ.activeweapon = Cstrike_WeaponToDropUponDeath(targ);
+ //Weapon_DropCurrentWeapon(targ);
}
/* clear all ammo and inventory... */
- PlayerClearWeaponry(targ);
- targ.Death();
+ targ.RemoveAllWeapons();
+// targ.Death();
targ.gflags &= ~GF_FLASHLIGHT;
+ targ.m_bHasNightvision = false;
targ.StartSoundDef("Player.Death", CHAN_AUTO, true);
@@ -170,7 +182,7 @@ CSMultiplayerRules::PlayerPreFrame(NSClientPlayer pl)
happen here */
{
vector sourcePos, destPos;
- player p = (player)pl;
+ CSPlayer p = (CSPlayer)pl;
sourcePos = pl.GetEyePos();
destPos = sourcePos + (pl.GetForward() * 512);
@@ -235,7 +247,7 @@ CSMultiplayerRules::CreateRescueZones(void)
return;
/* hostage zones need to go somewhere */
- for (entity e = world; (e = find(e, ::classname, "info_player_start"));) {
+ for (entity e = world; (e = find(e, ::classname, SPAWNPOINT_CT));) {
info_hostage_rescue newzone = spawn(info_hostage_rescue, origin: e.origin);
newzone.Respawn();
}
@@ -258,7 +270,7 @@ CSMultiplayerRules::CreateCTBuyzones(void)
return;
/* since no buyzones are available, let's create one around every CT spawn */
- for (entity e = world; (e = find(e, ::classname, "info_player_start"));) {
+ for (entity e = world; (e = find(e, ::classname, SPAWNPOINT_CT));) {
info_buyzone newzone = spawn(info_buyzone, origin: e.origin);
newzone.Respawn();
newzone.team = TEAM_CT;
@@ -282,7 +294,7 @@ CSMultiplayerRules::CreateTBuyzones(void)
return;
/* since no buyzones are available, let's create one around every T spawn */
- for (entity e = world; (e = find(e, ::classname, "info_player_deathmatch"));) {
+ for (entity e = world; (e = find(e, ::classname, SPAWNPOINT_T));) {
info_buyzone newzone = spawn(info_buyzone, origin: e.origin);
newzone.Respawn();
newzone.team = TEAM_T;
@@ -292,6 +304,39 @@ CSMultiplayerRules::CreateTBuyzones(void)
void
CSMultiplayerRules::InitPostEnts(void)
{
+ EntityDef_Precache("CSBasePistol");
+ EntityDef_Precache("CSBaseRifle");
+ EntityDef_Precache("CSBaseShotgun");
+ EntityDef_Precache("weapon_ak47");
+ EntityDef_Precache("weapon_aug");
+ EntityDef_Precache("weapon_awp");
+ EntityDef_Precache("weapon_c4");
+ EntityDef_Precache("weapon_deagle");
+ EntityDef_Precache("weapon_elites");
+ EntityDef_Precache("weapon_famas");
+ EntityDef_Precache("weapon_fiveseven");
+ EntityDef_Precache("weapon_flashbang");
+ EntityDef_Precache("weapon_g3sg1");
+ EntityDef_Precache("weapon_galil");
+ EntityDef_Precache("weapon_glock18");
+ EntityDef_Precache("weapon_hegrenade");
+ EntityDef_Precache("weapon_knife");
+ EntityDef_Precache("weapon_m249");
+ EntityDef_Precache("weapon_m3");
+ EntityDef_Precache("weapon_m4a1");
+ EntityDef_Precache("weapon_mac10");
+ EntityDef_Precache("weapon_mp5navy");
+ EntityDef_Precache("weapon_p228");
+ EntityDef_Precache("weapon_p90");
+ EntityDef_Precache("weapon_scout");
+ EntityDef_Precache("weapon_sg550");
+ EntityDef_Precache("weapon_sg552");
+ EntityDef_Precache("weapon_smokegrenade");
+ EntityDef_Precache("weapon_tmp");
+ EntityDef_Precache("weapon_ump45");
+ EntityDef_Precache("weapon_usp");
+ EntityDef_Precache("weapon_xm1014");
+
MOTD_LoadDefault();
/* let's check if we need to create buyzones */
@@ -482,7 +527,7 @@ CSMultiplayerRules::BuyingPossible(NSClientPlayer pl)
void
CSMultiplayerRules::MakeBomber(NSClientPlayer pl)
{
- Weapons_AddItem(pl, WEAPON_C4BOMB, -1);
+ pl.GiveItem("weapon_c4");
env_message_single(pl, "Hint_you_have_the_bomb");
}
@@ -511,7 +556,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
m_iSwapTeamRoundCounter = 0;
for (entity eFind = world; (eFind = find(eFind, ::classname, "player"));) {
- player pl = (player)eFind;
+ CSPlayer pl = (CSPlayer)eFind;
if (pl.team == TEAM_T) {
pl.team = TEAM_CT; /* temp for CT */
@@ -532,7 +577,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
if (!(eFind.flags & FL_CLIENT))
continue;
- player pl = (player)eFind;
+ CSPlayer pl = (CSPlayer)eFind;
if (pl.health > 0 && iWipe == FALSE) {
PlayerRespawn(pl, pl.team);
@@ -551,7 +596,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
if (!(eFind.flags & FL_CLIENT))
continue;
- player pl = (player)eFind;
+ CSPlayer pl = (CSPlayer)eFind;
if (pl.health > 0 && iWipe == FALSE) {
PlayerRespawn(pl, pl.team);
@@ -572,7 +617,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
if (!(eFind.flags & FL_CLIENT))
continue;
- player pl = (player)eFind;
+ CSPlayer pl = (CSPlayer)eFind;
pl.team = TEAM_CT;
if (pl.health > 0 && iWipe == FALSE) {
@@ -590,7 +635,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
}
for (entity eFind = world; (eFind = find(eFind, ::classname, "tempdecal"));) {
- decal dec = (decal)eFind;
+ NSDecal dec = (NSDecal)eFind;
dec.m_strTexture = "";
dec.SendFlags = -1;
}
@@ -598,12 +643,6 @@ CSMultiplayerRules::RestartRound(int iWipe)
NSEntity e = (NSEntity)eFind;
e.Destroy();
}
- // Remove potential bomb backpack model from the world, else bots will go
- // chase a ghost.
- entity e = find(world, ::model, "models/w_backpack.mdl");
- if (e != world) {
- remove(e);
- }
WriteByte(MSG_MULTICAST, SVC_CGAMEPACKET);
WriteByte(MSG_MULTICAST, EV_CLEARDECALS);
@@ -620,7 +659,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
iPickT++;
if (iPickT == iRandomT) {
- MakeBomber((player)eFind);
+ MakeBomber((CSPlayer)eFind);
}
}
}
@@ -635,7 +674,7 @@ CSMultiplayerRules::RestartRound(int iWipe)
if (eFind.team == TEAM_CT) {
iPickCT++;
if (iPickCT == iRandomCT) {
- MakeVIP((player)eFind);
+ MakeVIP((CSPlayer)eFind);
}
}
}
@@ -658,7 +697,10 @@ CSMultiplayerRules::RestartRound(int iWipe)
}
}
+#ifdef BOT
CSBot_BuyStart();
+#endif
+
TimerBegin(autocvar_mp_freezetime, GAME_FREEZE);
Money_ResetTeamReward();
}
@@ -751,7 +793,7 @@ CSMultiplayerRules::SwitchTeams(void)
int iCTW, iTW;
for (entity eFind = world; (eFind = find(eFind, ::classname, "player"));) {
- player pl = (player)eFind;
+ CSPlayer pl = (CSPlayer)eFind;
if (pl.team == TEAM_CT) {
pl.team = TEAM_T;
pl.charmodel -= 4;
@@ -866,24 +908,24 @@ CSMultiplayerRules::PlayerFindSpawn(float t)
entity point = world;
if (t == TEAM_T) {
- m_eLastTSpawn = find(m_eLastTSpawn, ::classname, "info_player_deathmatch");
+ m_eLastTSpawn = find(m_eLastTSpawn, ::classname, SPAWNPOINT_T);
if (m_eLastTSpawn == world) {
- m_eLastTSpawn = find(m_eLastTSpawn, ::classname, "info_player_deathmatch");
+ m_eLastTSpawn = find(m_eLastTSpawn, ::classname, SPAWNPOINT_T);
}
point = m_eLastTSpawn;
} else if (t == TEAM_CT) {
- m_eLastCTSpawn = find(m_eLastCTSpawn, ::classname, "info_player_start");
+ m_eLastCTSpawn = find(m_eLastCTSpawn, ::classname, SPAWNPOINT_CT);
if (m_eLastCTSpawn == world) {
- m_eLastCTSpawn = find(m_eLastCTSpawn, ::classname, "info_player_start");
+ m_eLastCTSpawn = find(m_eLastCTSpawn, ::classname, SPAWNPOINT_CT);
}
point = m_eLastCTSpawn;
} else if (t == TEAM_VIP) {
point = find(world, ::classname, "info_vip_start");
if (!point)
- point = find(m_eLastTSpawn, ::classname, "info_player_start");
+ point = find(m_eLastTSpawn, ::classname, SPAWNPOINT_CT);
}
if (point == world) {
@@ -903,35 +945,29 @@ Called whenever a player survived a round and needs a basic respawn.
void
CSMultiplayerRules::PlayerRespawn(NSClientPlayer pp, int fTeam)
{
- player pl = (player)pp;
-
- entity eSpawn;
- forceinfokey(pl, "*spec", "0");
- eSpawn = PlayerFindSpawn(pl.team);
-
- pl.classname = "player";
- pl.health = pl.max_health = 100;
- forceinfokey(pl, "*dead", "0");
- CountPlayers();
-
- pl.takedamage = DAMAGE_YES;
- pl.solid = SOLID_SLIDEBOX;
- pl.movetype = MOVETYPE_WALK;
- pl.flags = FL_CLIENT;
- pl.iBleeds = TRUE;
- pl.viewzoom = 1.0;
- pl.g_items &= ~ITEM_C4BOMB;
+ CSPlayer pl = (CSPlayer)pp;
+ NSEntity eSpawn = (NSEntity)PlayerFindSpawn(pl.team);
+ pl.MakePlayer();
+ pl.GiveItem("item_suit");
pl.SetOrigin(eSpawn.origin);
- pl.angles = eSpawn.angles;
- pl.SendFlags = UPDATE_ALL;
+ pl.SetAngles(eSpawn.angles);
Client_FixAngle(pl, pl.angles);
+ CountPlayers();
+
pl.SetInfoKey("*icon1", "");
pl.SetInfoKey("*icon1_r", "1");
pl.SetInfoKey("*icon1_g", "1");
pl.SetInfoKey("*icon1_b", "1");
+ /* VIP starts with 200 armor and an extra mag */
+ if (pl.team == TEAM_VIP) {
+ pl.SetArmor(200);
+ pl.GiveItem("weapon_usp");
+ }
+
+#ifndef CSSOURCE
switch (pl.charmodel) {
case 1:
pl.model = "models/player/terror/terror.mdl";
@@ -960,118 +996,89 @@ CSMultiplayerRules::PlayerRespawn(NSClientPlayer pp, int fTeam)
default:
pl.model = "models/player/vip/vip.mdl";
}
+#else
+ switch (pl.charmodel) {
+ case 1:
+ pl.model = "models/player/t_phoenix.mdl";
+ break;
+ case 2:
+ pl.model = "models/player/t_leet.mdl";
+ break;
+ case 3:
+ pl.model = "models/player/t_arctic.mdl";
+ break;
+ case 4:
+ pl.model = "models/player/t_guerilla.mdl";
+ break;
+ case 5:
+ pl.model = "models/player/ct_urban.mdl";
+ break;
+ case 6:
+ pl.model = "models/player/ct_gsg9.mdl";
+ break;
+ case 7:
+ pl.model = "models/player/ct_sas.mdl";
+ break;
+ case 8:
+ pl.model = "models/player/ct_gign.mdl";
+ break;
+ default:
+ pl.model = "models/player/vip/vip.mdl";
+ }
+#endif
pl.SetModel(pl.model);
pl.SetSize(VEC_HULL_MIN, VEC_HULL_MAX);
- pl.velocity = [0,0,0];
+ pl.ClearVelocity();
pl.progress = 0.0f;
- Weapons_SwitchBest(pl);
+ /* TODO: Implement this in NSNavAI*/
+ //Weapons_SwitchBest(pl);
Ammo_AutoFill(pl);
}
void
CSMultiplayerRules::PlayerClearWeaponry(NSClientPlayer pp)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
pl.g_items = 0x0;
pl.activeweapon = 0;
- pl.ammo_50ae = 0;
- pl.ammo_762mm = 0;
- pl.ammo_556mm = 0;
- pl.ammo_556mmbox = 0;
- pl.ammo_338mag = 0;
- pl.ammo_9mm = 0;
- pl.ammo_buckshot = 0;
- pl.ammo_45acp = 0;
- pl.ammo_357sig = 0;
- pl.ammo_57mm = 0;
- pl.ammo_hegrenade = 0;
- pl.ammo_fbgrenade = 0;
- pl.ammo_smokegrenade = 0;
- pl.usp45_mag = 0;
- pl.glock18_mag = 0;
- pl.deagle_mag = 0;
- pl.p228_mag = 0;
- pl.elites_mag = 0;
- pl.fiveseven_mag = 0;
- pl.m3_mag = 0;
- pl.xm1014_mag = 0;
- pl.mp5_mag = 0;
- pl.p90_mag = 0;
- pl.ump45_mag = 0;
- pl.mac10_mag = 0;
- pl.tmp_mag = 0;
- pl.ak47_mag = 0;
- pl.sg552_mag = 0;
- pl.m4a1_mag = 0;
- pl.aug_mag = 0;
- pl.scout_mag = 0;
- pl.awp_mag = 0;
- pl.g3sg1_mag = 0;
- pl.sg550_mag = 0;
- pl.para_mag = 0;
pl.viewzoom = 1.0f;
- pl.mode_temp = 0;
-}
-
-/*
-=================
-PlayerMakePlayable
-
-Called whenever need a full-reinit of a player.
-This may be after a player had died or when the game starts for the first time.
-=================
-*/
-
-static void
-MakePlayable(entity targ)
-{
- entity oself = self;
- self = targ;
-
- if (clienttype(targ) != CLIENTTYPE_REAL)
- spawnfunc_csbot();
- else
- spawnfunc_player();
-
- self = oself;
+ pl.m_bHasNightvision = false;
}
void
CSMultiplayerRules::PlayerMakePlayable(NSClientPlayer pp, int chara)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
/* spectator */
if (chara == 0) {
PlayerSpawn(pl);
return;
}
- MakePlayable(pp);
- pl.g_items |= ITEM_SUIT;
- Weapons_AddItem(pl, WEAPON_KNIFE, -1);
+ pl.ingame = TRUE;
+ forceinfokey(pl, "*team", ftos(pl.team));
+ PlayerRespawn(pl, pl.team);
/* terrorists */
if (chara < 5) {
pl.team = TEAM_T;
if (autocvar_fcs_knifeonly == FALSE) {
- Weapons_AddItem(pl, WEAPON_GLOCK18, -1);
- pl.ammo_9mm = 40;
+ pl.GiveItem("weapon_glock18");
+ //pl.ammo_9mm = 40;
}
} else {
pl.team = TEAM_CT;
if (autocvar_fcs_knifeonly == FALSE) {
- Weapons_AddItem(pl, WEAPON_USP45, -1);
- pl.ammo_45acp = 24;
+ pl.GiveItem("weapon_usp");
+ //pl.ammo_45acp = 24;
}
}
- pl.ingame = TRUE;
- forceinfokey(pl, "*team", ftos(pl.team));
- PlayerRespawn(pl, pl.team);
+ pl.GiveItem("weapon_knife");
}
/*
@@ -1084,7 +1091,7 @@ Force the player to become an observer.
void
CSMultiplayerRules::PlayerMakeSpectator(NSClientPlayer pp)
{
- player pl = (player)pp;
+ CSPlayer pl = (CSPlayer)pp;
pl.MakeTempSpectator();
PlayerClearWeaponry(pl);
pl.view_ofs = g_vec_null;
@@ -1101,7 +1108,7 @@ another player joins and causes the game rules/scores to reset fully
void
CSMultiplayerRules::PlayerReset(NSClientPlayer pl)
{
- player p = (player)pl;
+ CSPlayer p = (CSPlayer)pl;
/* give the initial server-joining money */
p.money = 0;
@@ -1111,6 +1118,7 @@ CSMultiplayerRules::PlayerReset(NSClientPlayer pl)
p.m_seenFriend = false;
p.m_seenEnemy = false;
p.m_seenHostage = false;
+ p.m_bHasNightvision = false;
}
/*
@@ -1177,7 +1185,7 @@ void
CSEv_JoinTeam_f(float flChar)
{
CSMultiplayerRules rules;
- player pl;
+ CSPlayer pl;
/* matches Game_InitRules() */
if (cvar("sv_playerslots") == 1 || cvar("coop") == 1) {
@@ -1185,7 +1193,7 @@ CSEv_JoinTeam_f(float flChar)
}
rules = (CSMultiplayerRules)g_grMode;
- pl = (player)self;
+ pl = (CSPlayer)self;
if (pl.team == TEAM_VIP) {
centerprint(pl, "You are the VIP!\nYou cannot switch roles now.\n");
diff --git a/src/server/gamerules_singleplayer.qc b/src/server/gamerules_singleplayer.qc
index 0d6e5b7..dd685b2 100644
--- a/src/server/gamerules_singleplayer.qc
+++ b/src/server/gamerules_singleplayer.qc
@@ -52,7 +52,6 @@ CSSingleplayerRules::PlayerSpawn(NSClientPlayer pl)
setmodel(pl, pl.model);
setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX);
- pl.view_ofs = PHY_VIEWPOS;
pl.velocity = [0,0,0];
pl.gravity = __NULL__;
pl.frame = 1;
@@ -75,6 +74,5 @@ CSSingleplayerRules::PlayerSpawn(NSClientPlayer pl)
pl.angles = spot.angles;
}
- Weapons_RefreshAmmo(pl);
Client_FixAngle(pl, pl.angles);
}
diff --git a/src/server/hostage_entity.qc b/src/server/hostage_entity.qc
index e091439..b4557e4 100644
--- a/src/server/hostage_entity.qc
+++ b/src/server/hostage_entity.qc
@@ -14,7 +14,7 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-/*!QUAKED hostage_entity (0 1 0) (-16 -16 0) (16 16 72)
+/*!QUAKED CSHostage (0 1 0) (-16 -16 0) (16 16 72)
# OVERVIEW
Hostage NPC.
Used in the Hostage Rescue mode (cs_* maps).
@@ -79,23 +79,23 @@ enum
HOSA_DEADTABLE3
};
-class hostage_entity:NSTalkMonster
+class CSHostage:NSTalkMonster
{
int m_iUsedOnce;
- void(void) hostage_entity;
+ void CSHostage(void);
+
+ virtual void OnPlayerUse(void);
+ virtual void Pain(entity, entity, int, vector, int);
+ virtual void Death(entity, entity, int, vector, int);
- virtual void(void) Respawn;
- virtual void(void) OnPlayerUse;
- virtual void(void) Pain;
- virtual void(void) Death;
};
void
-hostage_entity::OnPlayerUse(void)
+CSHostage::OnPlayerUse(void)
{
if (eActivator.team == TEAM_T) {
- player pl = (player)eActivator;
+ CSPlayer pl = (CSPlayer)eActivator;
if (g_csMode.ShowHints() == true)
if (pl.m_hostMessageT == false) {
@@ -110,7 +110,7 @@ hostage_entity::OnPlayerUse(void)
/* CT reward, first time only */
if (m_iUsedOnce == FALSE) {
- Money_AddMoney((player)eActivator, 150);
+ Money_AddMoney((CSPlayer)eActivator, 150);
m_iUsedOnce = TRUE;
}
@@ -118,12 +118,14 @@ hostage_entity::OnPlayerUse(void)
}
void
-hostage_entity::Pain(void)
+CSHostage::Pain(entity inflictor, entity attacker, int damage, vector dir, int location)
{
+ super::Pain(inflictor, attacker, damage, dir, location);
+
if (IsAlive() == false)
return;
- switch (g_dmg_iHitBody) {
+ switch (location) {
case BODY_HEAD:
case BODY_DEFAULT:
case BODY_CHEST:
@@ -145,19 +147,19 @@ hostage_entity::Pain(void)
}
/* penalties */
- if (g_dmg_eAttacker.classname != "player")
+ if (attacker.classname != "player")
return;
- Money_AddMoney((NSClientPlayer)g_dmg_eAttacker, -(g_dmg_iDamage * 25));
+ Money_AddMoney((NSClientPlayer)attacker, -(damage * 25i));
}
void
-hostage_entity::Death(void)
+CSHostage::Death(entity inflictor, entity attacker, int damage, vector dir, int location)
{
WarnAllies();
if (IsAlive() == true) {
- switch (g_dmg_iHitBody) {
+ switch (location) {
case BODY_HEAD:
SetFrame(HOSA_DIE_HEADSHOT);
break;
@@ -169,11 +171,11 @@ hostage_entity::Death(void)
break;
}
- if (g_dmg_eAttacker.classname == "player") {
- if (g_dmg_iDamage >= 100)
- Money_AddMoney((NSClientPlayer)g_dmg_eAttacker, -2500);
+ if (attacker.classname == "player") {
+ if (damage >= 100)
+ Money_AddMoney((NSClientPlayer)attacker, -2500);
else
- Money_AddMoney((NSClientPlayer)g_dmg_eAttacker, -500);
+ Money_AddMoney((NSClientPlayer)attacker, -500);
Radio_BroadcastMessage(RADIO_HOSDOWN);
}
@@ -183,52 +185,13 @@ hostage_entity::Death(void)
SetHealth(0);
/* now mark our state as 'dead' */
- super::Death();
+ super::Death(inflictor, attacker, damage, dir, location);
SetSolid(SOLID_NOT);
}
void
-hostage_entity::Respawn(void)
-{
- spawnflags |= MSF_MULTIPLAYER;
- model = "models/hostage.mdl";
- netname = "Hostage";
- base_health = 100;
- base_mins = [-16,-16,0];
- base_maxs = [16,16,72];
-
- super::Respawn();
-
- m_iFlags |= MONSTER_CANFOLLOW;
- m_iUsedOnce = FALSE;
- PlayerUse = OnPlayerUse;
-}
-
-void
-hostage_entity::hostage_entity(void)
+CSHostage::CSHostage(void)
{
Sound_Precache("hostage_entity.follow");
-
- m_talkAnswer = "";
- m_talkAsk = "";
- m_talkAllyShot = "";
- m_talkGreet = "";
- m_talkIdle = "";
- m_talkHearing = "";
- m_talkSmelling = "";
- m_talkStare = "";
- m_talkSurvived = "";
- m_talkWounded = "";
-
- m_talkPlayerAsk = "";
- m_talkPlayerGreet = "";
- m_talkPlayerIdle = "";
- m_talkPlayerWounded1 = "";
- m_talkPlayerWounded2 = "";
- m_talkPlayerWounded3 = "";
- m_talkUnfollow = "";
- m_talkFollow = "";
- m_talkStopFollow = "";
-
g_cs_hostagestotal++;
}
diff --git a/src/server/info_buyzone.qc b/src/server/info_buyzone.qc
index 8426744..dc20fc4 100644
--- a/src/server/info_buyzone.qc
+++ b/src/server/info_buyzone.qc
@@ -42,15 +42,14 @@ info_buyzone::info_buyzone(void)
void
info_buyzone::Respawn(void)
{
- SetSolid(SOLID_TRIGGER);
+ super::Respawn();
SetSize([-128,-128,-128], [128,128,128]);
- SetOrigin(GetSpawnOrigin());
}
void
info_buyzone::Touch(entity eToucher)
{
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
if (!(eToucher.flags & FL_CLIENT))
return;
diff --git a/src/server/info_hostage_rescue.qc b/src/server/info_hostage_rescue.qc
index d205699..c5ca6af 100644
--- a/src/server/info_hostage_rescue.qc
+++ b/src/server/info_hostage_rescue.qc
@@ -45,16 +45,15 @@ info_hostage_rescue::info_hostage_rescue(void)
void
info_hostage_rescue::Respawn(void)
{
- SetSolid(SOLID_TRIGGER);
+ super::Respawn();
SetSize([-128,-128,-128], [128,128,128]);
- SetOrigin(GetSpawnOrigin());
}
void
info_hostage_rescue::Touch(entity eToucher)
{
if (eToucher.flags & FL_CLIENT) {
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
pl.gflags |= GF_RESCUEZONE;
return;
}
@@ -70,14 +69,14 @@ info_hostage_rescue::Touch(entity eToucher)
}
/* some custom maps are very smart... */
- if (!((player)hosty.m_eFollowing))
+ if (!((CSPlayer)hosty.m_eFollowing))
return;
Radio_BroadcastMessage(RADIO_RESCUED);
CSBot_HostageRescueNotify();
g_cs_hostagesrescued++;
- Money_AddMoney((player)hosty.m_eFollowing, 1000);
+ Money_AddMoney((CSPlayer)hosty.m_eFollowing, 1000);
/* In Hostage Rescue, all Counter-Terrorists receive an $850
* bonus for every hostage they rescue, even if they lose the round. */
diff --git a/src/server/item_suit.qc b/src/server/item_suit.qc
index 1ace710..8d4e8eb 100644
--- a/src/server/item_suit.qc
+++ b/src/server/item_suit.qc
@@ -42,18 +42,17 @@ item_suit::Spawned(void)
void
item_suit::Respawn(void)
{
+ super::Respawn();
SetSolid(SOLID_TRIGGER);
SetMovetype(MOVETYPE_TOSS);
- SetModel(GetSpawnModel());
SetSize(VEC_HULL_MIN, VEC_HULL_MAX);
- SetOrigin(GetSpawnOrigin());
ReleaseThink();
}
void
item_suit::Touch(entity eToucher)
{
- player pl = (player)eToucher;
+ CSPlayer pl = (CSPlayer)eToucher;
if (pl.classname != "player") {
return;
diff --git a/src/server/player.qc b/src/server/player.qc
index 8706f8b..bfec853 100644
--- a/src/server/player.qc
+++ b/src/server/player.qc
@@ -14,15 +14,6 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-void Weapons_Draw(player);
-
-void
-CSEv_PlayerSwitchWeapon_i(int w)
-{
- player pl = (player)self;
- pl.activeweapon = w;
- Weapons_Draw(pl);
-}
void
Player_Precache(void)
diff --git a/src/server/progs.src b/src/server/progs.src
index b4647a3..7bb0387 100644
--- a/src/server/progs.src
+++ b/src/server/progs.src
@@ -1,6 +1,6 @@
#pragma target fte_5768
//#pragma flag enable assumeint
-#pragma progs_dat "../../progs.dat"
+#pragma progs_dat "../../zpak001.pk3dir/progs.dat"
#define QWSSQC
#define SERVER
@@ -34,7 +34,6 @@ info_hostage_rescue.qc
func_vip_safetyzone.qc
info_map_parameters.qc
item_suit.qc
-../../../valve/src/server/items.qc
../../../src/botlib/include.src
bot.qc
@@ -49,9 +48,7 @@ radio.qc
ammo.qc
buy.qc
server.qc
-../../../valve/src/server/damage.qc
../../../valve/src/server/flashlight.qc
-../../../valve/src/server/modelevent.qc
spawn.qc
diff --git a/src/server/server.qc b/src/server/server.qc
index 7fa75f9..fc586c7 100644
--- a/src/server/server.qc
+++ b/src/server/server.qc
@@ -60,11 +60,10 @@ Game_Worldspawn(void)
Sound_Precache("item.respawn");
Sound_Precache("weapon.pickup");
- Weapons_Init();
FX_Corpse_Init();
- clientstat(STAT_MONEY, EV_INTEGER, player::money);
- clientstat(STAT_PROGRESS, EV_FLOAT, player::progress);
+ clientstat(STAT_MONEY, EV_INTEGER, CSPlayer::money);
+ clientstat(STAT_PROGRESS, EV_FLOAT, CSPlayer::progress);
pointerstat(STAT_GAMETIME, EV_FLOAT, &g_cs_gametime);
pointerstat(STAT_GAMESTATE, EV_INTEGER, &g_cs_gamestate);
diff --git a/src/shared/CSProjectile.h b/src/shared/CSProjectile.h
new file mode 100644
index 0000000..a00110d
--- /dev/null
+++ b/src/shared/CSProjectile.h
@@ -0,0 +1,8 @@
+class
+CSProjectile:NSProjectile
+{
+ void CSProjectile(void);
+
+
+};
+
diff --git a/src/shared/CSProjectile.qc b/src/shared/CSProjectile.qc
new file mode 100644
index 0000000..a62e885
--- /dev/null
+++ b/src/shared/CSProjectile.qc
@@ -0,0 +1,5 @@
+void
+CSProjectile::CSProjectile(void)
+{
+
+}
diff --git a/src/shared/CSWeapon.qc b/src/shared/CSWeapon.qc
new file mode 100644
index 0000000..950d2b1
--- /dev/null
+++ b/src/shared/CSWeapon.qc
@@ -0,0 +1,220 @@
+
+#ifdef CLIENT
+void Cstrike_DrawCrosshair(CSPlayer);
+#endif
+
+class
+CSWeapon:NSWeapon
+{
+ void CSWeapon(void);
+
+#ifdef CLIENT
+ int m_iHudSlot;
+ int m_iHudSlotPos;
+
+ string m_ammoIcon;
+ string m_crossHair;
+ NSWeapon m_nextWeapon;
+ virtual void AddedToInventory(void);
+ virtual void UpdateGUI(void);
+#endif
+
+ virtual void Draw(void);
+ virtual void PrimaryAttack(void);
+ virtual void SecondaryAttack(void);
+ virtual void Release(void);
+ virtual void HitscanAttack(string);
+ virtual void SwitchedToWeapon(void);
+};
+
+void
+CSWeapon::CSWeapon(void)
+{
+
+}
+
+void
+CSWeapon::SwitchedToWeapon(void)
+{
+ w_cstrke_switched((CSPlayer)owner);
+}
+
+void
+CSWeapon::PrimaryAttack(void)
+{
+ if (GetDefBool("altAlternates") == true) {
+ if (CanFire() == false) {
+ return;
+ }
+
+ m_iMode = 1 - m_iMode;
+ }
+
+ if (m_iMode) {
+ super::SecondaryAttack();
+ return;
+ }
+
+ super::PrimaryAttack();
+}
+
+void
+CSWeapon::SecondaryAttack(void)
+{
+ if (GetDefBool("altSilences") == true) {
+ if (CanFire() == false) {
+ return;
+ }
+
+ float silAnimation = 0;
+ float silTime;
+
+ m_iMode = 1 - m_iMode;
+
+ if (m_iMode)
+ silAnimation = GetDefAct("actAddSil");
+ else
+ silAnimation = GetDefAct("actDetachSil");
+
+ SetWeaponFrame(silAnimation);
+ silTime = frameduration(m_viewModel, silAnimation);
+ SetAttackNext(silTime);
+ SetIdleNext(silTime + 1.0f);
+ return;
+ }
+
+ super::SecondaryAttack();
+}
+
+void
+CSWeapon::HitscanAttack(string defName)
+{
+ CSPlayer ourOwner = (CSPlayer)owner;
+ int numProjectiles = GetSubDefInt(defName, "numProjectiles");
+ string traceInfo = GetSubDefString(defName, "def_projectile");
+ float flAccuracyDivisor = GetSubDefFloat(defName,"accuracyDivisor");
+ float flAccuracyMovementPenalty = GetSubDefFloat(defName,"accuracyMovementPenalty");
+ float flAccuracyMultiplier = GetSubDefFloat(defName,"accuracyMultiplier");
+ float flAccuracyAdd= GetSubDefFloat(defName,"accuracyAdd");
+ float flRangeModifier = GetSubDefFloat(defName,"rangeModifier");
+ float flPenetrationPower = GetSubDefFloat(defName,"penetrationPower");
+ float flBulletStrength = GetSubDefFloat(defName,"bulletStrength");
+ float flMultiplierShots = GetSubDefFloat(defName,"multiplierShots");
+ float flMultiplierStrength = GetSubDefFloat(defName,"multiplierStrength");
+ float flMultiplierInaccuracy = GetSubDefFloat(defName,"multiplierInaccuracy");
+ float accuracy = Cstrike_CalculateAccuracy(ourOwner, flAccuracyDivisor, flAccuracyMovementPenalty) / flAccuracyMultiplier;
+ accuracy += flAccuracyAdd;
+ vector bulletSpread = [accuracy, accuracy];
+
+ /* always fire at least 1 */
+ if (numProjectiles <= 0i) {
+ numProjectiles = 1i;
+ }
+
+ if (flBulletStrength) {
+ Cstrike_BulletRecoil_ApplyPre(ourOwner, flBulletStrength);
+ }
+
+#ifdef SERVER
+ float traceDamage = GetSubDefFloat(traceInfo, "damage");
+
+ /* don't bother with shotguns */
+ if (numProjectiles <= 3i) {
+ //TraceAttack_SetRangeModifier(flRangeModifier);
+ //TraceAttack_SetPenetrationPower(flPenetrationPower);
+ } else {
+ bulletSpread = [random(-1,1) * 0.1,random(-1,1) * 0.05];
+ }
+
+ for (int i = 0i; i < numProjectiles; i++) {
+ // TraceAttack_FireBulletsWithDecal(1, ourOwner.GetEyePos(), traceDamage, bulletSpread, 0, "Impact.BigShot", ourOwner);
+ }
+#endif
+
+ if (flBulletStrength) {
+ Cstrike_BulletRecoil_ApplyPost(ourOwner, flBulletStrength);
+ }
+
+ /* don't bother with shotguns */
+ if (numProjectiles <= 3i) {
+ Cstrike_ShotMultiplierAdd(ourOwner, flMultiplierShots, flMultiplierStrength,accuracy* flMultiplierInaccuracy);
+ }
+}
+
+void
+CSWeapon::Draw(void)
+{
+ super::Draw();
+
+#ifdef CLIENT
+ CSPlayer ourOwner = (CSPlayer)owner;
+ ourOwner.cs_cross_mindist = GetDefInt("crossMinDist");
+ ourOwner.cs_cross_deltadist = GetDefInt("crossDeltaDist");
+
+ CStrikeView_UpdateGeomset(ourOwner);
+#endif
+}
+
+void
+CSWeapon::Release(void)
+{
+ owner.v_angle = input_angles;
+ w_cstrike_weaponrelease((CSPlayer)owner);
+ input_angles = owner.v_angle;
+ super::Release();
+}
+
+#ifdef CLIENT
+void
+CSWeapon::AddedToInventory(void)
+{
+ super::AddedToInventory();
+
+ m_ammoIcon = GetDefString("ammoIcon");
+
+ if (m_ammoIcon == "") {
+ m_ammoIcon = sprintf("%s.ammo", strtolower(classname));
+ }
+
+ m_crossHair = GetDefString("crosshair");
+
+ if (m_crossHair == "") {
+ m_crossHair = sprintf("%s.crosshair", strtolower(classname));
+ }
+
+ m_iHudSlot = GetDefInt("hudSlot");
+ m_iHudSlotPos = GetDefInt("hudSlotPos");
+}
+
+void
+CSWeapon::UpdateGUI(void)
+{
+ CSPlayer ourOwner = (CSPlayer)GetOwner();
+
+ /* draw crosshair */
+ Cstrike_DrawCrosshair(ourOwner);
+
+ /* draw ammo icon */
+ if (m_ammoIcon) {
+ vector ammoPos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
+ HLSprite_Draw_RGBA(m_ammoIcon, ammoPos, g_hud_color, pSeatLocal->m_flAmmo2Alpha, true);
+ }
+
+ if (m_bAmmoRequired == false) {
+ return;
+ }
+
+ if (m_iClipSize > 0i) {
+ ourOwner.a_ammo1 = m_iClip;
+ HUD_DrawAmmo1();
+ }
+
+ ourOwner.a_ammo2 = ourOwner.GetReserveAmmo(m_primaryAmmoType);
+ HUD_DrawAmmo2();
+
+ if (m_secondaryAmmoType && m_primaryAmmoType != m_secondaryAmmoType) {
+ ourOwner.a_ammo3 = ourOwner.GetReserveAmmo(m_secondaryAmmoType);
+ HUD_DrawAmmo3();
+ }
+}
+#endif
\ No newline at end of file
diff --git a/src/shared/animations.h b/src/shared/animations.h
index 81483a2..217517d 100644
--- a/src/shared/animations.h
+++ b/src/shared/animations.h
@@ -101,9 +101,9 @@ enum
ANIM_RELOAD_AK47,
ANIM_GUT_FLINCH,
ANIM_HEAD_FLINCH,
- ANIM_DEATH1,
- ANIM_DEATH2,
- ANIM_DEATH3,
+ ANIM_DEATH1, /* land on stomach */
+ ANIM_DEATH2, /* land on back */
+ ANIM_DEATH3, /* dramatic death */
ANIM_DIE_HEAD,
ANIM_DIE_GUT,
ANIM_DIE_LEFT,
diff --git a/src/shared/animations.qc b/src/shared/animations.qc
index daa8341..4c8daf5 100644
--- a/src/shared/animations.qc
+++ b/src/shared/animations.qc
@@ -40,7 +40,7 @@ void Animation_Print(string sWow) {
}
void
-Animation_TimerUpdate(player pl, float ftime)
+Animation_TimerUpdate(CSPlayer pl, float ftime)
{
makevectors([0, pl.v_angle[1], 0]);
@@ -65,28 +65,28 @@ depending on what the player is doing
=================
*/
void
-Animation_PlayerUpdate(player pl)
+Animation_PlayerUpdate(CSPlayer pl)
{
pl.basebone = gettagindex(pl, "-- R shoulder outside");
if (pl.anim_top_delay <= 0.0f) {
- pl.anim_top = Weapons_GetAim(pl, pl.activeweapon);
+ pl.anim_top = 0;//Weapons_GetAim(pl, pl.activeweapon);
}
if (vlen(pl.velocity) == 0) {
- if (pl.flags & FL_CROUCHING) {
+ if (pl.IsCrouching()) {
pl.anim_bottom = ANIM_IDLE_CROUCH;
} else {
pl.anim_bottom = ANIM_IDLE;
}
} else if (vlen(pl.velocity) < 150) {
- if (pl.flags & FL_CROUCHING) {
+ if (pl.IsCrouching()) {
pl.anim_bottom = ANIM_RUN_CROUCH;
} else {
pl.anim_bottom = ANIM_WALK;
}
} else if (vlen(pl.velocity) > 150) {
- if (pl.flags & FL_CROUCHING) {
+ if (pl.IsCrouching()) {
pl.anim_bottom = ANIM_RUN_CROUCH;
} else {
pl.anim_bottom = ANIM_RUN;
@@ -128,7 +128,7 @@ Animation_PlayerUpdate(player pl)
}
void
-Animation_PlayerTop(player pl, float topanim, float timer)
+Animation_PlayerTop(CSPlayer pl, float topanim, float timer)
{
#if 0
pl.anim_top = topanim;
@@ -138,7 +138,7 @@ Animation_PlayerTop(player pl, float topanim, float timer)
}
void
-Animation_PlayerBottom(player pl, float botanim, float timer)
+Animation_PlayerBottom(CSPlayer pl, float botanim, float timer)
{
pl.anim_bottom = botanim;
}
diff --git a/src/shared/defs.h b/src/shared/defs.h
index ef1006a..9e9e14c 100644
--- a/src/shared/defs.h
+++ b/src/shared/defs.h
@@ -20,7 +20,6 @@
#include "items.h"
#include "entities.h"
#include "events.h"
-#include "pmove.h"
#define TEAM_SPECTATOR 0
#define TEAM_T 1
diff --git a/src/shared/include.src b/src/shared/include.src
index 1cea513..b77e372 100644
--- a/src/shared/include.src
+++ b/src/shared/include.src
@@ -1,7 +1,6 @@
#includelist
flags.h
player.h
-../../../valve/src/shared/weapon_common.h
animations.h
animations.qc
@@ -11,37 +10,8 @@ item_c4bomb.h
../../../valve/src/shared/fx_corpse.qc
fx_flashbang.qc
fx_smokenade.qc
-
-weapons_cstrike.qc
-w_ak47.qc
-w_deagle.qc
-w_knife.qc
-w_usp45.qc
-w_glock18.qc
-w_p228.qc
-w_elites.qc
-w_fiveseven.qc
-w_m3.qc
-w_xm1014.qc
-w_mp5.qc
-w_p90.qc
-w_ump45.qc
-w_mac10.qc
-w_tmp.qc
-w_sg552.qc
-w_m4a1.qc
-w_aug.qc
-w_scout.qc
-w_awp.qc
-w_g3sg1.qc
-w_sg550.qc
-w_para.qc
-w_c4bomb.qc
-w_flashbang.qc
-w_hegrenade.qc
-w_smokegrenade.qc
-weapons.qc
-../../../valve/src/shared/weapon_common.qc
-pmove.qc
item_c4bomb.qc
+weapons_cstrike.qc
+CSWeapon.qc
+pmove.qc
#endlist
diff --git a/src/shared/item_c4bomb.h b/src/shared/item_c4bomb.h
index 5cbdae3..de3d1ad 100644
--- a/src/shared/item_c4bomb.h
+++ b/src/shared/item_c4bomb.h
@@ -1,7 +1,3 @@
-#ifdef SERVER
-void C4Bomb_Plant(NSClientPlayer);
-#endif
-
#ifdef CLIENT
string g_c4bombled_spr;
void w_c4bomb_parse(void);
diff --git a/src/shared/item_c4bomb.qc b/src/shared/item_c4bomb.qc
index ce4c12e..87c6fde 100644
--- a/src/shared/item_c4bomb.qc
+++ b/src/shared/item_c4bomb.qc
@@ -14,7 +14,7 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-class item_c4:NSRenderableEntity
+class CSBombEntity:NSRenderableEntity
{
#ifdef SERVER
entity m_eUser;
@@ -24,7 +24,7 @@ class item_c4:NSRenderableEntity
#endif
#ifdef SERVER
- void item_c4(void);
+ void CSBombEntity(void);
virtual void Spawned(void);
virtual float SendEntity(entity, float);
@@ -35,14 +35,14 @@ class item_c4:NSRenderableEntity
#endif
#ifdef CLIENT
- void item_c4(void);
+ void CSBombEntity(void);
virtual void DrawLED(void);
virtual float predraw(void);
#endif
};
void
-item_c4::item_c4(void)
+CSBombEntity::CSBombEntity(void)
{
#ifdef SERVER
m_eUser = __NULL__;
@@ -54,7 +54,7 @@ item_c4::item_c4(void)
#ifdef SERVER
float
-item_c4::SendEntity(entity pvsent, float flags)
+CSBombEntity::SendEntity(entity pvsent, float flags)
{
WriteByte(MSG_ENTITY, ENT_C4BOMB);
WriteCoord(MSG_ENTITY, origin[0]);
@@ -68,19 +68,19 @@ item_c4::SendEntity(entity pvsent, float flags)
}
void
-item_c4::ClearProgress(void)
+CSBombEntity::ClearProgress(void)
{
if (m_eUser != world) {
- player pl = (player)m_eUser;
+ CSPlayer pl = (CSPlayer)m_eUser;
pl.progress = 0.0f;
- pl.flags &= ~FL_FROZEN;
+ pl.RemoveVFlags(VFL_FROZEN);
}
}
void
-item_c4::OnPlayerUse(void)
+CSBombEntity::OnPlayerUse(void)
{
- player pl = (player)eActivator;
+ CSPlayer pl = (CSPlayer)eActivator;
/* obvious check */
if (pl.team != TEAM_CT) {
@@ -95,13 +95,13 @@ item_c4::OnPlayerUse(void)
}
void
-item_c4::Logic(void)
+CSBombEntity::Logic(void)
{
CSMultiplayerRules rules = (CSMultiplayerRules)g_grMode;
/* check if we're being used */
if (m_eUser != world) {
- player pl = (player)m_eUser;
+ CSPlayer pl = (CSPlayer)m_eUser;
/* we need to check if the user has changed every frame. */
if (!m_eUser.button5) {
@@ -121,7 +121,7 @@ item_c4::Logic(void)
/* tracked stat */
pl.progress = m_flDefusalState;
- pl.flags |= FL_FROZEN;
+ pl.AddVFlags(VFL_FROZEN);
g_cs_bombbeingdefused = TRUE;
}
@@ -143,7 +143,11 @@ item_c4::Logic(void)
/* In Bomb Defusal, all Terrorists receive $3500
* if they won by detonating the bomb. */
rules.RoundOver(TEAM_T, 3500, FALSE);
- Damage_Radius(origin, this.real_owner, 500, g_cstrike_bombradius, false, WEAPON_C4BOMB);
+
+ radiusDamage(origin, -g_cstrike_bombradius, 0i, 500i, real_owner);
+ //Damage_Radius(origin, this.real_owner, 500, g_cstrike_bombradius, false, WEAPON_C4BOMB);
+
+
StartSoundDef("weapon_c4bomb.explode", CHAN_VOICE, true);
for (entity e = world; (e = find(e, ::classname, "func_bomb_target"));) {
@@ -183,7 +187,7 @@ item_c4::Logic(void)
}
void
-item_c4::OnRemoveEntity(void)
+CSBombEntity::OnRemoveEntity(void)
{
ClearProgress();
m_flBeepTime = 0.0f;
@@ -193,7 +197,7 @@ item_c4::OnRemoveEntity(void)
}
void
-item_c4::Spawned(void)
+CSBombEntity::Spawned(void)
{
super::Spawned();
@@ -208,33 +212,13 @@ item_c4::Spawned(void)
customphysics = Logic;
PlayerUse = OnPlayerUse;
m_flExplodeTime = time + 45.0f;
- StartSoundDef("weapon_c4bomb.plant", CHAN_WEAPON, true);
-}
-
-void
-C4Bomb_Plant(NSClientPlayer planter)
-{
- item_c4 bomb = spawn(item_c4);
- bomb.Spawned();
- bomb.real_owner = planter;
-
- /* place directly below */
- traceline(planter.origin, planter.origin + [0,0,-64], FALSE, planter);
- setorigin(bomb, trace_endpos);
- bomb.SendFlags = -1;
-
- /* push the player out if we're on top */
- setorigin_safe(planter, planter.origin);
-
- Radio_BroadcastMessage(RADIO_BOMBPL);
- CSBot_BombPlantedNotify();
- g_cs_bombplanted = TRUE;
+ StartSoundDef("c4.plant", CHAN_WEAPON, true);
}
#endif
#ifdef CLIENT
void
-item_c4::DrawLED(void)
+CSBombEntity::DrawLED(void)
{
vector cameraPos = g_view.GetCameraOrigin();
float ledAlpha = 1.0 - (time - floor(time));
@@ -266,7 +250,7 @@ item_c4::DrawLED(void)
}
float
-item_c4::predraw(void)
+CSBombEntity::predraw(void)
{
DrawLED();
addentity(this);
@@ -276,8 +260,8 @@ item_c4::predraw(void)
void
w_c4bomb_parse(void)
{
- item_c4 tm = (item_c4)self;
- spawnfunc_item_c4();
+ CSBombEntity tm = (CSBombEntity)self;
+ spawnfunc_CSBombEntity();
g_c4bombled_spr = spriteframe("sprites/ledglow.spr", 0, 0.0f);
diff --git a/src/shared/items.h b/src/shared/items.h
index 2974ed5..1dc336f 100644
--- a/src/shared/items.h
+++ b/src/shared/items.h
@@ -30,7 +30,7 @@
#define ITEM_MAC10 0x00001000i
#define ITEM_TMP 0x00002000i
#define ITEM_SUIT 0x00004000i
-#define ITEM_LONGJUMP 0x00008000i
+#define ITEM_FAMAS 0x00008000i
#define ITEM_AK47 0x00010000i
#define ITEM_SG552 0x00020000i
@@ -47,5 +47,5 @@
#define ITEM_HEGRENADE 0x08000000i
#define ITEM_SMOKEGRENADE 0x10000000i
#define ITEM_DEFUSAL 0x20000000i
-#define ITEM_NIGHTVISION 0x40000000i
+#define ITEM_GALIL 0x40000000i
#define ITEM_HELMET 0x80000000i
diff --git a/src/shared/player.h b/src/shared/player.h
index 7cf1c50..d7a595c 100644
--- a/src/shared/player.h
+++ b/src/shared/player.h
@@ -101,59 +101,14 @@ string g_pbones[] =
enumflags
{
PLAYER_TOPFRAME = PLAYER_CUSTOMFIELDSTART,
- PLAYER_BOTTOMFRAME,
- PLAYER_AMMO1,
- PLAYER_AMMO2,
- PLAYER_AMMO3,
- PLAYER_CSTIMERS
+ PLAYER_BOTTOMFRAME = PLAYER_CUSTOMFIELDSTART,
+ PLAYER_CSTIMERS = PLAYER_CUSTOMFIELDSTART
};
-class player:NSClientPlayer
+class CSPlayer:NSClientPlayer
{
int ingame;
- PREDICTED_INT(usp45_mag)
- PREDICTED_INT(glock18_mag)
- PREDICTED_INT(deagle_mag)
- PREDICTED_INT(p228_mag)
- PREDICTED_INT(elites_mag)
- PREDICTED_INT(fiveseven_mag)
- PREDICTED_INT(m3_mag)
- PREDICTED_INT(xm1014_mag)
- PREDICTED_INT(mp5_mag)
- PREDICTED_INT(p90_mag)
- PREDICTED_INT(ump45_mag)
- PREDICTED_INT(mac10_mag)
- PREDICTED_INT(tmp_mag)
- PREDICTED_INT(ak47_mag)
- PREDICTED_INT(sg552_mag)
- PREDICTED_INT(m4a1_mag)
- PREDICTED_INT(aug_mag)
- PREDICTED_INT(scout_mag)
- PREDICTED_INT(awp_mag)
- PREDICTED_INT(g3sg1_mag)
- PREDICTED_INT(sg550_mag)
- PREDICTED_INT(para_mag)
-
- PREDICTED_INT(ammo_50ae)
- PREDICTED_INT(ammo_762mm)
- PREDICTED_INT(ammo_556mm)
- PREDICTED_INT(ammo_556mmbox)
- PREDICTED_INT(ammo_338mag)
- PREDICTED_INT(ammo_9mm)
- PREDICTED_INT(ammo_buckshot)
- PREDICTED_INT(ammo_45acp)
- PREDICTED_INT(ammo_357sig)
- PREDICTED_INT(ammo_57mm)
- PREDICTED_INT(ammo_hegrenade)
- PREDICTED_INT(ammo_fbgrenade)
- PREDICTED_INT(ammo_smokegrenade)
-
- PREDICTED_INT(mode_usp45)
- PREDICTED_INT(mode_m4a1)
- PREDICTED_INT(mode_glock18)
- PREDICTED_INT(mode_temp)
-
PREDICTED_FLOAT(cs_shotmultiplier)
PREDICTED_FLOAT(cs_shottime)
PREDICTED_FLOAT(cs_prev_hor_rec)
@@ -200,6 +155,7 @@ class player:NSClientPlayer
bool m_seenEnemy;
bool m_seenHostage;
bool m_seenBombSite;
+ bool m_bHasNightvision;
#endif
};
@@ -207,7 +163,7 @@ float punchangle_recovery(float punchangle) {
return 0.05 * (-0.2 * pow(1.2, fabs(punchangle)) + 4);
}
void
-player::Physics_InputPostMove(void)
+CSPlayer::Physics_InputPostMove(void)
{
//start of this function is taken from super::Physics_InputPostMove
float punch;
@@ -224,15 +180,16 @@ player::Physics_InputPostMove(void)
/* player animation code */
UpdatePlayerAnimation(input_timelength);
-
- RemoveFlags(FL_FROZEN);
+ RemoveVFlags(VFL_FROZEN);
+ RemoveVFlags(VFL_NOATTACK);
#ifdef SERVER
if (g_cs_gamestate == GAME_FREEZE) {
#else
if (getstati(STAT_GAMESTATE) == GAME_FREEZE) {
#endif
- flags |= FL_FROZEN;
+ AddVFlags(VFL_FROZEN);
+ AddVFlags(VFL_NOATTACK);
if (input_buttons & INPUT_BUTTON0) {
w_attack_next = (w_attack_next > 0.1) ? w_attack_next : 0.1f;
@@ -242,11 +199,11 @@ player::Physics_InputPostMove(void)
ProcessInput();
}
-void Animation_PlayerUpdate(player);
-void Animation_TimerUpdate(player, float);
+void Animation_PlayerUpdate(CSPlayer);
+void Animation_TimerUpdate(CSPlayer, float);
void
-player::UpdatePlayerAnimation(float timelength)
+CSPlayer::UpdatePlayerAnimation(float timelength)
{
/* calculate our skeletal progression */
Animation_PlayerUpdate(this);
@@ -260,7 +217,7 @@ void Camera_StrafeRoll(__inout vector camera_angle);
void Shake_Update(NSClientPlayer);
void
-player::UpdateAliveCam(void)
+CSPlayer::UpdateAliveCam(void)
{
vector cam_pos = GetEyePos();
Camera_RunPosBob(view_angles, cam_pos);
@@ -289,10 +246,10 @@ player::UpdateAliveCam(void)
}
.string oldmodel;
-string Weapons_GetPlayermodel(player, int);
+///string Weapons_GetPlayermodel(NSClientPlayer, int);
void
-player::UpdatePlayerAttachments(bool visible)
+CSPlayer::UpdatePlayerAttachments(bool visible)
{
/* draw the flashlight */
if (gflags & GF_FLASHLIGHT) {
@@ -324,7 +281,7 @@ player::UpdatePlayerAttachments(bool visible)
return;
/* what's the current weapon model supposed to be anyway? */
- p_model.oldmodel = Weapons_GetPlayermodel(this, activeweapon);
+ p_model.oldmodel = 0;//Weapons_GetPlayermodel(this, activeweapon);
/* we changed weapons, update skeletonindex */
if (p_model.model != p_model.oldmodel) {
@@ -369,17 +326,16 @@ player::UpdatePlayerAttachments(bool visible)
}
}
-void Weapons_AmmoUpdate(entity);
-void HUD_AmmoNotify_Check(player pl);
+void HUD_AmmoNotify_Check(CSPlayer pl);
/*
=================
-player::ReceiveEntity
+CSPlayer::ReceiveEntity
=================
*/
void
-player::ReceiveEntity(float flIsNew, float flChanged)
+CSPlayer::ReceiveEntity(float flIsNew, float flChanged)
{
- NSClientPlayer::ReceiveEntity(flIsNew, flChanged);
+ super::ReceiveEntity(flIsNew, flChanged);
/* animation */
READENTITY_BYTE(anim_top, PLAYER_TOPFRAME)
@@ -387,110 +343,35 @@ player::ReceiveEntity(float flIsNew, float flChanged)
READENTITY_FLOAT(anim_top_delay, PLAYER_TOPFRAME)
READENTITY_BYTE(anim_bottom, PLAYER_BOTTOMFRAME)
READENTITY_FLOAT(anim_bottom_time, PLAYER_BOTTOMFRAME)
- READENTITY_BYTE(usp45_mag, PLAYER_AMMO1)
- READENTITY_BYTE(glock18_mag, PLAYER_AMMO1)
- READENTITY_BYTE(deagle_mag, PLAYER_AMMO1)
- READENTITY_BYTE(p228_mag, PLAYER_AMMO1)
- READENTITY_BYTE(elites_mag, PLAYER_AMMO1)
- READENTITY_BYTE(fiveseven_mag, PLAYER_AMMO1)
- READENTITY_BYTE(m3_mag, PLAYER_AMMO1)
- READENTITY_BYTE(xm1014_mag, PLAYER_AMMO1)
- READENTITY_BYTE(mp5_mag, PLAYER_AMMO1)
- READENTITY_BYTE(p90_mag, PLAYER_AMMO1)
- READENTITY_BYTE(ump45_mag, PLAYER_AMMO1)
- READENTITY_BYTE(mac10_mag, PLAYER_AMMO1)
- READENTITY_BYTE(tmp_mag, PLAYER_AMMO1)
- READENTITY_BYTE(ak47_mag, PLAYER_AMMO1)
- READENTITY_BYTE(sg552_mag, PLAYER_AMMO1)
- READENTITY_BYTE(m4a1_mag, PLAYER_AMMO1)
- READENTITY_BYTE(aug_mag, PLAYER_AMMO1)
- READENTITY_BYTE(scout_mag, PLAYER_AMMO1)
- READENTITY_BYTE(awp_mag, PLAYER_AMMO1)
- READENTITY_BYTE(g3sg1_mag, PLAYER_AMMO1)
- READENTITY_BYTE(sg550_mag, PLAYER_AMMO1)
- READENTITY_BYTE(para_mag, PLAYER_AMMO1)
- READENTITY_BYTE(ammo_50ae, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_762mm, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_556mm, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_556mmbox, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_338mag, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_9mm, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_buckshot, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_45acp, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_357sig, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_57mm, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_hegrenade, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_fbgrenade, PLAYER_AMMO2)
- READENTITY_BYTE(ammo_smokegrenade, PLAYER_AMMO2)
- READENTITY_BYTE(mode_usp45, PLAYER_AMMO3)
- READENTITY_BYTE(mode_m4a1, PLAYER_AMMO3)
- READENTITY_BYTE(mode_glock18, PLAYER_AMMO3)
- READENTITY_BYTE(mode_temp, PLAYER_AMMO3)
+
READENTITY_BYTE(cs_shotmultiplier, PLAYER_CSTIMERS)
READENTITY_FLOAT(cs_shottime, PLAYER_CSTIMERS)
READENTITY_FLOAT(cs_prev_hor_rec, PLAYER_CSTIMERS)
READENTITY_BYTE(cs_hor_rec_sign, PLAYER_CSTIMERS)
READENTITY_FLOAT(cs_rec_reverse_chance, PLAYER_CSTIMERS)
- if (flChanged & PLAYER_AMMO1 || flChanged & PLAYER_AMMO2 || flChanged & PLAYER_AMMO3) {
- Weapons_AmmoUpdate(this);
+
+#if 0
+ if (flChanged & PLAYER_AMMOTYPE) {
HUD_AmmoNotify_Check(this);
}
+#endif
setorigin(this, origin);
}
/*
=================
-player::PredictPostFrame
+CSPlayer::PredictPostFrame
Save the last valid server values away in the _net variants of each field
so we can roll them back later.
=================
*/
void
-player::PredictPreFrame(void)
+CSPlayer::PredictPreFrame(void)
{
- NSClientPlayer::PredictPreFrame();
+ super::PredictPreFrame();
- SAVE_STATE(usp45_mag)
- SAVE_STATE(glock18_mag)
- SAVE_STATE(deagle_mag)
- SAVE_STATE(p228_mag)
- SAVE_STATE(elites_mag)
- SAVE_STATE(fiveseven_mag)
- SAVE_STATE(m3_mag)
- SAVE_STATE(xm1014_mag)
- SAVE_STATE(mp5_mag)
- SAVE_STATE(p90_mag)
- SAVE_STATE(ump45_mag)
- SAVE_STATE(mac10_mag)
- SAVE_STATE(tmp_mag)
- SAVE_STATE(ak47_mag)
- SAVE_STATE(sg552_mag)
- SAVE_STATE(m4a1_mag)
- SAVE_STATE(aug_mag)
- SAVE_STATE(scout_mag)
- SAVE_STATE(awp_mag)
- SAVE_STATE(g3sg1_mag)
- SAVE_STATE(sg550_mag)
- SAVE_STATE(para_mag)
- SAVE_STATE(ammo_50ae)
- SAVE_STATE(ammo_762mm)
- SAVE_STATE(ammo_556mm)
- SAVE_STATE(ammo_556mmbox)
- SAVE_STATE(ammo_338mag)
- SAVE_STATE(ammo_9mm)
- SAVE_STATE(ammo_buckshot)
- SAVE_STATE(ammo_45acp)
- SAVE_STATE(ammo_357sig)
- SAVE_STATE(ammo_57mm)
- SAVE_STATE(ammo_hegrenade)
- SAVE_STATE(ammo_fbgrenade)
- SAVE_STATE(ammo_smokegrenade)
- SAVE_STATE(mode_usp45)
- SAVE_STATE(mode_m4a1)
- SAVE_STATE(mode_glock18)
- SAVE_STATE(mode_temp)
SAVE_STATE(cs_shotmultiplier)
SAVE_STATE(cs_shottime)
SAVE_STATE(cs_prev_hor_rec)
@@ -505,55 +386,16 @@ player::PredictPreFrame(void)
/*
=================
-player::PredictPostFrame
+CSPlayer::PredictPostFrame
Where we roll back our values to the ones last sent/verified by the server.
=================
*/
void
-player::PredictPostFrame(void)
+CSPlayer::PredictPostFrame(void)
{
- NSClientPlayer::PredictPostFrame();
+ super::PredictPostFrame();
- ROLL_BACK(usp45_mag)
- ROLL_BACK(glock18_mag)
- ROLL_BACK(deagle_mag)
- ROLL_BACK(p228_mag)
- ROLL_BACK(elites_mag)
- ROLL_BACK(fiveseven_mag)
- ROLL_BACK(m3_mag)
- ROLL_BACK(xm1014_mag)
- ROLL_BACK(mp5_mag)
- ROLL_BACK(p90_mag)
- ROLL_BACK(ump45_mag)
- ROLL_BACK(mac10_mag)
- ROLL_BACK(tmp_mag)
- ROLL_BACK(ak47_mag)
- ROLL_BACK(sg552_mag)
- ROLL_BACK(m4a1_mag)
- ROLL_BACK(aug_mag)
- ROLL_BACK(scout_mag)
- ROLL_BACK(awp_mag)
- ROLL_BACK(g3sg1_mag)
- ROLL_BACK(sg550_mag)
- ROLL_BACK(para_mag)
- ROLL_BACK(ammo_50ae)
- ROLL_BACK(ammo_762mm)
- ROLL_BACK(ammo_556mm)
- ROLL_BACK(ammo_556mmbox)
- ROLL_BACK(ammo_338mag)
- ROLL_BACK(ammo_9mm)
- ROLL_BACK(ammo_buckshot)
- ROLL_BACK(ammo_45acp)
- ROLL_BACK(ammo_357sig)
- ROLL_BACK(ammo_57mm)
- ROLL_BACK(ammo_hegrenade)
- ROLL_BACK(ammo_fbgrenade)
- ROLL_BACK(ammo_smokegrenade)
- ROLL_BACK(mode_usp45)
- ROLL_BACK(mode_m4a1)
- ROLL_BACK(mode_glock18)
- ROLL_BACK(mode_temp)
ROLL_BACK(cs_shotmultiplier)
ROLL_BACK(cs_shottime)
ROLL_BACK(cs_prev_hor_rec)
@@ -568,60 +410,22 @@ player::PredictPostFrame(void)
#else
void
-player::ServerInputFrame(void)
+CSPlayer::ServerInputFrame(void)
{
super::ServerInputFrame();
}
void
-player::EvaluateEntity(void)
+CSPlayer::EvaluateEntity(void)
{
- NSClientPlayer::EvaluateEntity();
+ super::EvaluateEntity();
EVALUATE_FIELD(anim_top, PLAYER_TOPFRAME)
EVALUATE_FIELD(anim_top_time, PLAYER_TOPFRAME)
EVALUATE_FIELD(anim_top_delay, PLAYER_TOPFRAME)
EVALUATE_FIELD(anim_bottom, PLAYER_BOTTOMFRAME)
EVALUATE_FIELD(anim_bottom_time, PLAYER_BOTTOMFRAME)
- EVALUATE_FIELD(usp45_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(glock18_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(deagle_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(p228_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(elites_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(fiveseven_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(m3_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(xm1014_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(mp5_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(p90_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(ump45_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(mac10_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(tmp_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(ak47_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(sg552_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(m4a1_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(aug_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(scout_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(awp_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(g3sg1_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(sg550_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(para_mag, PLAYER_AMMO1)
- EVALUATE_FIELD(ammo_50ae, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_762mm, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_556mm, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_556mmbox, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_338mag, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_9mm, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_buckshot, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_45acp, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_357sig, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_57mm, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_hegrenade, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_fbgrenade, PLAYER_AMMO2)
- EVALUATE_FIELD(ammo_smokegrenade, PLAYER_AMMO2)
- EVALUATE_FIELD(mode_usp45, PLAYER_AMMO3)
- EVALUATE_FIELD(mode_m4a1, PLAYER_AMMO3)
- EVALUATE_FIELD(mode_glock18, PLAYER_AMMO3)
- EVALUATE_FIELD(mode_temp, PLAYER_AMMO3)
+
EVALUATE_FIELD(cs_shotmultiplier, PLAYER_CSTIMERS)
EVALUATE_FIELD(cs_shottime, PLAYER_CSTIMERS)
EVALUATE_FIELD(cs_prev_hor_rec, PLAYER_CSTIMERS)
@@ -631,11 +435,11 @@ player::EvaluateEntity(void)
/*
=================
-player::SendEntity
+CSPlayer::SendEntity
=================
*/
float
-player::SendEntity(entity ePEnt, float flChanged)
+CSPlayer::SendEntity(entity ePEnt, float flChanged)
{
/* don't broadcast invisible players */
if (IsFakeSpectator() && ePEnt != this)
@@ -645,55 +449,14 @@ player::SendEntity(entity ePEnt, float flChanged)
flChanged = OptimiseChangedFlags(ePEnt, flChanged);
- WriteByte(MSG_ENTITY, ENT_PLAYER);
- WriteFloat(MSG_ENTITY, flChanged);
-
- NSClientPlayer::SendEntity(ePEnt, flChanged);
+ super::SendEntity(ePEnt, flChanged);
SENDENTITY_BYTE(anim_top, PLAYER_TOPFRAME)
SENDENTITY_FLOAT(anim_top_time, PLAYER_TOPFRAME)
SENDENTITY_FLOAT(anim_top_delay, PLAYER_TOPFRAME)
SENDENTITY_BYTE(anim_bottom, PLAYER_BOTTOMFRAME)
SENDENTITY_FLOAT(anim_bottom_time, PLAYER_BOTTOMFRAME)
- SENDENTITY_BYTE(usp45_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(glock18_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(deagle_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(p228_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(elites_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(fiveseven_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(m3_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(xm1014_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(mp5_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(p90_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(ump45_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(mac10_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(tmp_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(ak47_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(sg552_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(m4a1_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(aug_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(scout_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(awp_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(g3sg1_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(sg550_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(para_mag, PLAYER_AMMO1)
- SENDENTITY_BYTE(ammo_50ae, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_762mm, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_556mm, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_556mmbox, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_338mag, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_9mm, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_buckshot, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_45acp, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_357sig, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_57mm, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_hegrenade, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_fbgrenade, PLAYER_AMMO2)
- SENDENTITY_BYTE(ammo_smokegrenade, PLAYER_AMMO2)
- SENDENTITY_BYTE(mode_usp45, PLAYER_AMMO3)
- SENDENTITY_BYTE(mode_m4a1, PLAYER_AMMO3)
- SENDENTITY_BYTE(mode_glock18, PLAYER_AMMO3)
- SENDENTITY_BYTE(mode_temp, PLAYER_AMMO3)
+
SENDENTITY_BYTE(cs_shotmultiplier, PLAYER_CSTIMERS)
SENDENTITY_FLOAT(cs_shottime, PLAYER_CSTIMERS)
SENDENTITY_FLOAT(cs_prev_hor_rec, PLAYER_CSTIMERS)
diff --git a/src/shared/pmove.h b/src/shared/pmove.h
deleted file mode 100644
index bac8a3c..0000000
--- a/src/shared/pmove.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#define PMOVE_STEPHEIGHT 18
-#define PMOVE_AIRSTEPHEIGHT 0
-#define PMOVE_FRICTION 4
-#define PMOVE_EDGEFRICTION 1
-#define PMOVE_STOPSPEED 75
-#define PMOVE_GRAVITY 800
-#define PMOVE_AIRACCELERATE 10
-#define PMOVE_WATERACCELERATE 8
-#define PMOVE_ACCELERATE 4
-#define PMOVE_MAXSPEED 250
-
-/* Counter-Strike players are hunched over a little bit */
-#define PHY_VIEWPOS [0,0,18]
-#define PHY_VIEWPOS_CROUCHED [0,0,12]
-
-#define PHY_HULL_MIN [-16,-16,-36]
-#define PHY_HULL_MAX [16,16,36]
-#define PHY_HULL_CROUCHED_MIN [-16,-16,-18]
-#define PHY_HULL_CROUCHED_MAX [16,16,18]
diff --git a/src/shared/pmove.qc b/src/shared/pmove.qc
index 83b824e..420cfaa 100644
--- a/src/shared/pmove.qc
+++ b/src/shared/pmove.qc
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2021 Marco Cawthorne
+ * Copyright (c) 2016-2024 Marco Cawthorne
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,14 +14,36 @@
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
+#define PMOVE_STEPHEIGHT 18
+#define PMOVE_AIRSTEPHEIGHT 0
+#define PMOVE_FRICTION 4
+#define PMOVE_EDGEFRICTION 1
+#define PMOVE_STOPSPEED 75
+#define PMOVE_GRAVITY 800
+#define PMOVE_AIRACCELERATE 10
+#define PMOVE_WATERACCELERATE 8
+#define PMOVE_ACCELERATE 4
+#define PMOVE_MAXSPEED 250
+#define PMOVE_STEP_WALKSPEED 270
+#define PMOVE_STEP_CROUCHSPEED 90
+#define PMOVE_BOXCENTER true
+#define PMOVE_NORMAL_HEIGHT 72
+#define PMOVE_NORMAL_VIEWHEIGHT 54
+#define PMOVE_CROUCH_HEIGHT 36
+#define PMOVE_CROUCH_VIEWHEIGHT 30
+
+/* disable prone, run and lean */
+#define PMOVE_STEP_RUNSPEED 0
+#define PMOVE_PRONE_HEIGHT 0
+
.float waterlevel;
.float watertype;
/* values courtesy of https://wiki.alliedmods.net/Cs_weapons_information */
float
-player::Physics_MaxSpeed(void)
+CSPlayer::Physics_MaxSpeed(void)
{
- float spd = serverkeyfloat("phy_maxspeed");
+ float spd = super::Physics_MaxSpeed();
switch (activeweapon)
{
@@ -109,21 +131,17 @@ player::Physics_MaxSpeed(void)
default:
}
- if (flags & FL_CROUCHING) {
- spd *= 0.5f;
- }
-
return spd;
}
void
-player::Physics_Fall(float impactspeed)
+CSPlayer::Physics_Fall(float impactspeed)
{
impactspeed *= 1.25f;
if (impactspeed > 580) {
#ifdef SERVER
float fFallDamage = (impactspeed - 580) * (100 / (1024 - 580)) * 0.75f;
- Damage_Apply(this, world, fFallDamage, 0, DMG_FALL | DMG_SKIP_ARMOR);
+ //Damage_Apply(this, world, fFallDamage, 0, DMG_FALL | DMG_SKIP_ARMOR);
if (random() < 0.5)
sound(this, CHAN_AUTO, "player/pl_pain2.wav", 1.0, ATTN_NORM);
@@ -134,7 +152,7 @@ player::Physics_Fall(float impactspeed)
}
void
-player::Physics_Jump(void)
+CSPlayer::Physics_Jump(void)
{
if (waterlevel >= 2) {
if (watertype == CONTENT_WATER) {
diff --git a/src/shared/w_ak47.qc b/src/shared/w_ak47.qc
deleted file mode 100644
index 9f1eca1..0000000
--- a/src/shared/w_ak47.qc
+++ /dev/null
@@ -1,342 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_ak47 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-AK-47 Weapon
-
-- Buy Menu -
-Price: $2500
-Terrorists only weapon
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_ak47.mdl"
-*/
-
-#ifdef CLIENT
-void
-w_rifle_ejectshell(void)
-{
- static void w_rifle_ejectshell_death(void) {
- remove(self);
- }
- static void w_rifle_ejectshell_touch(void) {
- if (other == world)
- Sound_Play(self, CHAN_BODY, "modelevent_shell.land");
- }
- entity eShell = spawn();
- setmodel(eShell, "models/rshell.mdl");
- eShell.solid = SOLID_BBOX;
- eShell.movetype = MOVETYPE_BOUNCE;
- eShell.drawmask = MASK_ENGINE;
- eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1], 0];
- eShell.velocity = pSeat->m_vecPredictedVelocity;
-
- makevectors(pSeat->m_eViewModel.angles);
- eShell.velocity += (v_forward * 0);
- eShell.velocity += (v_right * -80);
- eShell.velocity += (v_up * 80);
- eShell.touch = w_rifle_ejectshell_touch;
-
- eShell.avelocity = [0,45,900];
- eShell.think = w_rifle_ejectshell_death;
- eShell.nextthink = time + 2.5f;
- setsize(eShell, [0,0,0], [0,0,0]);
- setorigin(eShell, gettaginfo(pSeat->m_eViewModel, pSeat->m_iVMBones + 1));
-}
-#endif
-
-enum
-{
- AK47_IDLE,
- AK47_RELOAD,
- AK47_DRAW,
- AK47_SHOOT1,
- AK47_SHOOT2,
- AK47_SHOOT3
-};
-
-void
-w_ak47_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_ak47.fire");
- precache_model("models/w_ak47.mdl");
-#else
- Sound_Precache("modelevent_shell.land");
- precache_model("models/v_ak47.mdl");
- precache_model("models/p_ak47.mdl");
-#endif
-}
-
-void
-w_ak47_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.ak47_mag, pl.ammo_762mm, -1);
-}
-
-string
-w_ak47_wmodel(void)
-{
- return "models/w_ak47.mdl";
-}
-
-string
-w_ak47_pmodel(player pl)
-{
- return "models/p_ak47.mdl";
-}
-
-string
-w_ak47_deathmsg(void)
-{
- return "";
-}
-
-int
-w_ak47_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.ak47_mag = 30;
- else
- pl.ak47_mag = startammo;
- } else {
- if (pl.ammo_762mm < AMMO_MAX_762MM) {
- pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, AMMO_MAX_762MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_ak47_draw(player pl)
-{
- Weapons_SetModel("models/v_ak47.mdl");
- Weapons_ViewAnimation(pl, AK47_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 4;
- pl.cs_cross_deltadist = 4;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_ak47_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0) {
- return;
- }
- if (!pl.ak47_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 30,3)/1.5;
- pl.ak47_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, AK47_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, AK47_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, AK47_SHOOT3);
- break;
- }
-
- if (self.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_AK47, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_AK47, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_ak47_dmg", 36);
- TraceAttack_SetRangeModifier(2.375); /* 18 units!!! */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,1.2);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_AK47, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,1.2);
- Sound_Play(pl, CHAN_WEAPON, "weapon_ak47.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 1.1f, 0.92f,accuracy*0.5);
- pl.w_attack_next = 0.0975f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_ak47_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (pl.ak47_mag >= 30) {
- return;
- }
- if (!pl.ammo_762mm) {
- return;
- }
-
- Weapons_ViewAnimation(pl, AK47_RELOAD);
-
- pl.w_attack_next = 2.4f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::ak47_mag, player::ammo_762mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_ak47_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.ak47_mag == 0 && pl.ammo_762mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_ak47_aimanim(player pl)
-{
- return pl.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_AK47 : ANIM_AIM_AK47;
-}
-
-void
-w_ak47_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [72/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_ak47_isempty(player pl)
-{
-
- if (pl.ak47_mag <= 0 && pl.ammo_762mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_ak47_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_ak47_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_762mm, AMMO_MAX_762MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud11_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud11_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_ak47 =
-{
- .name = "ak47",
- .id = ITEM_AK47,
- .slot = 0,
- .slot_pos = 7,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_ak47_draw,
- .holster = __NULL__,
- .primary = w_ak47_primary,
- .secondary = __NULL__,
- .reload = w_ak47_reload,
- .release = w_ak47_release,
- .postdraw = w_ak47_hud,
- .precache = w_ak47_precache,
- .pickup = w_ak47_pickup,
- .updateammo = w_ak47_updateammo,
- .wmodel = w_ak47_wmodel,
- .pmodel = w_ak47_pmodel,
- .deathmsg = w_ak47_deathmsg,
- .aimanim = w_ak47_aimanim,
- .hudpic = w_ak47_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_ak47_isempty
-};
-
-#ifdef SERVER
-void
-weapon_ak47(void)
-{
- Weapons_InitItem(WEAPON_AK47);
-}
-#endif
diff --git a/src/shared/w_aug.qc b/src/shared/w_aug.qc
deleted file mode 100644
index 705e5cb..0000000
--- a/src/shared/w_aug.qc
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (c) 2016-2022 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_aug (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Steyr AUG Weapon
-
-- Buy Menu -
-Price: $3500
-Counter-Terrorists only weapon
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_aug.mdl"
-*/
-
-enum
-{
- AUG_IDLE,
- AUG_RELOAD,
- AUG_DRAW,
- AUG_SHOOT1,
- AUG_SHOOT2,
- AUG_SHOOT3
-};
-
-void
-w_aug_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_aug.fire");
- precache_model("models/w_aug.mdl");
-#else
- precache_model("models/v_aug.mdl");
- precache_model("models/p_aug.mdl");
-#endif
-}
-
-void
-w_aug_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.aug_mag, pl.ammo_762mm, -1);
-}
-
-string
-w_aug_wmodel(void)
-{
- return "models/w_aug.mdl";
-}
-
-string
-w_aug_pmodel(player pl)
-{
- return "models/p_aug.mdl";
-}
-
-string
-w_aug_deathmsg(void)
-{
- return "";
-}
-
-int
-w_aug_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.aug_mag = 30;
- else
- pl.aug_mag = startammo;
- } else {
- if (pl.ammo_762mm < AMMO_MAX_762MM) {
- pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, AMMO_MAX_762MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_aug_draw(player pl)
-{
- Weapons_SetModel("models/v_aug.mdl");
- Weapons_ViewAnimation(pl, AUG_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 3;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_aug_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (!pl.aug_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 35,2);
- pl.aug_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, AUG_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, AUG_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, AUG_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_aug_dmg", 32);
- TraceAttack_SetRangeModifier(2.125);
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,1.03);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_AUG, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,1.03);
- Sound_Play(pl, CHAN_WEAPON, "weapon_aug.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 0.7f, 1.1f,accuracy);
- if (pl.viewzoom == 1.0f) {
- pl.w_attack_next = 0.0825f;
- } else {
- pl.w_attack_next = 0.15f;
- }
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_aug_secondary(player pl)
-{
- if (pl.w_attack_next) {
- return;
- }
- /* Simple toggle of fovs */
- if (pl.viewzoom == 1.0f) {
- pl.viewzoom = 0.2f;
- } else {
- pl.viewzoom = 1.0f;
- }
- pl.w_attack_next = 0.5f;
-}
-
-void
-w_aug_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (pl.aug_mag >= 30) {
- return;
- }
- if (!pl.ammo_762mm) {
- return;
- }
- Weapons_ViewAnimation(pl, AUG_RELOAD);
- pl.w_attack_next = 3.3f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::aug_mag, player::ammo_762mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_aug_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.aug_mag == 0 && pl.ammo_762mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_aug_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_aug_hud(player pl)
-{
-#ifdef CLIENT
- if (pl.viewzoom == 1.0f) {
- Cstrike_DrawCrosshair();
- } else {
- Cstrike_DrawSimpleCrosshair();
- }
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [72/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_aug_isempty(player pl)
-{
-
- if (pl.aug_mag <= 0 && pl.ammo_762mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_aug_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_aug_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_762mm, AMMO_MAX_762MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud15_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud14_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_aug =
-{
- .name = "aug",
- .id = ITEM_AUG,
- .slot = 0,
- .slot_pos = 10,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_aug_draw,
- .holster = __NULL__,
- .primary = w_aug_primary,
- .secondary = w_aug_secondary,
- .reload = w_aug_reload,
- .release = w_aug_release,
- .postdraw = w_aug_hud,
- .precache = w_aug_precache,
- .pickup = w_aug_pickup,
- .updateammo = w_aug_updateammo,
- .wmodel = w_aug_wmodel,
- .pmodel = w_aug_pmodel,
- .deathmsg = w_aug_deathmsg,
- .aimanim = w_aug_aimanim,
- .hudpic = w_aug_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_aug_isempty
-};
-
-#ifdef SERVER
-void
-weapon_aug(void)
-{
- Weapons_InitItem(WEAPON_AUG);
-}
-#endif
diff --git a/src/shared/w_awp.qc b/src/shared/w_awp.qc
deleted file mode 100644
index 3aa6ab4..0000000
--- a/src/shared/w_awp.qc
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_awp (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-AWP (AI Arctic Warfare/Magnum) Weapon
-
-- Buy Menu -
-Price: $4750
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_awp.mdl"
-*/
-
-#ifdef CLIENT
-void
-w_sniper_ejectshell(void)
-{
- static void w_sniper_ejectshelldeath(void) {
- remove(self);
- }
- static void w_sniper_ejectshell_touch(void) {
- if (other == world)
- Sound_Play(self, CHAN_BODY, "modelevent_shell.land");
- }
- entity eShell = spawn();
- setmodel(eShell, "models/rshell_big.mdl");
- eShell.solid = SOLID_BBOX;
- eShell.movetype = MOVETYPE_BOUNCE;
- eShell.drawmask = MASK_ENGINE;
- eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1], 0];
- eShell.velocity = pSeat->m_vecPredictedVelocity;
-
- makevectors(pSeat->m_eViewModel.angles);
- eShell.velocity += (v_forward * 0);
- eShell.velocity += (v_right * -80);
- eShell.velocity += (v_up * 100);
- eShell.touch = w_sniper_ejectshell_touch;
-
- eShell.avelocity = [0,45,900];
- eShell.think = w_sniper_ejectshelldeath;
- eShell.nextthink = time + 2.5f;
- setsize(eShell, [0,0,0], [0,0,0]);
- setorigin(eShell, gettaginfo(pSeat->m_eViewModel, pSeat->m_iVMBones + 1));
-}
-#endif
-
-enum
-{
- AWP_IDLE,
- AWP_SHOOT1,
- AWP_SHOOT2,
- AWP_SHOOT3,
- AWP_RELOAD,
- AWP_DRAW
-};
-
-void
-w_awp_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_awp.fire");
- Sound_Precache("weapon_awp.zoom");
- precache_model("models/w_awp.mdl");
-#else
- precache_model("models/v_awp.mdl");
- precache_model("models/p_awp.mdl");
-#endif
-}
-
-void
-w_awp_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.awp_mag, pl.ammo_338mag, pl.mode_temp);
-}
-
-string
-w_awp_wmodel(void)
-{
- return "models/w_awp.mdl";
-}
-
-string
-w_awp_pmodel(player pl)
-{
- return "models/p_awp.mdl";
-}
-
-string
-w_awp_deathmsg(void)
-{
- return "";
-}
-
-int
-w_awp_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.awp_mag = 10;
- else
- pl.awp_mag = startammo;
- } else {
- if (pl.ammo_338mag < 20) {
- pl.ammo_338mag = bound(0, pl.ammo_338mag + 10, 20);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_awp_draw(player pl)
-{
- Weapons_SetModel("models/v_awp.mdl");
- Weapons_ViewAnimation(pl, AWP_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_awp_release(player pl)
-{
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.awp_mag == 0 && pl.ammo_338mag > 0) {
- Weapons_Reload(pl);
- return;
- }
-
- if (pl.w_idle_next > 0.0f) {
- pl.viewzoom = 1.0f;
- Weapons_EnableModel();
- return;
- }
-
- if (pl.mode_temp == 1) {
- pl.viewzoom = 0.45f;
- Weapons_DisableModel();
- } else if (pl.mode_temp == 2) {
- pl.viewzoom = 0.1f;
- Weapons_DisableModel();
- } else {
- pl.viewzoom = 1.0f;
- Weapons_EnableModel();
- }
-}
-
-void
-w_awp_secondary(player pl)
-{
- if (pl.w_attack_next) {
- return;
- }
-
-#ifdef SSQC
- Sound_Play(pl, CHAN_WEAPON, "weapon_awp.zoom");
-#endif
-
- /* Simple toggle of fovs */
- if (pl.mode_temp == 1) {
- pl.mode_temp = 2;
- } else if (pl.mode_temp == 2) {
- pl.mode_temp = 0;
- } else {
- pl.mode_temp = 1;
- }
-
- pl.w_attack_next = 0.3f;
- pl.w_idle_next = 0.0f;
- w_awp_release(pl);
-}
-
-void
-w_awp_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- w_awp_release(pl);
- return;
- }
- if (!pl.awp_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, -1);
-
- pl.awp_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, AWP_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, AWP_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, AWP_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_sniper_ejectshell, 0.9f);
-#else
- dmg = Skill_GetValue("plr_awp_dmg", 115);
- TraceAttack_SetRangeModifier(1.375);
- TraceAttack_SetPenetrationPower(2); /* however, we can only penetrate one wall if the first one is 5 units thick or higher */
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_AWP, "Impact.BigShot");
-
- Sound_Play(pl, CHAN_WEAPON, "weapon_awp.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 1, 1,accuracy);
- pl.w_attack_next = 1.2f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_awp_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.awp_mag >= 10)
- return;
- if (!pl.ammo_338mag)
- return;
-
- Weapons_ViewAnimation(pl, AWP_RELOAD);
-
- pl.w_attack_next = 2.9f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::awp_mag, player::ammo_338mag, 10);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-float
-w_awp_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_awp_hud(player pl)
-{
-#ifdef CLIENT
- if (pl.viewzoom < 1.0f) {
- Cstrike_DrawScope();
- }
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [24/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_awp_isempty(player pl)
-{
-
- if (pl.awp_mag <= 0 && pl.ammo_338mag <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_awp_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_awp_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_338mag, AMMO_MAX_338MAG, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud5_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud2_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_awp =
-{
- .name = "awp",
- .id = ITEM_AWP,
- .slot = 0,
- .slot_pos = 12,
- .weight = 30,
- .allow_drop = TRUE,
- .draw = w_awp_draw,
- .holster = __NULL__,
- .primary = w_awp_primary,
- .secondary = w_awp_secondary,
- .reload = w_awp_reload,
- .release = w_awp_release,
- .postdraw = w_awp_hud,
- .precache = w_awp_precache,
- .pickup = w_awp_pickup,
- .updateammo = w_awp_updateammo,
- .wmodel = w_awp_wmodel,
- .pmodel = w_awp_pmodel,
- .deathmsg = w_awp_deathmsg,
- .aimanim = w_awp_aimanim,
- .hudpic = w_awp_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_awp_isempty
-};
-
-#ifdef SERVER
-void
-weapon_awp(void)
-{
- Weapons_InitItem(WEAPON_AWP);
-}
-#endif
diff --git a/src/shared/w_c4bomb.qc b/src/shared/w_c4bomb.qc
deleted file mode 100644
index 2768558..0000000
--- a/src/shared/w_c4bomb.qc
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_c4bomb (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-C4 Bomb Weapon, Bomb Defusal Gamemode Entity
-
-Default arsenal for Terrorists
-
-Can only be picked up by Terrorists and planted in
-func_bombtarget brush entities.
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_c4.mdl"
-*/
-
-/* C4 weapon logic */
-
-enum
-{
- C4_IDLE,
- C4_DRAW,
- C4_DROP,
- C4_ENTERCODE
-};
-
-enum
-{
- C4S_NONE,
- C4S_ENTERINGCODE,
- C4S_DROPPING,
- C4S_DONE
-};
-
-void
-w_c4bomb_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_c4bomb.disarm");
- Sound_Precache("weapon_c4bomb.disarmed");
- Sound_Precache("weapon_c4bomb.explode");
- Sound_Precache("weapon_c4bomb.plant");
- Sound_Precache("weapon_c4bomb.beep1");
- Sound_Precache("weapon_c4bomb.beep2");
- Sound_Precache("weapon_c4bomb.beep3");
- Sound_Precache("weapon_c4bomb.beep4");
- Sound_Precache("weapon_c4bomb.beep5");
- precache_sound("weapons/c4_beep1.wav");
- precache_sound("weapons/c4_beep2.wav");
- precache_sound("weapons/c4_beep3.wav");
- precache_sound("weapons/c4_beep4.wav");
- precache_sound("weapons/c4_beep5.wav");
- precache_sound("weapons/c4_disarmed.wav");
- precache_sound("weapons/c4_disarm.wav");
- precache_model("models/w_c4.mdl");
- precache_model("models/w_backpack.mdl");
- precache_model("sprites/ledglow.spr");
-#else
- precache_model("models/v_c4.mdl");
- precache_model("models/p_c4.mdl");
-#endif
-}
-
-void
-w_c4bomb_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, -1, 1, -1);
-}
-
-string
-w_c4bomb_wmodel(void)
-{
- return "models/w_backpack.mdl";
-}
-
-string
-w_c4bomb_pmodel(player pl)
-{
- return "models/p_c4.mdl";
-}
-
-string
-w_c4bomb_deathmsg(void)
-{
- return "";
-}
-
-void
-w_c4bomb_draw(player pl)
-{
- Weapons_SetModel("models/v_c4.mdl");
- Weapons_ViewAnimation(pl, C4_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_c4bomb_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- if (pl.mode_temp == C4S_DROPPING) {
- if (pl.w_idle_next <= 0.0f) {
- pl.mode_temp = C4S_DONE;
-#ifdef SERVER
- C4Bomb_Plant(pl);
- Weapons_RemoveItem(pl, WEAPON_C4BOMB);
-#endif
- }
- return;
- }
-
- /* reset animation */
- if (pl.mode_temp != C4S_NONE) {
- Weapons_ViewAnimation(pl, C4_IDLE);
- }
- pl.mode_temp = C4S_NONE;
- pl.w_idle_next = 0.0f;
-}
-
-void
-w_c4bomb_primary(player pl)
-{
-
- if (!(pl.gflags & GF_BOMBZONE)) {
- return;
- }
-
- pl.flags |= FL_FROZEN;
- input_movevalues = [0,0,0];
-
- switch (pl.mode_temp) {
- case C4S_NONE:
- pl.mode_temp = C4S_ENTERINGCODE;
- Weapons_ViewAnimation(pl, C4_ENTERCODE);
- pl.w_idle_next = 3.0f;
- break;
- case C4S_ENTERINGCODE:
- if (pl.w_idle_next <= 0.0f) {
- pl.mode_temp = C4S_DROPPING;
- Weapons_ViewAnimation(pl, C4_DROP);
- pl.w_idle_next = 1.0f;
- }
- break;
- case C4S_DROPPING:
- w_c4bomb_release(pl);
- return;
- break;
- default:
- break;
- }
-
- pl.w_attack_next = 0.0f;
-}
-
-float
-w_c4bomb_aimanim(player pl)
-{
- return self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_C4 : ANIM_AIM_C4;
-}
-
-void
-w_c4bomb_hud(player pl)
-{
-#ifdef CLIENT
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [96/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_c4bomb_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (pl.team != TEAM_T)
- return (0);
-#endif
- return (1);
-}
-
-void
-w_c4bomb_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud4_spr,
- [0,0],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud1_spr,
- [0,0],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_c4bomb =
-{
- .name = "c4",
- .id = ITEM_C4BOMB,
- .slot = 4,
- .slot_pos = 0,
- .allow_drop = TRUE,
- .draw = w_c4bomb_draw,
- .holster = __NULL__,
- .primary = w_c4bomb_primary,
- .secondary = __NULL__,
- .reload = __NULL__,
- .release = w_c4bomb_release,
- .postdraw = w_c4bomb_hud,
- .precache = w_c4bomb_precache,
- .pickup = w_c4bomb_pickup,
- .updateammo = w_c4bomb_updateammo,
- .wmodel = w_c4bomb_wmodel,
- .pmodel = w_c4bomb_pmodel,
- .deathmsg = w_c4bomb_deathmsg,
- .aimanim = w_c4bomb_aimanim,
- .hudpic = w_c4bomb_hudpic
-};
-
-#ifdef SERVER
-void
-weapon_c4bomb(void)
-{
- Weapons_InitItem(WEAPON_C4BOMB);
-}
-#endif
diff --git a/src/shared/w_deagle.qc b/src/shared/w_deagle.qc
deleted file mode 100644
index 1a60237..0000000
--- a/src/shared/w_deagle.qc
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_deagle (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Desert Eagle .50 AE Weapon
-
-- Buy Menu -
-Price: $650
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_deagle.mdl"
-*/
-
-#ifdef CLIENT
-void
-w_pistol_ejectshell(void)
-{
- static void w_pistol_ejectshell_death(void) {
- remove(self);
- }
- static void w_pistol_ejectshell_touch(void) {
- if (other == world)
- Sound_Play(self, CHAN_BODY, "modelevent_shell.land");
- }
- entity eShell = spawn();
- setmodel(eShell, "models/pshell.mdl");
- eShell.solid = SOLID_BBOX;
- eShell.movetype = MOVETYPE_BOUNCE;
- eShell.drawmask = MASK_ENGINE;
- eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1], 0];
- eShell.velocity = pSeat->m_vecPredictedVelocity;
-
- makevectors(pSeat->m_eViewModel.angles);
- eShell.velocity += (v_forward * 0);
- eShell.velocity += (v_right * -80);
- eShell.velocity += (v_up * 100);
- eShell.touch = w_pistol_ejectshell_touch;
-
- eShell.avelocity = [0,45,900];
- eShell.think = w_pistol_ejectshell_death;
- eShell.nextthink = time + 2.5f;
- setsize(eShell, [0,0,0], [0,0,0]);
- setorigin(eShell, gettaginfo(pSeat->m_eViewModel, pSeat->m_iVMBones + 1));
-}
-#endif
-
-enum
-{
- DEAGLE_IDLE,
- DEAGLE_SHOOT1,
- DEAGLE_SHOOT2,
- DEAGLE_SHOOT_EMPTY,
- DEAGLE_RELOAD,
- DEAGLE_DRAW
-};
-
-void
-w_deagle_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_deagle.fire");
- precache_model("models/w_deagle.mdl");
-#else
- precache_model("models/v_deagle.mdl");
- precache_model("models/p_deagle.mdl");
-#endif
-}
-
-void
-w_deagle_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.deagle_mag, pl.ammo_50ae, -1);
-}
-
-string
-w_deagle_wmodel(void)
-{
- return "models/w_deagle.mdl";
-}
-
-string
-w_deagle_pmodel(player pl)
-{
- return "models/p_deagle.mdl";
-}
-
-string
-w_deagle_deathmsg(void)
-{
- return "";
-}
-
-int
-w_deagle_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.deagle_mag = 7;
- else
- pl.deagle_mag = startammo;
- } else {
- if (pl.ammo_50ae < AMMO_MAX_50AE) {
- pl.ammo_50ae = bound(0, pl.ammo_50ae + 7, AMMO_MAX_50AE);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_deagle_draw(player pl)
-{
- Weapons_SetModel("models/v_deagle.mdl");
- Weapons_ViewAnimation(pl, DEAGLE_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_deagle_primary(player pl)
-{
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.gflags & GF_SEMI_TOGGLED)
- return;
- if (!pl.deagle_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 55,1.5)+0.005;
- pl.deagle_mag--;
-
- if (pl.deagle_mag <= 0) {
- Weapons_ViewAnimation(pl, DEAGLE_SHOOT_EMPTY);
- } else {
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, DEAGLE_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, DEAGLE_SHOOT2);
- break;
- }
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_ONEHAND, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_SHOOT_ONEHAND, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- int dmg = Skill_GetValue("plr_deagle_dmg", 54);
- TraceAttack_SetRangeModifier(1.875); /* 14 but not 15 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,0.5);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_DEAGLE, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,0.5);
- Sound_Play(pl, CHAN_WEAPON, "weapon_deagle.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 10, .35,accuracy*0.5);
- pl.gflags |= GF_SEMI_TOGGLED;
- pl.w_attack_next = 0.2f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_deagle_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (pl.deagle_mag >= 7) {
- return;
- }
- if (!pl.ammo_50ae) {
- return;
- }
- Weapons_ViewAnimation(pl, DEAGLE_RELOAD);
-
- pl.w_attack_next = 2.1f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::deagle_mag, player::ammo_50ae, 7);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_deagle_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.deagle_mag == 0 && pl.ammo_50ae > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_deagle_aimanim(player pl)
-{
- return pl.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_ONEHAND : ANIM_AIM_ONEHAND;
-}
-
-void
-w_deagle_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [24/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_deagle_isempty(player pl)
-{
-
- if (pl.deagle_mag <= 0 && pl.ammo_50ae <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_deagle_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_deagle_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_50ae, AMMO_MAX_50AE, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud11_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud10_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_deagle =
-{
- .name = "deagle",
- .id = ITEM_DEAGLE,
- .slot = 1,
- .slot_pos = 2,
- .weight = 7,
- .allow_drop = TRUE,
- .draw = w_deagle_draw,
- .holster = __NULL__,
- .primary = w_deagle_primary,
- .secondary = __NULL__,
- .reload = w_deagle_reload,
- .release = w_deagle_release,
- .postdraw = w_deagle_hud,
- .precache = w_deagle_precache,
- .pickup = w_deagle_pickup,
- .updateammo = w_deagle_updateammo,
- .wmodel = w_deagle_wmodel,
- .pmodel = w_deagle_pmodel,
- .deathmsg = w_deagle_deathmsg,
- .aimanim = w_deagle_aimanim,
- .hudpic = w_deagle_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_deagle_isempty
-};
-
-#ifdef SERVER
-void
-weapon_deagle(void)
-{
- Weapons_InitItem(WEAPON_DEAGLE);
-}
-#endif
diff --git a/src/shared/w_elites.qc b/src/shared/w_elites.qc
deleted file mode 100644
index 2248374..0000000
--- a/src/shared/w_elites.qc
+++ /dev/null
@@ -1,410 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_elites (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Dual Beretta 96G (Elites) Weapon
-
-- Buy Menu -
-Price: $1000
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_elite.mdl"
-*/
-
-#ifdef CLIENT
-void
-w_elites_ejectshell(int side)
-{
- static void w_elites_ejectshell_death(void) {
- remove(self);
- }
- static void w_elites_ejectshell_touch(void) {
- if (other == world)
- Sound_Play(self, CHAN_BODY, "modelevent_shell.land");
- }
- entity eShell = spawn();
- setmodel(eShell, "models/pshell.mdl");
- eShell.solid = SOLID_BBOX;
- eShell.movetype = MOVETYPE_BOUNCE;
- eShell.drawmask = MASK_ENGINE;
- eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1], 0];
- eShell.velocity = pSeat->m_vecPredictedVelocity;
-
- makevectors(pSeat->m_eViewModel.angles);
- eShell.velocity += (v_forward * 0);
- eShell.velocity += (v_right * -80);
- eShell.velocity += (v_up * 100);
- eShell.touch = w_elites_ejectshell_touch;
-
- eShell.avelocity = [0,45,900];
- eShell.think = w_elites_ejectshell_death;
- eShell.nextthink = time + 2.5f;
- setsize(eShell, [0,0,0], [0,0,0]);
- setorigin(eShell, gettaginfo(pSeat->m_eViewModel, pSeat->m_iVMBones + 1 + side));
-}
-
-void
-w_pistol_ejectshell_left(void)
-{
- w_elites_ejectshell(1);
-}
-
-void
-w_pistol_ejectshell_right(void)
-{
- w_elites_ejectshell(0);
-}
-#endif
-
-enum
-{
- ELITES_IDLE,
- ELITES_IDLE_LEFTEMPTY,
- ELITES_SHOOT_LEFT1,
- ELITES_SHOOT_LEFT2,
- ELITES_SHOOT_LEFT3,
- ELITES_SHOOT_LEFT4,
- ELITES_SHOOT_LEFT5,
- ELITES_SHOOT_LEFTLAST,
- ELITES_SHOOT_RIGHT1,
- ELITES_SHOOT_RIGHT2,
- ELITES_SHOOT_RIGHT3,
- ELITES_SHOOT_RIGHT4,
- ELITES_SHOOT_RIGHT5,
- ELITES_SHOOT_RIGHTLAST,
- ELITES_RELOAD,
- ELITES_DRAW
-};
-
-void
-w_elites_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_elites.fire");
- precache_model("models/w_elite.mdl");
-#else
- precache_model("models/v_elite.mdl");
- precache_model("models/p_elite.mdl");
-#endif
-}
-
-void
-w_elites_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.elites_mag, pl.ammo_9mm, -1);
-}
-
-string
-w_elites_wmodel(void)
-{
- return "models/w_elite.mdl";
-}
-
-string
-w_elites_pmodel(player pl)
-{
- return "models/p_elite.mdl";
-}
-
-string
-w_elites_deathmsg(void)
-{
- return "";
-}
-
-int
-w_elites_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.elites_mag = 30;
- else
- pl.elites_mag = startammo;
- } else {
- if (pl.ammo_9mm < AMMO_MAX_9MM) {
- pl.ammo_9mm = bound(0, pl.ammo_9mm + 30, AMMO_MAX_9MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_elites_draw(player pl)
-{
- Weapons_SetModel("models/v_elite.mdl");
- Weapons_ViewAnimation(pl, ELITES_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 4;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_elites_primary(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (pl.gflags & GF_SEMI_TOGGLED) {
- return;
- }
- if (!pl.elites_mag) {
- return;
- }
-
- pl.mode_temp = 1 - pl.mode_temp;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 150,1)+0.002;
- int dmg = 0;
- pl.elites_mag--;
-
- int r = (float)input_sequence % 5;
- if (pl.mode_temp) {
- if (pl.elites_mag <= 0) {
- Weapons_ViewAnimation(pl, ELITES_SHOOT_LEFTLAST);
- } else {
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_LEFT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_LEFT2);
- break;
- case 2:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_LEFT3);
- break;
- case 3:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_LEFT4);
- break;
- default:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_LEFT1);
- break;
- }
- }
- } else {
- if (pl.elites_mag <= 0) {
- Weapons_ViewAnimation(pl, ELITES_SHOOT_RIGHTLAST);
- } else {
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_RIGHT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_RIGHT2);
- break;
- case 2:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_RIGHT3);
- break;
- case 3:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_RIGHT4);
- break;
- default:
- Weapons_ViewAnimation(pl, ELITES_SHOOT_RIGHT1);
- break;
- }
- }
- }
-
- if (pl.flags & FL_CROUCHING) {
- if (pl.mode_temp)
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT2_DUALPISTOLS, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_DUALPISTOLS, 0.45f);
- } else {
- if (pl.mode_temp)
- Animation_PlayerTop(pl, ANIM_SHOOT2_DUALPISTOLS, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_SHOOT_DUALPISTOLS, 0.45f);
- }
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
-
- if (pl.mode_temp)
- View_AddEvent(w_pistol_ejectshell_left, 0.0f);
- else
- View_AddEvent(w_pistol_ejectshell_right, 0.0f);
-#else
- dmg = Skill_GetValue("plr_elites_dmg", 45);
- TraceAttack_SetRangeModifier(1.875); /* 14 but not 15 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,.9f);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_ELITES, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,.9f);
- Sound_Play(pl, CHAN_WEAPON, "weapon_elites.fire");
-#endif
- Cstrike_ShotMultiplierAdd(pl, 3, .85,accuracy);
- pl.gflags |= GF_SEMI_TOGGLED;
- pl.w_attack_next = 0.13f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_elites_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.elites_mag >= 30)
- return;
- if (!pl.ammo_9mm)
- return;
-
- Weapons_ViewAnimation(pl, ELITES_RELOAD);
-
- pl.w_attack_next = 4.6f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::elites_mag, player::ammo_9mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_elites_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.elites_mag == 0 && pl.ammo_9mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_elites_aimanim(player pl)
-{
- return pl.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_DUALPISTOLS : ANIM_AIM_DUALPISTOLS;
-}
-
-void
-w_elites_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [48/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_elites_isempty(player pl)
-{
-
- if (pl.elites_mag <= 0 && pl.ammo_9mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_elites_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_elites_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_9mm, AMMO_MAX_9MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud15_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud14_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_elites =
-{
- .name = "elites",
- .id = ITEM_ELITES,
- .slot = 1,
- .slot_pos = 4,
- .weight = 5,
- .allow_drop = TRUE,
- .draw = w_elites_draw,
- .holster = __NULL__,
- .primary = w_elites_primary,
- .secondary = __NULL__,
- .reload = w_elites_reload,
- .release = w_elites_release,
- .postdraw = w_elites_hud,
- .precache = w_elites_precache,
- .pickup = w_elites_pickup,
- .updateammo = w_elites_updateammo,
- .wmodel = w_elites_wmodel,
- .pmodel = w_elites_pmodel,
- .deathmsg = w_elites_deathmsg,
- .aimanim = w_elites_aimanim,
- .hudpic = w_elites_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_elites_isempty
-};
-
-#ifdef SERVER
-void
-weapon_elites(void)
-{
- Weapons_InitItem(WEAPON_ELITES);
-}
-#endif
diff --git a/src/shared/w_fiveseven.qc b/src/shared/w_fiveseven.qc
deleted file mode 100644
index 0edf9e5..0000000
--- a/src/shared/w_fiveseven.qc
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_fiveseven (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Five-SeveN Weapon
-
-- Buy Menu -
-Price: $750
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_fiveseven.mdl"
-*/
-
-enum
-{
- FIVESEVEN_IDLE,
- FIVESEVEN_SHOOT1,
- FIVESEVEN_SHOOT2,
- FIVESEVEN_SHOOT_EMPTY,
- FIVESEVEN_RELOAD,
- FIVESEVEN_DRAW
-};
-
-void
-w_fiveseven_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_fiveseven.fire");
- precache_model("models/w_fiveseven.mdl");
-#else
- precache_model("models/v_fiveseven.mdl");
- precache_model("models/p_fiveseven.mdl");
-#endif
-}
-
-void
-w_fiveseven_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.fiveseven_mag, pl.ammo_57mm, -1);
-}
-
-string
-w_fiveseven_wmodel(void)
-{
- return "models/w_fiveseven.mdl";
-}
-
-string
-w_fiveseven_pmodel(player pl)
-{
- return "models/p_fiveseven.mdl";
-}
-
-string
-w_fiveseven_deathmsg(void)
-{
- return "";
-}
-
-int
-w_fiveseven_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.fiveseven_mag = 20;
- else
- pl.fiveseven_mag = startammo;
- } else {
- if (pl.ammo_57mm < AMMO_MAX_57MM) {
- pl.ammo_57mm = bound(0, pl.ammo_57mm + 20, AMMO_MAX_57MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_fiveseven_draw(player pl)
-{
- Weapons_SetModel("models/v_fiveseven.mdl");
- Weapons_ViewAnimation(pl, FIVESEVEN_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_fiveseven_primary(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
-
- if (pl.gflags & GF_SEMI_TOGGLED) {
- return;
- }
- if (!pl.fiveseven_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl,200,1.4)+ 0.0055f;
- int dmg = 0;
- pl.fiveseven_mag--;
-
- if (pl.fiveseven_mag <= 0) {
- Weapons_ViewAnimation(pl, FIVESEVEN_SHOOT_EMPTY);
- } else {
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, FIVESEVEN_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, FIVESEVEN_SHOOT2);
- break;
- }
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_ONEHAND, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_ONEHAND, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_fiveseven_dmg", 25);
- TraceAttack_SetRangeModifier(1.875); /* 14 but not 15 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,0.5f);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_FIVESEVEN, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,0.5f);
- Sound_Play(pl, CHAN_WEAPON, "weapon_fiveseven.fire");
-#endif
- Cstrike_ShotMultiplierAdd(pl, 10, .4,accuracy);
- pl.gflags |= GF_SEMI_TOGGLED;
- pl.w_attack_next = 0.155f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_fiveseven_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.fiveseven_mag >= 20)
- return;
- if (!pl.ammo_57mm)
- return;
-
- Weapons_ViewAnimation(pl, FIVESEVEN_RELOAD);
-
- pl.w_attack_next = 3.1f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::fiveseven_mag, player::ammo_57mm, 20);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_fiveseven_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.fiveseven_mag == 0 && pl.ammo_57mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_fiveseven_aimanim(player pl)
-{
- return pl.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_ONEHAND : ANIM_AIM_ONEHAND;
-}
-
-void
-w_fiveseven_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [120/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_fiveseven_isempty(player pl)
-{
-
- if (pl.fiveseven_mag <= 0 && pl.ammo_57mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_fiveseven_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_fiveseven_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_57mm, AMMO_MAX_57MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud15_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud14_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_fiveseven =
-{
- .name = "fiveseven",
- .id = ITEM_FIVESEVEN,
- .slot = 1,
- .slot_pos = 5,
- .weight = 5,
- .allow_drop = TRUE,
- .draw = w_fiveseven_draw,
- .holster = __NULL__,
- .primary = w_fiveseven_primary,
- .secondary = __NULL__,
- .reload = w_fiveseven_reload,
- .release = w_fiveseven_release,
- .postdraw = w_fiveseven_hud,
- .precache = w_fiveseven_precache,
- .pickup = w_fiveseven_pickup,
- .updateammo = w_fiveseven_updateammo,
- .wmodel = w_fiveseven_wmodel,
- .pmodel = w_fiveseven_pmodel,
- .deathmsg = w_fiveseven_deathmsg,
- .aimanim = w_fiveseven_aimanim,
- .hudpic = w_fiveseven_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_fiveseven_isempty
-};
-
-#ifdef SERVER
-void
-weapon_fiveseven(void)
-{
- Weapons_InitItem(WEAPON_FIVESEVEN);
-}
-#endif
diff --git a/src/shared/w_flashbang.qc b/src/shared/w_flashbang.qc
deleted file mode 100644
index afdd4de..0000000
--- a/src/shared/w_flashbang.qc
+++ /dev/null
@@ -1,307 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_flashbang (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Concussion (Flashbang) Grenade Weapon
-
-When thrown, nearby players become blinded temporarily from the blast.
-
-- Buy Menu -
-Price: $200
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_flashbang.mdl"
-*/
-
-enum
-{
- FLASHBANG_IDLE,
- FLASHBANG_PULLPIN,
- FLASHBANG_THROW,
- FLASHBANG_DRAW,
-};
-
-void
-w_flashbang_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_flashbang.bounce");
- Sound_Precache("weapon_flashbang.explode");
- precache_model("models/w_flashbang.mdl");
-#else
- precache_model("models/v_flashbang.mdl");
- precache_model("models/p_flashbang.mdl");
-#endif
-}
-
-void
-w_flashbang_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, -1, pl.ammo_fbgrenade, pl.mode_temp);
-}
-
-int
-w_flashbang_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (pl.ammo_fbgrenade < AMMO_MAX_FLASHBANG) {
- pl.ammo_fbgrenade = bound(0, pl.ammo_fbgrenade + 1, AMMO_MAX_FLASHBANG);
- } else {
- return (0);
- }
-#endif
- return (1);
-}
-
-string
-w_flashbang_wmodel(void)
-{
- return "models/w_flashbang.mdl";
-}
-
-string
-w_flashbang_pmodel(player pl)
-{
- return "models/p_flashbang.mdl";
-}
-
-string
-w_flashbang_deathmsg(void)
-{
- return "";
-}
-
-void
-w_flashbang_draw(player pl)
-{
- Weapons_SetModel("models/v_flashbang.mdl");
- Weapons_ViewAnimation(pl, FLASHBANG_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-#ifdef SERVER
-void
-w_flashbang_throw(player pl)
-{
- static void flashbang_explode(void)
- {
- FX_Flashbang(self.origin);
- Sound_Play(self, CHAN_BODY, "weapon_flashbang.explode");
- remove(self);
- }
-
- static void flashbang_touch(void)
- {
- if (other.takedamage == DAMAGE_YES) {
- Damage_Apply(other, self.owner, 15, WEAPON_FLASHBANG, DMG_BLUNT);
- } else {
- Sound_Play(self, CHAN_BODY, "weapon_flashbang.bounce");
- }
- self.frame = 0;
- }
-
- vector vPLAngle = pl.v_angle;
- if (vPLAngle[0] < 0) {
- vPLAngle[0] = -10 + vPLAngle[0] * ((90 - 10) / 90.0);
- } else {
- vPLAngle[0] = -10 + vPLAngle[0] * ((90 + 10) / 90.0);
- }
-
- float flVel = (90 - vPLAngle[0]) * 5;
- if (flVel > 1000) {
- flVel = 1000;
- }
-
- makevectors(vPLAngle);
- vector vecSrc = pl.origin + pl.view_ofs + v_forward * 16;
- vector vecThrow = v_forward * flVel + pl.velocity;
-
- entity eGrenade = spawn();
- eGrenade.owner = pl;
- eGrenade.classname = "remove_me";
- eGrenade.solid = SOLID_BBOX;
- eGrenade.frame = 1;
- eGrenade.velocity = vecThrow;
- eGrenade.movetype = MOVETYPE_BOUNCE;
- eGrenade.think = flashbang_explode;
- eGrenade.touch = flashbang_touch;
- eGrenade.nextthink = time + 4.0f;
- setmodel(eGrenade, "models/w_flashbang.mdl");
- setsize(eGrenade, [0,0,0], [0,0,0]);
- setorigin(eGrenade, vecSrc);
-}
-#endif
-
-void
-w_flashbang_primary(player pl)
-{
- if (pl.w_attack_next > 0.0) {
- return;
- }
-
- /* We're abusing this network variable for the holding check */
- if (pl.mode_temp > 0) {
- return;
- }
-
- /* Ammo check */
- if (pl.ammo_fbgrenade <= 0) {
-#ifdef SERVER
- Weapons_RemoveItem(pl, WEAPON_FLASHBANG);
-#endif
- return;
- }
-
- Weapons_ViewAnimation(pl, FLASHBANG_PULLPIN);
-
- pl.mode_temp = 1;
- pl.w_attack_next = 0.975f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_flashbang_release(player pl)
-{
- w_cstrike_weaponrelease();
-
- if (pl.w_idle_next > 0.0) {
- return;
- }
-
- if (pl.mode_temp == 1) {
- pl.ammo_fbgrenade--;
-#ifdef CLIENT
- Weapons_ViewAnimation(pl, FLASHBANG_THROW);
-#else
- w_flashbang_throw(pl);
-#endif
- pl.mode_temp = 2;
- pl.w_attack_next = 1.0f;
- pl.w_idle_next = 0.5f;
- } else if (pl.mode_temp == 2) {
-#ifdef CLIENT
- Weapons_ViewAnimation(pl, FLASHBANG_DRAW);
-#else
- if (!pl.ammo_fbgrenade) {
- Weapons_RemoveItem(pl, WEAPON_FLASHBANG);
- }
-#endif
- pl.w_attack_next = 0.5f;
- pl.w_idle_next = 0.5f;
- pl.mode_temp = 0;
- }
-}
-
-float
-w_flashbang_aimanim(player pl)
-{
- return self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_GRENADE : ANIM_AIM_GRENADE;
-}
-
-void
-w_flashbang_hud(player pl)
-{
-#ifdef CLIENT
-
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [48/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_flashbang_isempty(player pl)
-{
-
- if (pl.ammo_fbgrenade <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_flashbang_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
-
- HUD_DrawAmmoBar(pos, pl.ammo_fbgrenade, AMMO_MAX_FLASHBANG, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud6_spr,
- [0,90/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud3_spr,
- [0,90/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_flashbang =
-{
- .name = "flashbang",
- .id = ITEM_FLASHBANG,
- .slot = 3,
- .slot_pos = 1,
- .allow_drop = FALSE,
- .draw = w_flashbang_draw,
- .holster = __NULL__,
- .primary = w_flashbang_primary,
- .secondary = __NULL__,
- .reload = __NULL__,
- .release = w_flashbang_release,
- .postdraw = w_flashbang_hud,
- .precache = w_flashbang_precache,
- .pickup = w_flashbang_pickup,
- .updateammo = w_flashbang_updateammo,
- .wmodel = w_flashbang_wmodel,
- .pmodel = w_flashbang_pmodel,
- .deathmsg = w_flashbang_deathmsg,
- .aimanim = w_flashbang_aimanim,
- .hudpic = w_flashbang_hudpic,
- .isempty = w_flashbang_isempty
-};
-
-#ifdef SERVER
-void
-weapon_flashbang(void)
-{
- Weapons_InitItem(WEAPON_FLASHBANG);
-}
-#endif
diff --git a/src/shared/w_g3sg1.qc b/src/shared/w_g3sg1.qc
deleted file mode 100644
index c2e1c58..0000000
--- a/src/shared/w_g3sg1.qc
+++ /dev/null
@@ -1,318 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_g3sg1 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Heckler & Koch G3/SG-1 Weapon
-
-- Buy Menu -
-Price: $5000
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_g3sg1.mdl"*/
-
-enum
-{
- G3SG1_IDLE,
- G3SG1_SHOOT1,
- G3SG1_SHOOT2,
- G3SG1_RELOAD,
- G3SG1_DRAW
-};
-
-void
-w_g3sg1_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_g3sg1.fire");
- precache_model("models/w_g3sg1.mdl");
-#else
- precache_model("models/v_g3sg1.mdl");
- precache_model("models/p_g3sg1.mdl");
-#endif
-}
-
-void
-w_g3sg1_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.g3sg1_mag, pl.ammo_762mm, -1);
-}
-
-string
-w_g3sg1_wmodel(void)
-{
- return "models/w_g3sg1.mdl";
-}
-
-string
-w_g3sg1_pmodel(player pl)
-{
- return "models/p_g3sg1.mdl";
-}
-
-string
-w_g3sg1_deathmsg(void)
-{
- return "";
-}
-
-int
-w_g3sg1_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.g3sg1_mag = 20;
- else
- pl.g3sg1_mag = startammo;
- } else {
- if (pl.ammo_762mm < AMMO_MAX_762MM) {
- pl.ammo_762mm = bound(0, pl.ammo_762mm + 20, AMMO_MAX_762MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_g3sg1_draw(player pl)
-{
- Weapons_SetModel("models/v_g3sg1.mdl");
- Weapons_ViewAnimation(pl, G3SG1_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 6;
- pl.cs_cross_deltadist = 4;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_g3sg1_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (!pl.g3sg1_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 200);
- Cstrike_ShotMultiplierAdd(pl, 1, 1,accuracy);
- pl.g3sg1_mag--;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT2);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_g3sg1_dmg", 80);
- TraceAttack_SetRangeModifier(2.375);
- TraceAttack_SetPenetrationPower(1);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_G3SG1, "Impact.BigShot");
- Sound_Play(pl, CHAN_WEAPON, "weapon_g3sg1.fire");
-#endif
-
- pl.w_attack_next = 0.25f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_g3sg1_secondary(player pl)
-{
- if (pl.w_attack_next) {
- return;
- }
- /* Simple toggle of fovs */
- if (pl.viewzoom == 1.0f) {
- pl.viewzoom = 0.45f;
- Weapons_DisableModel();
- } else if (pl.viewzoom == 0.45f) {
- pl.viewzoom = 0.1f;
- Weapons_DisableModel();
- } else {
- pl.viewzoom = 1.0f;
- Weapons_EnableModel();
- }
- pl.w_attack_next = 0.5f;
-}
-
-void
-w_g3sg1_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.g3sg1_mag >= 20)
- return;
- if (!pl.ammo_762mm)
- return;
-
- Weapons_ViewAnimation(pl, G3SG1_RELOAD);
- pl.w_attack_next = 4.6f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::g3sg1_mag, player::ammo_762mm, 20);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_g3sg1_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.g3sg1_mag == 0 && pl.ammo_762mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_g3sg1_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_g3sg1_hud(player pl)
-{
-#ifdef CLIENT
- if (pl.viewzoom < 1.0f) {
- Cstrike_DrawScope();
- }
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [72/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_g3sg1_isempty(player pl)
-{
-
- if (pl.g3sg1_mag <= 0 && pl.ammo_762mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_g3sg1_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_g3sg1_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_762mm, AMMO_MAX_762MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud5_spr,
- [0,180/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud2_spr,
- [0,180/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_g3sg1 =
-{
- .name = "g3sg1",
- .id = ITEM_G3SG1,
- .slot = 0,
- .slot_pos = 13,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_g3sg1_draw,
- .holster = __NULL__,
- .primary = w_g3sg1_primary,
- .secondary = w_g3sg1_secondary,
- .reload = w_g3sg1_reload,
- .release = w_g3sg1_release,
- .postdraw = w_g3sg1_hud,
- .precache = w_g3sg1_precache,
- .pickup = w_g3sg1_pickup,
- .updateammo = w_g3sg1_updateammo,
- .wmodel = w_g3sg1_wmodel,
- .pmodel = w_g3sg1_pmodel,
- .deathmsg = w_g3sg1_deathmsg,
- .aimanim = w_g3sg1_aimanim,
- .hudpic = w_g3sg1_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_g3sg1_isempty
-};
-
-#ifdef SERVER
-void
-weapon_g3sg1(void)
-{
- Weapons_InitItem(WEAPON_G3SG1);
-}
-#endif
diff --git a/src/shared/w_glock18.qc b/src/shared/w_glock18.qc
deleted file mode 100644
index b1fd973..0000000
--- a/src/shared/w_glock18.qc
+++ /dev/null
@@ -1,395 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_glock18 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Glock 18 Select Fire Weapon
-
-Default arsenal for Terrorists
-
-- Buy Menu -
-Price: $400
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_glock18.mdl"
-*/
-
-enum
-{
- GLOCK_IDLE1,
- GLOCK_IDLE2,
- GLOCK_IDLE3,
- GLOCK_SHOOT_BURST1,
- GLOCK_SHOOT_BURST2,
- GLOCK_SHOOT,
- GLOCK_SHOOT_EMPTY,
- GLOCK_RELOAD1,
- GLOCK_DRAW1,
- GLOCK_UNUSED1,
- GLOCK_UNUSED2,
- GLOCK_DRAW2,
- GLOCK_RELOAD2
-};
-
-void
-w_glock18_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_glock18.fire");
- Sound_Precache("weapon_glock18.burstfire");
- precache_model("models/w_glock18.mdl");
-#else
- precache_model("models/v_glock18.mdl");
- precache_model("models/p_glock18.mdl");
-#endif
-}
-
-void
-w_glock18_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.glock18_mag, pl.ammo_9mm, -1);
-}
-
-string
-w_glock18_wmodel(void)
-{
- return "models/w_glock18.mdl";
-}
-
-string
-w_glock18_pmodel(player pl)
-{
- return "models/p_glock18.mdl";
-}
-
-string
-w_glock18_deathmsg(void)
-{
- return "";
-}
-
-int
-w_glock18_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.glock18_mag = 20;
- else
- pl.glock18_mag = startammo;
- } else {
- if (pl.ammo_9mm < AMMO_MAX_9MM) {
- pl.ammo_9mm = bound(0, pl.ammo_9mm + 20, AMMO_MAX_9MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_glock18_draw(player pl)
-{
- Weapons_SetModel("models/v_glock18.mdl");
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, GLOCK_DRAW1);
- break;
- default:
- Weapons_ViewAnimation(pl, GLOCK_DRAW2);
- break;
- }
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_glock18_primary(player pl)
-{
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.gflags & GF_SEMI_TOGGLED)
- return;
- if (!pl.glock18_mag)
- return;
-
- float accuracy = Cstrike_CalculateAccuracy(pl, (pl.mode_glock18) ? 75 : 120,1.2);
- int shotcount = (pl.mode_glock18) ? 3 : 1;
- int dmg = 0;
-
- /* fix shotcount if we're < 3 in burst mode */
- if (pl.glock18_mag < 3 && pl.mode_glock18)
- shotcount = pl.glock18_mag;
-
- for (int i = 0; i < shotcount; i ++) {
-
-
- accuracy += 0.0035;
- pl.glock18_mag--;
-#ifdef SERVER
- dmg = Skill_GetValue("plr_glock18_dmg", 25);
- TraceAttack_SetRangeModifier(1.25); /* penetrates 9 units, but not 10 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,0.6);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_GLOCK18, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,0.6);
-#endif
- }
-
- if (pl.mode_glock18) {
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, GLOCK_SHOOT_BURST1);
- break;
- default:
- Weapons_ViewAnimation(pl, GLOCK_SHOOT_BURST2);
- break;
- }
- pl.w_attack_next = 0.5f;
- } else {
- if (pl.glock18_mag <= 0) {
- Weapons_ViewAnimation(pl, GLOCK_SHOOT_EMPTY);
- } else {
- Weapons_ViewAnimation(pl, GLOCK_SHOOT);
- }
- pl.w_attack_next = 0.13f;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_ONEHAND, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_ONEHAND, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- if (pl.mode_glock18) {
- Sound_Play(pl, CHAN_WEAPON, "weapon_glock18.burstfire");
- } else {
- Sound_Play(pl, CHAN_WEAPON, "weapon_glock18.fire");
- }
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 2, .7,accuracy);
- pl.gflags |= GF_SEMI_TOGGLED;
- pl.w_idle_next = pl.w_attack_next + 1.0f;
-}
-
-void
-w_glock18_secondary(player pl)
-{
-
- if (pl.w_attack_next > 0) {
- return;
- }
-
- /* toggle burst-fire */
- pl.mode_glock18 = 1 - pl.mode_glock18;
-
-#ifdef CLIENT
- if (pl.mode_glock18) {
- CSQC_Parse_CenterPrint("Switched to Burst-Fire mode");
- } else {
- CSQC_Parse_CenterPrint("Switched to Semi-Automatic mode");
- }
-#endif
-
- pl.w_attack_next = 0.5f;
- pl.w_idle_next = pl.w_attack_next + 1.0f;
-}
-
-void
-w_glock18_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.glock18_mag >= 20)
- return;
- if (!pl.ammo_9mm)
- return;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, GLOCK_RELOAD1);
- break;
- default:
- Weapons_ViewAnimation(pl, GLOCK_RELOAD2);
- break;
- }
-
- pl.w_attack_next = 2.1f;
- pl.w_idle_next = pl.w_attack_next + 1.0f;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::glock18_mag, player::ammo_9mm, 20);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_glock18_release(player pl)
-{
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.glock18_mag == 0 && pl.ammo_9mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-
- if (pl.w_idle_next)
- return;
-
- int r = floor(pseudorandom() * 3);
-
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, GLOCK_IDLE1);
- pl.w_idle_next = 2.8125f;
- break;
- case 1:
- Weapons_ViewAnimation(pl, GLOCK_IDLE2);
- pl.w_idle_next = 2.25f;
- break;
- case 2:
- Weapons_ViewAnimation(pl, GLOCK_IDLE3);
- pl.w_idle_next = 2.5f;
- break;
- }
-}
-
-float
-w_glock18_aimanim(player pl)
-{
- return w_deagle_aimanim(pl);
-}
-
-void
-w_glock18_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [48/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_glock18_isempty(player pl)
-{
-
- if (pl.glock18_mag <= 0 && pl.ammo_9mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_glock18_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_glock18_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_9mm, AMMO_MAX_9MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud4_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud1_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_glock18 =
-{
- .name = "glock18",
- .id = ITEM_GLOCK18,
- .slot = 1,
- .slot_pos = 1,
- .weight = 5,
- .allow_drop = TRUE,
- .draw = w_glock18_draw,
- .holster = __NULL__,
- .primary = w_glock18_primary,
- .secondary = w_glock18_secondary,
- .reload = w_glock18_reload,
- .release = w_glock18_release,
- .postdraw = w_glock18_hud,
- .precache = w_glock18_precache,
- .pickup = w_glock18_pickup,
- .updateammo = w_glock18_updateammo,
- .wmodel = w_glock18_wmodel,
- .pmodel = w_glock18_pmodel,
- .deathmsg = w_glock18_deathmsg,
- .aimanim = w_glock18_aimanim,
- .hudpic = w_glock18_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_glock18_isempty
-};
-
-#ifdef SERVER
-void
-weapon_glock18(void)
-{
- Weapons_InitItem(WEAPON_GLOCK18);
-}
-#endif
diff --git a/src/shared/w_hegrenade.qc b/src/shared/w_hegrenade.qc
deleted file mode 100644
index 909671f..0000000
--- a/src/shared/w_hegrenade.qc
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_hegrenade (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-HE (High Explosive) Grenade Weapon
-
-When thrown, explodes with a fairly deadly blast radius to players.
-
-- Buy Menu -
-Price: $300
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_hegrenade.mdl"
-*/
-
-enum
-{
- HEGRENADE_IDLE,
- HEGRENADE_PULLPIN,
- HEGRENADE_THROW,
- HEGRENADE_DRAW,
-};
-
-void
-w_hegrenade_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_hegrenade.bounce");
- Sound_Precache("weapon_hegrenade.explode");
- precache_model("models/w_hegrenade.mdl");
-#else
- precache_model("models/v_hegrenade.mdl");
- precache_model("models/p_hegrenade.mdl");
-#endif
-}
-
-void
-w_hegrenade_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, -1, pl.ammo_hegrenade, pl.mode_temp);
-}
-
-int
-w_hegrenade_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (pl.ammo_hegrenade < AMMO_MAX_HENADE) {
- pl.ammo_hegrenade = bound(0, pl.ammo_hegrenade + 1, AMMO_MAX_HENADE);
- } else {
- return (0);
- }
-#endif
- return (1);
-}
-
-string
-w_hegrenade_wmodel(void)
-{
- return "models/w_hegrenade.mdl";
-}
-
-string
-w_hegrenade_pmodel(player pl)
-{
- return "models/p_hegrenade.mdl";
-}
-
-string
-w_hegrenade_deathmsg(void)
-{
- return "";
-}
-
-void
-w_hegrenade_draw(player pl)
-{
- Weapons_SetModel("models/v_hegrenade.mdl");
- Weapons_ViewAnimation(pl, HEGRENADE_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-#ifdef SERVER
-void
-w_hegrenade_throw(player pl)
-{
- static void hegrenade_explode(void)
- {
- float dmg = 100;
- pointparticles(particleeffectnum("fx_explosion.main"), self.origin, [0,0,0], 1);
- Damage_Radius(self.origin, self.owner, dmg, dmg * 2.5f, TRUE, WEAPON_HEGRENADE);
- Sound_Play(self, CHAN_BODY, "weapon_hegrenade.explode");
- remove(self);
- }
-
- static void hegrenade_touch(void)
- {
- if (other.takedamage == DAMAGE_YES) {
- Damage_Apply(other, self.owner, 15, WEAPON_HEGRENADE, DMG_BLUNT);
- } else {
- Sound_Play(self, CHAN_BODY, "weapon_hegrenade.bounce");
- }
- self.frame = 0;
- }
-
- vector vPLAngle = pl.v_angle;
- if (vPLAngle[0] < 0) {
- vPLAngle[0] = -10 + vPLAngle[0] * ((90 - 10) / 90.0);
- } else {
- vPLAngle[0] = -10 + vPLAngle[0] * ((90 + 10) / 90.0);
- }
-
- float flVel = (90 - vPLAngle[0]) * 5;
- if (flVel > 1000) {
- flVel = 1000;
- }
-
- makevectors(vPLAngle);
- vector vecSrc = pl.origin + pl.view_ofs + v_forward * 16;
- vector vecThrow = v_forward * flVel + pl.velocity;
-
- entity eGrenade = spawn();
- eGrenade.owner = pl;
- eGrenade.classname = "remove_me";
- eGrenade.solid = SOLID_BBOX;
- eGrenade.frame = 1;
- eGrenade.velocity = vecThrow;
- eGrenade.movetype = MOVETYPE_BOUNCE;
- eGrenade.think = hegrenade_explode;
- eGrenade.touch = hegrenade_touch;
- eGrenade.nextthink = time + 4.0f;
- setmodel(eGrenade, "models/w_hegrenade.mdl");
- setsize(eGrenade, [0,0,0], [0,0,0]);
- setorigin(eGrenade, vecSrc);
-}
-#endif
-
-void
-w_hegrenade_primary(player pl)
-{
- if (pl.w_attack_next > 0.0) {
- return;
- }
-
- /* We're abusing this network variable for the holding check */
- if (pl.mode_temp > 0) {
- return;
- }
-
- /* Ammo check */
- if (pl.ammo_hegrenade <= 0) {
-#ifdef SERVER
- Weapons_RemoveItem(pl, WEAPON_HEGRENADE);
-#endif
- return;
- }
-
- Weapons_ViewAnimation(pl, HEGRENADE_PULLPIN);
-
- pl.mode_temp = 1;
- pl.w_attack_next = 0.975f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_hegrenade_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- if (pl.w_idle_next > 0.0) {
- return;
- }
-
- if (pl.mode_temp == 1) {
- pl.ammo_hegrenade--;
-#ifdef CLIENT
- Weapons_ViewAnimation(pl, HEGRENADE_THROW);
-#else
- w_hegrenade_throw(pl);
-#endif
- pl.mode_temp = 2;
- pl.w_attack_next = 1.0f;
- pl.w_idle_next = 0.5f;
- } else if (pl.mode_temp == 2) {
-#ifdef CLIENT
- Weapons_ViewAnimation(pl, HEGRENADE_DRAW);
-#else
- if (!pl.ammo_hegrenade) {
- Weapons_RemoveItem(pl, WEAPON_HEGRENADE);
- }
-#endif
- pl.w_attack_next = 0.5f;
- pl.w_idle_next = 0.5f;
- pl.mode_temp = 0;
- }
-}
-
-float
-w_hegrenade_aimanim(player pl)
-{
- return w_flashbang_aimanim(pl);
-}
-
-void
-w_hegrenade_hud(player pl)
-{
-#ifdef CLIENT
-
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [72/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_hegrenade_isempty(player pl)
-{
-
- if (pl.ammo_hegrenade <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_hegrenade_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
-
- HUD_DrawAmmoBar(pos, pl.ammo_hegrenade, AMMO_MAX_HENADE, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud6_spr,
- [0,45/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud3_spr,
- [0,45/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_hegrenade =
-{
- .name = "hegrenade",
- .id = ITEM_HEGRENADE,
- .slot = 3,
- .slot_pos = 0,
- .allow_drop = FALSE,
- .draw = w_hegrenade_draw,
- .holster = __NULL__,
- .primary = w_hegrenade_primary,
- .secondary = __NULL__,
- .reload = __NULL__,
- .release = w_hegrenade_release,
- .postdraw = w_hegrenade_hud,
- .precache = w_hegrenade_precache,
- .pickup = w_hegrenade_pickup,
- .updateammo = w_hegrenade_updateammo,
- .wmodel = w_hegrenade_wmodel,
- .pmodel = w_hegrenade_pmodel,
- .deathmsg = w_hegrenade_deathmsg,
- .aimanim = w_hegrenade_aimanim,
- .hudpic = w_hegrenade_hudpic,
- .isempty = w_hegrenade_isempty
-};
-
-#ifdef SERVER
-void
-weapon_hegrenade(void)
-{
- Weapons_InitItem(WEAPON_HEGRENADE);
-}
-#endif
diff --git a/src/shared/w_knife.qc b/src/shared/w_knife.qc
deleted file mode 100644
index c2b363b..0000000
--- a/src/shared/w_knife.qc
+++ /dev/null
@@ -1,323 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_knife (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Knife Weapon
-
-Default arsenal on both teams
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_knife.mdl"
-*/
-
-enum
-{
- KNIFE_IDLE1,
- KNIFE_SLASH1,
- KNIFE_SLASH2,
- KNIFE_DRAW,
- KNIFE_STAB,
- KNIFE_STAB_MISS,
- KNIFE_MIDSLASH1,
- KNIFE_MIDSLASH2
-};
-
-void
-w_knife_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_knife.hit");
- Sound_Precache("weapon_knife.hitbody");
- Sound_Precache("weapon_knife.hithard");
- Sound_Precache("weapon_knife.miss");
- precache_model("models/w_knife.mdl");
-#else
- precache_model("models/v_knife.mdl");
- precache_model("models/p_knife.mdl");
-#endif
-}
-
-void
-w_knife_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, -1, -1, -1);
-}
-
-string
-w_knife_wmodel(void)
-{
- return "models/w_knife.mdl";
-}
-
-string
-w_knife_pmodel(player pl)
-{
- return "models/p_knife.mdl";
-}
-
-string
-w_knife_deathmsg(void)
-{
- return "";
-}
-
-void
-w_knife_draw(player pl)
-{
- Weapons_SetModel("models/v_knife.mdl");
- Weapons_ViewAnimation(pl, KNIFE_DRAW);
-
-#ifdef CLIENT
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_knife_primary(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- pl.w_attack_next = 0.7f;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, KNIFE_SLASH1);
- break;
- default:
- Weapons_ViewAnimation(pl, KNIFE_SLASH2);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_KNIFE, 1.33f);
- else
- Animation_PlayerTop(pl, ANIM_SHOOT_KNIFE, 1.33f);
-
-#ifdef SERVER
- vector src;
- int range = Skill_GetValue("plr_knife_range", 48);
-
- Weapons_MakeVectors(pl);
- src = pl.origin + pl.view_ofs;
- traceline(src, src + (v_forward * range), MOVE_HITMODEL, pl);
-
- Sound_Play(pl, CHAN_WEAPON, "weapon_knife.miss");
-
- if (trace_fraction >= 1.0) {
- return;
- }
-
- if (trace_ent.iBleeds) {
- FX_Blood(trace_endpos, [1,0,0]);
- Sound_Play(pl, CHAN_WEAPON, "weapon_knife.hitbody");
- } else {
- Sound_Play(pl, CHAN_WEAPON, "weapon_knife.hit");
- }
-
- /* let's calculate damage! */
- if (trace_ent.takedamage) {
- /* values taken from https://counterstrike.fandom.com/wiki/Knife */
- int dmg = 0;
-
- switch (trace_surface_id) {
- case BODY_HEAD:
- dmg = Skill_GetValue("plr_knife_dmghead", 60);
- break;
- case BODY_STOMACH:
- dmg = Skill_GetValue("plr_knife_dmgstomach", 18);
- break;
- case BODY_LEGLEFT:
- case BODY_LEGRIGHT:
- dmg = Skill_GetValue("plr_knife_dmglegs", 11);
- break;
- case BODY_CHEST:
- dmg = Skill_GetValue("plr_knife_dmgchest", 15);
- break;
- case BODY_ARMLEFT:
- case BODY_ARMRIGHT:
- dmg = Skill_GetValue("plr_knife_dmgarms", 15);
- break;
- case BODY_DEFAULT:
- default:
- dmg = Skill_GetValue("plr_knife_dmg", 15);
- break;
- }
- Damage_Apply(trace_ent, pl, dmg, WEAPON_KNIFE, DMG_SLASH);
- }
-#endif
-}
-
-void
-w_knife_secondary(player pl)
-{
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- pl.w_attack_next = 1.2f;
-
-
- Weapons_ViewAnimation(pl, KNIFE_STAB);
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_KNIFE, 1.33f);
- else
- Animation_PlayerTop(pl, ANIM_SHOOT_KNIFE, 1.33f);
-
-#ifdef SERVER
- vector src;
- int range = Skill_GetValue("plr_knife_altrange", 48);
-
- Weapons_MakeVectors(pl);
- src = pl.origin + pl.view_ofs;
- traceline(src, src + (v_forward * range), MOVE_HITMODEL, pl);
-
- Sound_Play(pl, CHAN_WEAPON, "weapon_knife.miss");
-
- if (trace_fraction >= 1.0) {
- return;
- }
-
- /* don't bother with decals, we got squibs */
- if (trace_ent.iBleeds) {
- FX_Blood(trace_endpos, [1,0,0]);
- Sound_Play(pl, CHAN_WEAPON, "weapon_knife.hitbody");
- } else {
- Sound_Play(pl, CHAN_WEAPON, "weapon_knife.hit");
- }
-
- /* let's calculate damage! */
- if (trace_ent.takedamage) {
- /* values taken from https://counterstrike.fandom.com/wiki/Knife */
- int dmg = 0;
- switch (trace_surface_id) {
- case BODY_HEAD:
- dmg = Skill_GetValue("plr_knife_altdmghead", 260);
- break;
- case BODY_STOMACH:
- dmg = Skill_GetValue("plr_knife_altdmgstomach", 81);
- break;
- case BODY_LEGLEFT:
- case BODY_LEGRIGHT:
- dmg = Skill_GetValue("plr_knife_altdmglegs", 48);
- break;
- case BODY_CHEST:
- dmg = Skill_GetValue("plr_knife_altdmgchest", 65);
- break;
- case BODY_ARMLEFT:
- case BODY_ARMRIGHT:
- dmg = Skill_GetValue("plr_knife_altdmgarms", 65);
- break;
- case BODY_DEFAULT:
- default:
- dmg = Skill_GetValue("plr_knife_altdmg", 65);
- break;
- }
-
- /* secondary can do a backstab */
- if (trace_ent.classname == "player") {
- player otherpl = (player)trace_ent;
- if (otherpl.IsFacing(pl) == false) {
- dmg *= 3;
- }
- }
-
- Damage_Apply(trace_ent, pl, dmg, WEAPON_KNIFE, DMG_SLASH);
- }
-#endif
-}
-
-float
-w_knife_aimanim(player pl)
-{
- return pl.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_KNIFE : ANIM_AIM_KNIFE;
-}
-
-int
-w_knife_isempty(player pl)
-{
- return 0;
-}
-
-void
-w_knife_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud11_spr,
- [0,135/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud10_spr,
- [0,135/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_knife =
-{
- .name = "knife",
- .id = ITEM_KNIFE,
- .slot = 2,
- .slot_pos = 0,
- .allow_drop = FALSE,
- .draw = w_knife_draw,
- .holster = __NULL__,
- .primary = w_knife_primary,
- .secondary = w_knife_secondary,
- .reload = __NULL__,
- .release = __NULL__,
- .postdraw = __NULL__,
- .precache = w_knife_precache,
- .pickup = __NULL__,
- .updateammo = w_knife_updateammo,
- .wmodel = w_knife_wmodel,
- .pmodel = w_knife_pmodel,
- .deathmsg = w_knife_deathmsg,
- .aimanim = w_knife_aimanim,
- .hudpic = w_knife_hudpic,
- .type = csweapon_melee_type,
- .isempty = w_knife_isempty
-};
-
-#ifdef SERVER
-void
-weapon_knife(void)
-{
- Weapons_InitItem(WEAPON_KNIFE);
-}
-#endif
diff --git a/src/shared/w_m3.qc b/src/shared/w_m3.qc
deleted file mode 100644
index 1de567b..0000000
--- a/src/shared/w_m3.qc
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_m3 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Benneli M3 Super90 Weapon
-
-- Buy Menu -
-Price: $1700
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_m3.mdl"
-*/
-
-#ifdef CLIENT
-void
-w_m3_ejectshell(void)
-{
- static void w_m3_ejectshell_death(void) {
- remove(self);
- }
- static void w_m3_ejectshell_touch(void) {
- if (other == world)
- Sound_Play(self, CHAN_BODY, "modelevent_shotgunshell.land");
- }
- entity eShell = spawn();
- setmodel(eShell, "models/shotgunshell.mdl");
- eShell.solid = SOLID_BBOX;
- eShell.movetype = MOVETYPE_BOUNCE;
- eShell.drawmask = MASK_ENGINE;
- eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1] + 20, 0];
- eShell.velocity = pSeat->m_vecPredictedVelocity;
-
- makevectors(pSeat->m_eViewModel.angles);
- eShell.velocity += (v_forward * 0);
- eShell.velocity += (v_right * -80);
- eShell.velocity += (v_up * 100);
- eShell.touch = w_m3_ejectshell_touch;
-
- eShell.avelocity = [0,45,900];
- eShell.think = w_m3_ejectshell_death;
- eShell.renderflags |= RF_DEPTHHACK;
- eShell.nextthink = time + 2.5f;
- setsize(eShell, [0,0,0], [0,0,0]);
- setorigin(eShell, pSeat->m_eViewModel.origin + (v_forward * 10) + (v_right * 10) + (v_up * -8));
-}
-#endif
-
-enum
-{
- M3_IDLE,
- M3_SHOOT1,
- M3_SHOOT2,
- M3_INSERT,
- M3_RELOAD_END,
- M3_RELOAD_START,
- M3_DRAW
-};
-
-enum
-{
- M3S_IDLE,
- M3S_RELOAD_START,
- M3S_RELOAD,
- M3S_RELOAD_END
-};
-
-void
-w_m3_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_m3.fire");
- precache_model("models/w_m3.mdl");
-#else
- precache_model("models/v_m3.mdl");
- precache_model("models/p_m3.mdl");
- Sound_Precache("modelevent_shotgunshell.land");
-#endif
-}
-
-void
-w_m3_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.m3_mag, pl.ammo_buckshot, -1);
-}
-
-string
-w_m3_wmodel(void)
-{
- return "models/w_m3.mdl";
-}
-
-string
-w_m3_pmodel(player pl)
-{
- return "models/p_m3.mdl";
-}
-
-string
-w_m3_deathmsg(void)
-{
- return "";
-}
-
-int
-w_m3_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.m3_mag = 8;
- else
- pl.m3_mag = startammo;
- } else {
- if (pl.ammo_buckshot < AMMO_MAX_BUCKSHOT) {
- pl.ammo_buckshot = bound(0, pl.ammo_buckshot + 8, AMMO_MAX_BUCKSHOT);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_m3_draw(player pl)
-{
- Weapons_SetModel("models/v_m3.mdl");
- Weapons_ViewAnimation(pl, M3_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 6;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void w_m3_release(player pl);
-
-void
-w_m3_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- w_m3_release(pl);
- return;
- }
-
- /* interrupt reloading if no longer empty */
- if (pl.mode_temp == M3S_RELOAD && pl.m3_mag >= 1) {
- pl.mode_temp = M3S_RELOAD_END;
- w_m3_release(pl);
- return;
- } else if (pl.mode_temp > M3S_IDLE) {
- w_m3_release(pl);
- return;
- }
-
- /* Ammo check */
- if (pl.m3_mag <= 0) {
- w_m3_release(pl);
- return;
- }
-
- pl.m3_mag--;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, M3_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, M3_SHOOT2);
- break;
- }
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_m3_ejectshell, 0.6f);
-#else
- dmg = Skill_GetValue("plr_m3_dmg", 26);
- TraceAttack_SetPenetrationPower(0); /* shotties can't wallbang?! */
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_SHOTGUN, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_SHOTGUN, 0.45f);
-
- Sound_Play(pl, CHAN_WEAPON, "weapon_m3.fire");
-#endif
-
- for (int i = 0; i < 9; i++) {
- Cstrike_ShotMultiplierAdd(pl, 1, 1,1);
- pl.punchangle[0] = -4 * (9 / 6);
-#ifdef SERVER
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [random(-1,1) * 0.1,random(-1,1) * 0.05], WEAPON_M3, "Impact.BigShot");
-#endif
- }
-
- pl.w_attack_next = 1.0f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_m3_reload(player pl)
-{
-
- if (pl.m3_mag >= 8) {
- return;
- }
- if (pl.ammo_buckshot <= 0) {
- return;
- }
-
- if (pl.mode_temp > M3S_IDLE) {
- return;
- }
- pl.mode_temp = M3S_RELOAD_START;
- pl.w_idle_next = 0.0f;
-}
-
-void
-w_m3_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.mode_temp == M3S_IDLE && pl.m3_mag == 0 && pl.ammo_buckshot > 0) {
- Weapons_Reload(pl);
- return;
- }
-
- if (pl.w_idle_next > 0.0) {
- return;
- }
-
- if (pl.mode_temp == M3S_RELOAD_START) {
- Weapons_ViewAnimation(pl, M3_RELOAD_START);
- pl.mode_temp = M3S_RELOAD;
- pl.w_idle_next = 0.65f;
- } else if (pl.mode_temp == M3S_RELOAD) {
- Weapons_ViewAnimation(pl, M3_INSERT);
- pl.m3_mag++;
- pl.ammo_buckshot--;
- w_m3_updateammo(pl);
- if (pl.ammo_buckshot <= 0 || pl.m3_mag >= 8) {
- pl.mode_temp = M3S_RELOAD_END;
- }
- pl.w_idle_next = 0.5f;
- } else if (pl.mode_temp == M3S_RELOAD_END) {
- Weapons_ViewAnimation(pl, M3_RELOAD_END);
- pl.mode_temp = M3S_IDLE;
- pl.w_idle_next = 10.0f;
- pl.w_attack_next = 0.5f;
- }
-}
-
-float
-w_m3_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_m3_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_m3_isempty(player pl)
-{
-
- if (pl.m3_mag <= 0 && pl.ammo_buckshot <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_m3_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_m3_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_buckshot, AMMO_MAX_BUCKSHOT, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud4_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud1_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_m3 =
-{
- .name = "m3",
- .id = ITEM_M3,
- .slot = 0,
- .slot_pos = 0,
- .weight = 20,
- .allow_drop = TRUE,
- .draw = w_m3_draw,
- .holster = __NULL__,
- .primary = w_m3_primary,
- .secondary = __NULL__,
- .reload = w_m3_reload,
- .release = w_m3_release,
- .postdraw = w_m3_hud,
- .precache = w_m3_precache,
- .pickup = w_m3_pickup,
- .updateammo = w_m3_updateammo,
- .wmodel = w_m3_wmodel,
- .pmodel = w_m3_pmodel,
- .deathmsg = w_m3_deathmsg,
- .aimanim = w_m3_aimanim,
- .hudpic = w_m3_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_m3_isempty
-};
-
-#ifdef SERVER
-void
-weapon_m3(void)
-{
- Weapons_InitItem(WEAPON_M3);
-}
-#endif
diff --git a/src/shared/w_m4a1.qc b/src/shared/w_m4a1.qc
deleted file mode 100644
index 632b099..0000000
--- a/src/shared/w_m4a1.qc
+++ /dev/null
@@ -1,383 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_m4a1 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Colt M4A1 Carbine Weapon
-
-- Buy Menu -
-Price: $3100
-Counter-Terrorists only weapon
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_m4a1.mdl"
-*/
-
-enum
-{
- M4A1_IDLE,
- M4A1_SHOOT1,
- M4A1_SHOOT2,
- M4A1_SHOOT3,
- M4A1_RELOAD,
- M4A1_DRAW,
- M4A1_ADDSIL,
- M4A1_IDLEUNSIL,
- M4A1_SHOOT1UNSIL,
- M4A1_SHOOT2UNSIL,
- M4A1_SHOOT3UNSIL,
- M4A1_RELOADUNSIL,
- M4A1_DRAWUNSIL,
- M4A1_DETACHSIL
-};
-
-void
-w_m4a1_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_m4a1.fire");
- Sound_Precache("weapon_m4a1.silenced");
- precache_model("models/w_m4a1.mdl");
-#else
- precache_model("models/v_m4a1.mdl");
- precache_model("models/p_m4a1.mdl");
-#endif
-}
-
-void
-w_m4a1_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.m4a1_mag, pl.ammo_556mm, -1);
-}
-
-string
-w_m4a1_wmodel(void)
-{
- return "models/w_m4a1.mdl";
-}
-
-string
-w_m4a1_pmodel(player pl)
-{
- return "models/p_m4a1.mdl";
-}
-
-string
-w_m4a1_deathmsg(void)
-{
- return "";
-}
-
-int
-w_m4a1_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
- Cstrike_ShotMultiplierUpdate(pl);
- if (new) {
- if (startammo == -1)
- pl.m4a1_mag = 30;
- else
- pl.m4a1_mag = startammo;
- } else {
- if (pl.ammo_556mm < AMMO_MAX_556MM) {
- pl.ammo_556mm = bound(0, pl.ammo_556mm + 30, AMMO_MAX_556MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_m4a1_draw(player pl)
-{
-
- Weapons_SetModel("models/v_m4a1.mdl");
-
- if (pl.mode_m4a1 == 1) {
- Weapons_ViewAnimation(pl, M4A1_DRAW);
- } else {
- Weapons_ViewAnimation(pl, M4A1_DRAWUNSIL);
- }
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 4;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_m4a1_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (!pl.m4a1_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 60, 3);
-// accuracy += pl.cs_shotmultiplier*pl.cs_shotmultiplier / 500;
- pl.m4a1_mag--;
-
- int r = (float)input_sequence % 3;
- if (pl.mode_m4a1 == 1) {
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, M4A1_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, M4A1_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, M4A1_SHOOT3);
- break;
- }
- } else {
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, M4A1_SHOOT1UNSIL);
- break;
- case 1:
- Weapons_ViewAnimation(pl, M4A1_SHOOT2UNSIL);
- break;
- default:
- Weapons_ViewAnimation(pl, M4A1_SHOOT3UNSIL);
- break;
- }
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
- /* actual firing */
-#ifdef CLIENT
- if (pl.mode_m4a1 == 1) {
- View_SetMuzzleflash(0);
- } else {
- View_SetMuzzleflash(MUZZLE_RIFLE);
- }
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- /* Different sounds without silencer */
- if (pl.mode_m4a1 == 1) {
- Sound_Play(pl, CHAN_WEAPON, "weapon_m4a1.silenced");
- } else {
- Sound_Play(pl, CHAN_WEAPON, "weapon_m4a1.fire");
- }
-
- dmg = Skill_GetValue("plr_m4a1_dmg", 33);
- TraceAttack_SetRangeModifier(2.125);
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,.96f);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_M4A1, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,.96f);
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 0.8f, 1.025f,accuracy*0.8);
- pl.w_attack_next = 0.0875f;
- pl.w_idle_next = 2.0f;
-}
-
-void
-w_m4a1_secondary(player pl)
-{
-
- if (pl.w_attack_next > 0) {
- return;
- }
-
- /* toggle silencer */
- pl.mode_m4a1 = 1 - pl.mode_m4a1;
-
- /* play the animation */
- if (pl.mode_m4a1) {
- Weapons_ViewAnimation(pl, M4A1_ADDSIL);
- } else {
- Weapons_ViewAnimation(pl, M4A1_DETACHSIL);
- }
-
- pl.w_attack_next = 2.0f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_m4a1_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.m4a1_mag >= 30)
- return;
- if (!pl.ammo_556mm)
- return;
- Cstrike_ShotMultiplierUpdate(pl);
-
- if (pl.mode_m4a1 == 1)
- Weapons_ViewAnimation(pl, M4A1_RELOAD);
- else
- Weapons_ViewAnimation(pl, M4A1_RELOADUNSIL);
-
- pl.w_attack_next = 3.1f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::m4a1_mag, player::ammo_556mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-float
-w_m4a1_aimanim(player pl)
-{
- return pl.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_RIFLE : ANIM_AIM_RIFLE;
-}
-
-void
-w_m4a1_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-void
-w_m4a1_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.m4a1_mag == 0 && pl.ammo_556mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-
- if (pl.w_idle_next > 0.0) {
- return;
- }
-
- if (pl.mode_m4a1) {
- Weapons_ViewAnimation(pl, M4A1_IDLE);
- } else {
- Weapons_ViewAnimation(pl, M4A1_IDLEUNSIL);
- }
- pl.w_idle_next = 5.0f;
-}
-
-int
-w_m4a1_isempty(player pl)
-{
-
- if (pl.m4a1_mag <= 0 && pl.ammo_556mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_m4a1_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_m4a1_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_556mm, AMMO_MAX_556MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud5_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud2_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_m4a1 =
-{
- .name = "m4a1",
- .id = ITEM_M4A1,
- .slot = 0,
- .slot_pos = 9,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_m4a1_draw,
- .holster = __NULL__,
- .primary = w_m4a1_primary,
- .secondary = w_m4a1_secondary,
- .reload = w_m4a1_reload,
- .release = w_m4a1_release,
- .postdraw = w_m4a1_hud,
- .precache = w_m4a1_precache,
- .pickup = w_m4a1_pickup,
- .updateammo = w_m4a1_updateammo,
- .wmodel = w_m4a1_wmodel,
- .pmodel = w_m4a1_pmodel,
- .deathmsg = w_m4a1_deathmsg,
- .aimanim = w_m4a1_aimanim,
- .hudpic = w_m4a1_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_m4a1_isempty
-};
-
-#ifdef SERVER
-void
-weapon_m4a1(void)
-{
- Weapons_InitItem(WEAPON_M4A1);
-}
-#endif
diff --git a/src/shared/w_mac10.qc b/src/shared/w_mac10.qc
deleted file mode 100644
index 71dc2eb..0000000
--- a/src/shared/w_mac10.qc
+++ /dev/null
@@ -1,304 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_mac10 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Ingram MAC-10 Weapon
-
-- Buy Menu -
-Price: $1400
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_mac10.mdl"
-*/
-
-enum
-{
- MAC10_IDLE,
- MAC10_RELOAD,
- MAC10_DRAW,
- MAC10_SHOOT1,
- MAC10_SHOOT2,
- MAC10_SHOOT3
-};
-
-void
-w_mac10_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_mac10.fire");
- precache_model("models/w_mac10.mdl");
-#else
- precache_model("models/v_mac10.mdl");
- precache_model("models/p_mac10.mdl");
-#endif
-}
-
-void
-w_mac10_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.mac10_mag, pl.ammo_45acp, -1);
-}
-
-string
-w_mac10_wmodel(void)
-{
- return "models/w_mac10.mdl";
-}
-
-string
-w_mac10_pmodel(player pl)
-{
- return "models/p_mac10.mdl";
-}
-
-string
-w_mac10_deathmsg(void)
-{
- return "";
-}
-
-int
-w_mac10_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.mac10_mag = 30;
- else
- pl.mac10_mag = startammo;
- } else {
- if (pl.ammo_45acp < AMMO_MAX_45ACP) {
- pl.ammo_45acp = bound(0, pl.ammo_45acp + 30, AMMO_MAX_45ACP);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_mac10_draw(player pl)
-{
- Weapons_SetModel("models/v_mac10.mdl");
- Weapons_ViewAnimation(pl, MAC10_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 9;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_mac10_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- return;
- }
- if (!pl.mac10_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 50,0.8)+0.0095f;
- pl.mac10_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, MAC10_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, MAC10_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, MAC10_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_MP5, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_MP5, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_mac10_dmg", 29);
- TraceAttack_SetRangeModifier(1.25); /* 9, but not 10 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,1.115);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_MAC10, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,1.115);
- Sound_Play(pl, CHAN_WEAPON, "weapon_mac10.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 2, 0.7f,accuracy);
- pl.w_attack_next = 0.07f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_mac10_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.mac10_mag >= 30)
- return;
- if (!pl.ammo_45acp)
- return;
-
- Weapons_ViewAnimation(pl, MAC10_RELOAD);
-
- pl.w_attack_next = 3.2f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::mac10_mag, player::ammo_45acp, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_mac10_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.mac10_mag == 0 && pl.ammo_45acp > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_mac10_aimanim(player pl)
-{
- return w_deagle_aimanim(pl);
-}
-
-void
-w_mac10_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [96/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_mac10_isempty(player pl)
-{
-
- if (pl.mac10_mag <= 0 && pl.ammo_45acp <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_mac10_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_mac10_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_45acp, AMMO_MAX_45ACP, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud15_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud14_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_mac10 =
-{
- .name = "mac10",
- .id = ITEM_MAC10,
- .slot = 0,
- .slot_pos = 5,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_mac10_draw,
- .holster = __NULL__,
- .primary = w_mac10_primary,
- .secondary = __NULL__,
- .reload = w_mac10_reload,
- .release = w_mac10_release,
- .postdraw = w_mac10_hud,
- .precache = w_mac10_precache,
- .pickup = w_mac10_pickup,
- .updateammo = w_mac10_updateammo,
- .wmodel = w_mac10_wmodel,
- .pmodel = w_mac10_pmodel,
- .deathmsg = w_mac10_deathmsg,
- .aimanim = w_mac10_aimanim,
- .hudpic = w_mac10_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_mac10_isempty
-};
-
-#ifdef SERVER
-void
-weapon_mac10(void)
-{
- Weapons_InitItem(WEAPON_MAC10);
-}
-#endif
diff --git a/src/shared/w_mp5.qc b/src/shared/w_mp5.qc
deleted file mode 100644
index 81124a4..0000000
--- a/src/shared/w_mp5.qc
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_mp5navy (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Heckler & Koch MP5-Navy Weapon
-
-- Buy Menu -
-Price: $1500
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_mp5.mdl"
-*/
-
-enum
-{
- MP5_IDLE,
- MP5_RELOAD,
- MP5_DRAW,
- MP5_SHOOT1,
- MP5_SHOOT2,
- MP5_SHOOT3
-};
-
-void
-w_mp5_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_mp5.fire");
- precache_model("models/w_mp5.mdl");
-#else
- precache_model("models/v_mp5.mdl");
- precache_model("models/p_mp5.mdl");
-#endif
-}
-
-void
-w_mp5_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.mp5_mag, pl.ammo_9mm, -1);
-}
-
-string
-w_mp5_wmodel(void)
-{
- return "models/w_mp5.mdl";
-}
-
-string
-w_mp5_pmodel(player pl)
-{
- return "models/p_mp5.mdl";
-}
-
-string
-w_mp5_deathmsg(void)
-{
- return "";
-}
-
-int
-w_mp5_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.mp5_mag = 30;
- else
- pl.mp5_mag = startammo;
- } else {
- if (pl.ammo_9mm < AMMO_MAX_9MM) {
- pl.ammo_9mm = bound(0, pl.ammo_9mm + 30, AMMO_MAX_9MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_mp5_draw(player pl)
-{
- Weapons_SetModel("models/v_mp5.mdl");
- Weapons_ViewAnimation(pl, MP5_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 5;
- pl.cs_cross_deltadist = 2;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_mp5_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.mp5_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl,60,1.25)+0.0045f;
- pl.mp5_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, MP5_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, MP5_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, MP5_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_MP5, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_MP5, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_mp5_dmg", 26);
- TraceAttack_SetRangeModifier(1.25); /* 9 units but not 10 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,.825f);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_MP5, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,.825f);
- Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, .5f, 1.25f,accuracy);
- pl.w_attack_next = 0.08f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_mp5_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.mp5_mag >= 30)
- return;
- if (!pl.ammo_9mm)
- return;
-
- Weapons_ViewAnimation(pl, MP5_RELOAD);
-
- pl.w_attack_next = 2.6f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::mp5_mag, player::ammo_9mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_mp5_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.mp5_mag == 0 && pl.ammo_9mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_mp5_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_mp5_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [48/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_mp5_isempty(player pl)
-{
-
- if (pl.mp5_mag <= 0 && pl.ammo_9mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_mp5_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_mp5_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_9mm, AMMO_MAX_9MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud4_spr,
- [0,180/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud1_spr,
- [0,180/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_mp5 =
-{
- .name = "mp5navy",
- .id = ITEM_MP5,
- .slot = 0,
- .slot_pos = 2,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_mp5_draw,
- .holster = __NULL__,
- .primary = w_mp5_primary,
- .secondary = __NULL__,
- .reload = w_mp5_reload,
- .release = w_mp5_release,
- .postdraw = w_mp5_hud,
- .precache = w_mp5_precache,
- .pickup = w_mp5_pickup,
- .updateammo = w_mp5_updateammo,
- .wmodel = w_mp5_wmodel,
- .pmodel = w_mp5_pmodel,
- .deathmsg = w_mp5_deathmsg,
- .aimanim = w_mp5_aimanim,
- .hudpic = w_mp5_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_mp5_isempty
-};
-
-#ifdef SERVER
-void
-weapon_mp5navy(void)
-{
- Weapons_InitItem(WEAPON_MP5);
-}
-#endif
diff --git a/src/shared/w_p228.qc b/src/shared/w_p228.qc
deleted file mode 100644
index a52d64b..0000000
--- a/src/shared/w_p228.qc
+++ /dev/null
@@ -1,310 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_p228 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-SIG P228 Weapon
-
-- Buy Menu -
-Price: $600
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_p228.mdl"
-*/
-
-enum
-{
- P228_IDLE,
- P228_SHOOT1,
- P228_SHOOT2,
- P228_SHOOT3,
- P228_SHOOT_EMPTY,
- P228_RELOAD,
- P228_DRAW
-};
-
-void
-w_p228_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_p228.fire");
- precache_model("models/w_p228.mdl");
-#else
- precache_model("models/v_p228.mdl");
- precache_model("models/p_p228.mdl");
-#endif
-}
-
-void
-w_p228_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.p228_mag, pl.ammo_357sig, -1);
-}
-
-string
-w_p228_wmodel(void)
-{
- return "models/w_p228.mdl";
-}
-
-string
-w_p228_pmodel(player pl)
-{
- return "models/p_p228.mdl";
-}
-
-string
-w_p228_deathmsg(void)
-{
- return "";
-}
-
-int
-w_p228_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.p228_mag = 13;
- else
- pl.p228_mag = startammo;
- } else {
- if (pl.ammo_357sig < AMMO_MAX_357SIG) {
- pl.ammo_357sig = bound(0, pl.ammo_357sig + 13, AMMO_MAX_357SIG);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_p228_draw(player pl)
-{
- Weapons_SetModel("models/v_p228.mdl");
- Weapons_ViewAnimation(pl, P228_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_p228_primary(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.gflags & GF_SEMI_TOGGLED)
- return;
- if (!pl.p228_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 200,1.6) + 0.004f;
- int dmg = 0;
- pl.p228_mag--;
-
- if (pl.p228_mag <= 0) {
- Weapons_ViewAnimation(pl, P228_SHOOT_EMPTY);
- } else {
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, P228_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, P228_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, P228_SHOOT3);
- break;
- }
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_ONEHAND, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_ONEHAND, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_p228_dmg", 40);
- TraceAttack_SetRangeModifier(1.5); /* penetrates 11, but not 12 units */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,1.05);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_P228, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,1.05);
- Sound_Play(pl, CHAN_WEAPON, "weapon_p228.fire");
-#endif
- Cstrike_ShotMultiplierAdd(pl, 6, 0.5f,accuracy);
-
- pl.gflags |= GF_SEMI_TOGGLED;
- pl.w_attack_next = 0.1425f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_p228_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.p228_mag >= 13)
- return;
- if (!pl.ammo_357sig)
- return;
-
- Weapons_ViewAnimation(pl, P228_RELOAD);
-
- pl.w_attack_next = 2.7f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::p228_mag, player::ammo_357sig, 13);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_p228_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.p228_mag == 0 && pl.ammo_357sig > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_p228_aimanim(player pl)
-{
- return w_deagle_aimanim(pl);
-}
-
-void
-w_p228_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [120/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_p228_isempty(player pl)
-{
-
- if (pl.p228_mag <= 0 && pl.ammo_357sig <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_p228_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_p228_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_357sig, AMMO_MAX_357SIG, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud13_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud12_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_p228 =
-{
- .name = "p228",
- .id = ITEM_P228,
- .slot = 1,
- .slot_pos = 3,
- .weight = 5,
- .allow_drop = TRUE,
- .draw = w_p228_draw,
- .holster = __NULL__,
- .primary = w_p228_primary,
- .secondary = __NULL__,
- .reload = w_p228_reload,
- .release = w_p228_release,
- .postdraw = w_p228_hud,
- .precache = w_p228_precache,
- .pickup = w_p228_pickup,
- .updateammo = w_p228_updateammo,
- .wmodel = w_p228_wmodel,
- .pmodel = w_p228_pmodel,
- .deathmsg = w_p228_deathmsg,
- .aimanim = w_p228_aimanim,
- .hudpic = w_p228_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_p228_isempty
-};
-
-#ifdef SERVER
-void
-weapon_p228(void)
-{
- Weapons_InitItem(WEAPON_P228);
-}
-#endif
diff --git a/src/shared/w_p90.qc b/src/shared/w_p90.qc
deleted file mode 100644
index 1d4a362..0000000
--- a/src/shared/w_p90.qc
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_p90 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-FN P90 Weapon
-
-- Buy Menu -
-Price: $2350
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_p90.mdl"
-*/
-
-enum
-{
- P90_IDLE,
- P90_RELOAD,
- P90_DRAW,
- P90_SHOOT1,
- P90_SHOOT2,
- P90_SHOOT3
-};
-
-void
-w_p90_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_p90.fire");
- precache_model("models/w_p90.mdl");
-#else
- precache_model("models/v_p90.mdl");
- precache_model("models/p_p90.mdl");
-#endif
-}
-
-void
-w_p90_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.p90_mag, pl.ammo_57mm, -1);
-}
-
-string
-w_p90_wmodel(void)
-{
- return "models/w_p90.mdl";
-}
-
-string
-w_p90_pmodel(player pl)
-{
- return "models/p_p90.mdl";
-}
-
-string
-w_p90_deathmsg(void)
-{
- return "";
-}
-
-int
-w_p90_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.p90_mag = 50;
- else
- pl.p90_mag = startammo;
- } else {
- if (pl.ammo_57mm < AMMO_MAX_57MM) {
- pl.ammo_57mm = bound(0, pl.ammo_57mm + 50, AMMO_MAX_57MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_p90_draw(player pl)
-{
- Weapons_SetModel("models/v_p90.mdl");
- Weapons_ViewAnimation(pl, P90_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 7;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_p90_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.p90_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 50,1.125)+0.0055;
- pl.p90_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, P90_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, P90_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, P90_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_MP5, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_MP5, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_p90_dmg", 26);
- TraceAttack_SetRangeModifier(1.875); /* 9 but not 10 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,.9);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_P90, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,.9);
- Sound_Play(pl, CHAN_WEAPON, "weapon_p90.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 1.1, 1.3,accuracy);
- pl.w_attack_next = 0.07f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_p90_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.p90_mag >= 50)
- return;
- if (!pl.ammo_57mm)
- return;
-
- Weapons_ViewAnimation(pl, P90_RELOAD);
-
- pl.w_attack_next = 3.3f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::p90_mag, player::ammo_57mm, 50);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_p90_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.p90_mag == 0 && pl.ammo_57mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_p90_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_p90_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [120/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_p90_isempty(player pl)
-{
-
- if (pl.p90_mag <= 0 && pl.ammo_57mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_p90_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_p90_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_57mm, AMMO_MAX_57MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud13_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud12_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_p90 =
-{
- .name = "p90",
- .id = ITEM_P90,
- .slot = 0,
- .slot_pos = 3,
- .weight = 26,
- .allow_drop = TRUE,
- .draw = w_p90_draw,
- .holster = __NULL__,
- .primary = w_p90_primary,
- .secondary = __NULL__,
- .reload = w_p90_reload,
- .release = w_p90_release,
- .postdraw = w_p90_hud,
- .precache = w_p90_precache,
- .pickup = w_p90_pickup,
- .updateammo = w_p90_updateammo,
- .wmodel = w_p90_wmodel,
- .pmodel = w_p90_pmodel,
- .deathmsg = w_p90_deathmsg,
- .aimanim = w_p90_aimanim,
- .hudpic = w_p90_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_p90_isempty
-};
-
-#ifdef SERVER
-void
-weapon_p90(void)
-{
- Weapons_InitItem(WEAPON_P90);
-}
-#endif
diff --git a/src/shared/w_para.qc b/src/shared/w_para.qc
deleted file mode 100644
index 1d8af98..0000000
--- a/src/shared/w_para.qc
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_m249 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-FN M249 Para Weapon
-
-- Buy Menu -
-Price: $5750
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_m249.mdl"
-*/
-
-enum
-{
- PARA_IDLE,
- PARA_SHOOT1,
- PARA_SHOOT2,
- PARA_RELOAD,
- PARA_DRAW
-};
-
-void
-w_para_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_para.fire");
- precache_model("models/w_m249.mdl");
-#else
- precache_model("models/v_m249.mdl");
- precache_model("models/p_m249.mdl");
-#endif
-}
-
-void
-w_para_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.para_mag, pl.ammo_556mmbox, -1);
-}
-
-string
-w_para_wmodel(void)
-{
- return "models/w_m249.mdl";
-}
-
-string
-w_para_pmodel(player pl)
-{
- return "models/p_m249.mdl";
-}
-
-string
-w_para_deathmsg(void)
-{
- return "";
-}
-
-int
-w_para_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.para_mag = 100;
- else
- pl.para_mag = startammo;
- } else {
- if (pl.ammo_556mmbox < AMMO_MAX_556MMBOX) {
- pl.ammo_556mmbox = bound(0, pl.ammo_556mmbox + 100, AMMO_MAX_556MMBOX);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_para_draw(player pl)
-{
- Weapons_SetModel("models/v_m249.mdl");
- Weapons_ViewAnimation(pl, PARA_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 6;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_para_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.para_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 70, 3);
-
- pl.para_mag--;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT2);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_PARA, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_SHOOT_PARA, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_para_dmg", 35);
- TraceAttack_SetRangeModifier(2.125);
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,1);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_PARA, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,1);
- Sound_Play(pl, CHAN_WEAPON, "weapon_para.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 1, 1,accuracy);
- pl.w_attack_next = 0.1f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_para_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.para_mag >= 100)
- return;
- if (!pl.ammo_556mmbox)
- return;
-
- Weapons_ViewAnimation(pl, PARA_RELOAD);
-
- pl.w_attack_next = 3.0f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::para_mag, player::ammo_556mmbox, 100);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_para_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.para_mag == 0 && pl.ammo_556mmbox > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_para_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_para_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_para_isempty(player pl)
-{
-
- if (pl.para_mag <= 0 && pl.ammo_556mmbox <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_para_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_para_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_556mmbox, AMMO_MAX_556MMBOX, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud6_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud3_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_para =
-{
- .name = "m249",
- .id = ITEM_PARA,
- .slot = 0,
- .slot_pos = 15,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_para_draw,
- .holster = __NULL__,
- .primary = w_para_primary,
- .secondary = __NULL__,
- .reload = w_para_reload,
- .release = w_para_release,
- .postdraw = w_para_hud,
- .precache = w_para_precache,
- .pickup = w_para_pickup,
- .updateammo = w_para_updateammo,
- .wmodel = w_para_wmodel,
- .pmodel = w_para_pmodel,
- .deathmsg = w_para_deathmsg,
- .aimanim = w_para_aimanim,
- .hudpic = w_para_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_para_isempty
-};
-
-#ifdef SERVER
-void
-weapon_m249(void)
-{
- Weapons_InitItem(WEAPON_PARA);
-}
-#endif
diff --git a/src/shared/w_scout.qc b/src/shared/w_scout.qc
deleted file mode 100644
index 183e69f..0000000
--- a/src/shared/w_scout.qc
+++ /dev/null
@@ -1,344 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_scout (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Steyr Scout Weapon
-
-- Buy Menu -
-Price: $1250
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_scout.mdl"
-*/
-
-enum
-{
- SCOUT_IDLE,
- SCOUT_SHOOT1,
- SCOUT_SHOOT2,
- SCOUT_RELOAD,
- SCOUT_DRAW
-};
-
-void
-w_scout_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_scout.fire");
- precache_model("models/w_scout.mdl");
-#else
- precache_model("models/v_scout.mdl");
- precache_model("models/p_scout.mdl");
-#endif
-}
-
-void
-w_scout_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.scout_mag, pl.ammo_762mm, -1);
-}
-
-string
-w_scout_wmodel(void)
-{
- return "models/w_scout.mdl";
-}
-
-string
-w_scout_pmodel(player pl)
-{
- return "models/p_scout.mdl";
-}
-
-string
-w_scout_deathmsg(void)
-{
- return "";
-}
-
-int
-w_scout_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.scout_mag = 10;
- else
- pl.scout_mag = startammo;
- } else {
- if (pl.ammo_762mm < AMMO_MAX_762MM) {
- pl.ammo_762mm = bound(0, pl.ammo_762mm + 10, AMMO_MAX_762MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_scout_draw(player pl)
-{
- Weapons_SetModel("models/v_scout.mdl");
- Weapons_ViewAnimation(pl, SCOUT_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 5;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-
-void
-w_scout_release(player pl)
-{
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.scout_mag == 0 && pl.ammo_762mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-
- if (pl.w_idle_next > 0.0f) {
- pl.viewzoom = 1.0f;
- Weapons_EnableModel();
- return;
- }
-
- if (pl.mode_temp == 1) {
- pl.viewzoom = 0.45f;
- Weapons_DisableModel();
- } else if (pl.mode_temp == 2) {
- pl.viewzoom = 0.1f;
- Weapons_DisableModel();
- } else {
- pl.viewzoom = 1.0f;
- Weapons_EnableModel();
- }
-}
-
-void
-w_scout_secondary(player pl)
-{
-
- if (pl.w_attack_next)
- return;
-
-#ifdef SSQC
- Sound_Play(pl, CHAN_WEAPON, "weapon_awp.zoom");
-#endif
-
- /* Simple toggle of fovs */
- if (pl.mode_temp == 1)
- pl.mode_temp = 2;
- else if (pl.mode_temp == 2)
- pl.mode_temp = 0;
- else
- pl.mode_temp = 1;
-
- pl.w_attack_next = 0.3f;
- pl.w_idle_next = 0.0f;
- w_scout_release(pl);
-}
-
-void
-w_scout_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0) {
- w_scout_release(pl);
- return;
- }
- if (!pl.scout_mag) {
- return;
- }
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 200);
-
- pl.scout_mag--;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT2);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.5f);
-#else
- dmg = Skill_GetValue("plr_scout_dmg", 75);
- TraceAttack_SetRangeModifier(2.375);
- TraceAttack_SetPenetrationPower(1);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_SCOUT, "Impact.BigShot");
- Sound_Play(pl, CHAN_WEAPON, "weapon_scout.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 1, 1,accuracy);
- pl.w_attack_next = 1.25f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_scout_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.scout_mag >= 10)
- return;
- if (!pl.ammo_762mm)
- return;
-
- Weapons_ViewAnimation(pl, SCOUT_RELOAD);
-
- pl.w_attack_next = 2.0f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::scout_mag, player::ammo_762mm, 10);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-float
-w_scout_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_scout_hud(player pl)
-{
-#ifdef CLIENT
- if (pl.viewzoom < 1.0f) {
- Cstrike_DrawScope();
- }
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [72/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_scout_isempty(player pl)
-{
-
- if (pl.scout_mag <= 0 && pl.ammo_762mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_scout_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_scout_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_762mm, AMMO_MAX_762MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud13_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud12_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_scout =
-{
- .name = "scout",
- .id = ITEM_SCOUT,
- .slot = 0,
- .slot_pos = 11,
- .weight = 30,
- .allow_drop = TRUE,
- .draw = w_scout_draw,
- .holster = __NULL__,
- .primary = w_scout_primary,
- .secondary = w_scout_secondary,
- .reload = w_scout_reload,
- .release = w_scout_release,
- .postdraw = w_scout_hud,
- .precache = w_scout_precache,
- .pickup = w_scout_pickup,
- .updateammo = w_scout_updateammo,
- .wmodel = w_scout_wmodel,
- .pmodel = w_scout_pmodel,
- .deathmsg = w_scout_deathmsg,
- .aimanim = w_scout_aimanim,
- .hudpic = w_scout_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_scout_isempty
-};
-
-#ifdef SERVER
-void
-weapon_scout(void)
-{
- Weapons_InitItem(WEAPON_SCOUT);
-}
-#endif
diff --git a/src/shared/w_sg550.qc b/src/shared/w_sg550.qc
deleted file mode 100644
index 0c41b5a..0000000
--- a/src/shared/w_sg550.qc
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_sg550 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-SIG SG 550 Weapon
-
-- Buy Menu -
-Price: $4200
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_sg550.mdl"
-*/
-
-enum
-{
- SG550_IDLE,
- SG550_SHOOT1,
- SG550_SHOOT2,
- SG550_RELOAD,
- SG550_DRAW,
-};
-
-void
-w_sg550_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_sg550.fire");
- precache_model("models/w_sg550.mdl");
-#else
- precache_model("models/v_sg550.mdl");
- precache_model("models/p_sg550.mdl");
-#endif
-}
-
-void
-w_sg550_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.sg550_mag, pl.ammo_556mm, -1);
-}
-
-string
-w_sg550_wmodel(void)
-{
- return "models/w_sg550.mdl";
-}
-
-string
-w_sg550_pmodel(player pl)
-{
- return "models/p_sg550.mdl";
-}
-
-string
-w_sg550_deathmsg(void)
-{
- return "";
-}
-
-int
-w_sg550_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.sg550_mag = 30;
- else
- pl.sg550_mag = startammo;
- } else {
- if (pl.ammo_556mm < AMMO_MAX_556MM) {
- pl.ammo_556mm = bound(0, pl.ammo_556mm + 30, AMMO_MAX_556MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_sg550_draw(player pl)
-{
- Weapons_SetModel("models/v_sg550.mdl");
- Weapons_ViewAnimation(pl, SG550_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 5;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_sg550_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.sg550_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 200);
- Cstrike_ShotMultiplierAdd(pl, 1, 1,accuracy);
- pl.sg550_mag--;
-
- int r = (float)input_sequence % 2;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, SCOUT_SHOOT2);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_sg550_dmg", 70);
- TraceAttack_SetRangeModifier(2.125);
- TraceAttack_SetPenetrationPower(1);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_SG550, "Impact.BigShot");
- Sound_Play(pl, CHAN_WEAPON, "weapon_sg550.fire");
-#endif
-
- pl.w_attack_next = 0.25f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_sg550_secondary(player pl)
-{
-
- if (pl.w_attack_next)
- return;
-
- /* Simple toggle of fovs */
- if (pl.viewzoom == 1.0f) {
- pl.viewzoom = 0.45f;
- Weapons_DisableModel();
- } else if (pl.viewzoom == 0.45f) {
- pl.viewzoom = 0.1f;
- Weapons_DisableModel();
- } else {
- pl.viewzoom = 1.0f;
- Weapons_EnableModel();
- }
-
- pl.w_attack_next = 0.5f;
-}
-
-void
-w_sg550_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.sg550_mag >= 30)
- return;
- if (!pl.ammo_556mm)
- return;
-
- Weapons_ViewAnimation(pl, SG550_RELOAD);
-
- pl.w_attack_next = 3.8f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::sg550_mag, player::ammo_556mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_sg550_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.sg550_mag == 0 && pl.ammo_556mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_sg550_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_sg550_hud(player pl)
-{
-#ifdef CLIENT
- if (pl.viewzoom < 1.0f) {
- Cstrike_DrawScope();
- }
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_sg550_isempty(player pl)
-{
-
- if (pl.sg550_mag <= 0 && pl.ammo_556mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_sg550_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_sg550_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_556mm, AMMO_MAX_556MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud15_spr,
- [0,180/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud14_spr,
- [0,180/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_sg550 =
-{
- .name = "sg550",
- .id = ITEM_SG550,
- .slot = 0,
- .slot_pos = 14,
- .weight = 20,
- .allow_drop = TRUE,
- .draw = w_sg550_draw,
- .holster = __NULL__,
- .primary = w_sg550_primary,
- .secondary = w_sg550_secondary,
- .reload = w_sg550_reload,
- .release = w_sg550_release,
- .postdraw = w_sg550_hud,
- .precache = w_sg550_precache,
- .pickup = w_sg550_pickup,
- .updateammo = w_sg550_updateammo,
- .wmodel = w_sg550_wmodel,
- .pmodel = w_sg550_pmodel,
- .deathmsg = w_sg550_deathmsg,
- .aimanim = w_sg550_aimanim,
- .hudpic = w_sg550_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_sg550_isempty
-};
-
-#ifdef SERVER
-void
-weapon_sg550(void)
-{
- Weapons_InitItem(WEAPON_SG550);
-}
-#endif
diff --git a/src/shared/w_sg552.qc b/src/shared/w_sg552.qc
deleted file mode 100644
index 0e046af..0000000
--- a/src/shared/w_sg552.qc
+++ /dev/null
@@ -1,326 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_sg552 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-SIG SG 552 Commando Weapon
-
-- Buy Menu -
-Price: $3500
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_sg552.mdl"
-*/
-
-enum
-{
- SG552_IDLE,
- SG552_RELOAD,
- SG552_DRAW,
- SG552_SHOOT1,
- SG552_SHOOT2,
- SG552_SHOOT3
-};
-
-void
-w_sg552_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_sg552.fire");
- precache_model("models/w_sg552.mdl");
-#else
- precache_model("models/v_sg552.mdl");
- precache_model("models/p_sg552.mdl");
-#endif
-}
-
-void
-w_sg552_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.sg552_mag, pl.ammo_556mm, -1);
-}
-
-string
-w_sg552_wmodel(void)
-{
- return "models/w_sg552.mdl";
-}
-
-string
-w_sg552_pmodel(player pl)
-{
- return "models/p_sg552.mdl";
-}
-
-string
-w_sg552_deathmsg(void)
-{
- return "";
-}
-
-int
-w_sg552_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.sg552_mag = 30;
- else
- pl.sg552_mag = startammo;
- } else {
- if (pl.ammo_556mm < AMMO_MAX_556MM) {
- pl.ammo_556mm = bound(0, pl.ammo_556mm + 30, AMMO_MAX_556MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_sg552_draw(player pl)
-{
- Weapons_SetModel("models/v_sg552.mdl");
- Weapons_ViewAnimation(pl, SG552_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 5;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_sg552_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.sg552_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 75,3)*pl.viewzoom;
- pl.sg552_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, SG552_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, SG552_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, SG552_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_RIFLE, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_RIFLE, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_rifle_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_sg552_dmg", 33);
- TraceAttack_SetRangeModifier(2.125);
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,0.726f);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_SG552, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,0.725f);
- Sound_Play(pl, CHAN_WEAPON, "weapon_sg552.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 2.2, 0.9,accuracy);
- if (pl.viewzoom == 1.0f)
- pl.w_attack_next = 0.0825f;
- else
- pl.w_attack_next = 0.15f;
-
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_sg552_secondary(player pl)
-{
-
- if (pl.w_attack_next)
- return;
-
- /* Simple toggle of fovs */
- if (pl.viewzoom == 1.0f)
- pl.viewzoom = 0.2f;
- else
- pl.viewzoom = 1.0f;
-
- pl.w_attack_next = 0.5f;
-}
-
-void
-w_sg552_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.sg552_mag >= 30)
- return;
- if (!pl.ammo_556mm)
- return;
-
- Weapons_ViewAnimation(pl, SG552_RELOAD);
-
- pl.w_attack_next = 3.2f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::sg552_mag, player::ammo_556mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_sg552_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.sg552_mag == 0 && pl.ammo_556mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_sg552_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_sg552_hud(player pl)
-{
-#ifdef CLIENT
- if (pl.viewzoom == 1.0f) {
- Cstrike_DrawCrosshair();
- } else {
- Cstrike_DrawSimpleCrosshair();
- }
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_sg552_isempty(player pl)
-{
-
- if (pl.sg552_mag <= 0 && pl.ammo_556mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_sg552_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_sg552_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_556mm, AMMO_MAX_556MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud11_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud10_spr,
- [0,45/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_sg552 =
-{
- .name = "sg552",
- .id = ITEM_SG552,
- .slot = 0,
- .slot_pos = 8,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_sg552_draw,
- .holster = __NULL__,
- .primary = w_sg552_primary,
- .secondary = w_sg552_secondary,
- .reload = w_sg552_reload,
- .release = w_sg552_release,
- .postdraw = w_sg552_hud,
- .precache = w_sg552_precache,
- .pickup = w_sg552_pickup,
- .updateammo = w_sg552_updateammo,
- .wmodel = w_sg552_wmodel,
- .pmodel = w_sg552_pmodel,
- .deathmsg = w_sg552_deathmsg,
- .aimanim = w_sg552_aimanim,
- .hudpic = w_sg552_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_sg552_isempty
-};
-
-#ifdef SERVER
-void
-weapon_sg552(void)
-{
- Weapons_InitItem(WEAPON_SG552);
-}
-#endif
diff --git a/src/shared/w_smokegrenade.qc b/src/shared/w_smokegrenade.qc
deleted file mode 100644
index 6dba00a..0000000
--- a/src/shared/w_smokegrenade.qc
+++ /dev/null
@@ -1,306 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_smokegrenade (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Smoke Grenade Weapon
-
-When thrown, the explosion casts view-blocking smoke in that radius.
-
-- Buy Menu -
-Price: $300
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_smokegrenade.mdl"
-*/
-
-enum
-{
- SMOKEGRENADE_IDLE,
- SMOKEGRENADE_PULLPIN,
- SMOKEGRENADE_THROW,
- SMOKEGRENADE_DRAW,
-};
-
-void
-w_smokegrenade_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_smokegrenade.bounce");
- Sound_Precache("weapon_smokegrenade.explode");
- precache_model("models/w_smokegrenade.mdl");
-#else
- precache_model("models/v_smokegrenade.mdl");
- precache_model("models/p_smokegrenade.mdl");
-#endif
-}
-
-void
-w_smokegrenade_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, -1, pl.ammo_smokegrenade, pl.mode_temp);
-}
-
-int
-w_smokegrenade_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (pl.ammo_smokegrenade < AMMO_MAX_SMOKE) {
- pl.ammo_smokegrenade = bound(0, pl.ammo_smokegrenade + 1, AMMO_MAX_SMOKE);
- } else {
- return (0);
- }
-#endif
- return (1);
-}
-
-string
-w_smokegrenade_wmodel(void)
-{
- return "models/w_smokegrenade.mdl";
-}
-
-string
-w_smokegrenade_pmodel(player pl)
-{
- return "models/p_smokegrenade.mdl";
-}
-
-string
-w_smokegrenade_deathmsg(void)
-{
- return "";
-}
-
-void
-w_smokegrenade_draw(player pl)
-{
- Weapons_SetModel("models/v_smokegrenade.mdl");
- Weapons_ViewAnimation(pl, SMOKEGRENADE_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-#ifdef SERVER
-void
-w_smokegrenade_throw(player pl)
-{
- static void smokegrenade_explode(void)
- {
- FX_Smokenade(self.origin);
- Sound_Play(self, CHAN_BODY, "weapon_smokegrenade.explode");
- remove(self);
- }
-
- static void smokegrenade_touch(void)
- {
- if (other.takedamage == DAMAGE_YES) {
- Damage_Apply(other, self.owner, 15, WEAPON_SMOKEGRENADE, DMG_BLUNT);
- } else {
- Sound_Play(self, CHAN_BODY, "weapon_smokegrenade.bounce");
- }
- self.frame = 0;
- }
-
- vector vPLAngle = pl.v_angle;
- if (vPLAngle[0] < 0) {
- vPLAngle[0] = -10 + vPLAngle[0] * ((90 - 10) / 90.0);
- } else {
- vPLAngle[0] = -10 + vPLAngle[0] * ((90 + 10) / 90.0);
- }
-
- float flVel = (90 - vPLAngle[0]) * 5;
- if (flVel > 1000) {
- flVel = 1000;
- }
-
- makevectors(vPLAngle);
- vector vecSrc = pl.origin + pl.view_ofs + v_forward * 16;
- vector vecThrow = v_forward * flVel + pl.velocity;
-
- entity eGrenade = spawn();
- eGrenade.owner = pl;
- eGrenade.classname = "remove_me";
- eGrenade.solid = SOLID_BBOX;
- eGrenade.frame = 1;
- eGrenade.velocity = vecThrow;
- eGrenade.movetype = MOVETYPE_BOUNCE;
- eGrenade.think = smokegrenade_explode;
- eGrenade.touch = smokegrenade_touch;
- eGrenade.nextthink = time + 4.0f;
- setmodel(eGrenade, "models/w_smokegrenade.mdl");
- setsize(eGrenade, [0,0,0], [0,0,0]);
- setorigin(eGrenade, vecSrc);
-}
-#endif
-
-void
-w_smokegrenade_primary(player pl)
-{
- if (pl.w_attack_next > 0.0) {
- return;
- }
-
- /* We're abusing this network variable for the holding check */
- if (pl.mode_temp > 0) {
- return;
- }
-
- /* Ammo check */
- if (pl.ammo_smokegrenade <= 0) {
-#ifdef SERVER
- Weapons_RemoveItem(pl, WEAPON_SMOKEGRENADE);
-#endif
- return;
- }
-
- Weapons_ViewAnimation(pl, SMOKEGRENADE_PULLPIN);
- pl.mode_temp = 1;
- pl.w_attack_next = 0.975f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_smokegrenade_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- if (pl.w_idle_next > 0.0) {
- return;
- }
-
- if (pl.mode_temp == 1) {
- pl.ammo_smokegrenade--;
-#ifdef CLIENT
- Weapons_ViewAnimation(pl, SMOKEGRENADE_THROW);
-#else
- w_smokegrenade_throw(pl);
-#endif
- pl.mode_temp = 2;
- pl.w_attack_next = 1.0f;
- pl.w_idle_next = 0.5f;
- } else if (pl.mode_temp == 2) {
-#ifdef CLIENT
- Weapons_ViewAnimation(pl, SMOKEGRENADE_DRAW);
-#else
- if (!pl.ammo_smokegrenade) {
- Weapons_RemoveItem(pl, WEAPON_SMOKEGRENADE);
- }
-#endif
- pl.w_attack_next = 0.5f;
- pl.w_idle_next = 0.5f;
- pl.mode_temp = 0;
- }
-}
-
-float
-w_smokegrenade_aimanim(player pl)
-{
- return w_flashbang_aimanim(pl);
-}
-
-void
-w_smokegrenade_hud(player pl)
-{
-#ifdef CLIENT
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [144/256,96/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_smokegrenade_isempty(player pl)
-{
-
- if (pl.ammo_smokegrenade <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_smokegrenade_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
-
- HUD_DrawAmmoBar(pos, pl.ammo_smokegrenade, AMMO_MAX_SMOKE, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud6_spr,
- [0,135/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud3_spr,
- [0,135/256],
- [170/256,45/256],
- g_hud_color,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_smokegrenade =
-{
- .name = "smokegrenade",
- .id = ITEM_SMOKEGRENADE,
- .slot = 3,
- .slot_pos = 2,
- .allow_drop = FALSE,
- .draw = w_smokegrenade_draw,
- .holster = __NULL__,
- .primary = w_smokegrenade_primary,
- .secondary = __NULL__,
- .reload = __NULL__,
- .release = w_smokegrenade_release,
- .postdraw = w_smokegrenade_hud,
- .precache = w_smokegrenade_precache,
- .pickup = w_smokegrenade_pickup,
- .updateammo = w_smokegrenade_updateammo,
- .wmodel = w_smokegrenade_wmodel,
- .pmodel = w_smokegrenade_pmodel,
- .deathmsg = w_smokegrenade_deathmsg,
- .aimanim = w_smokegrenade_aimanim,
- .hudpic = w_smokegrenade_hudpic,
- .isempty = w_smokegrenade_isempty
-};
-
-#ifdef SERVER
-void
-weapon_smokegrenade(void)
-{
- Weapons_InitItem(WEAPON_SMOKEGRENADE);
-}
-#endif
diff --git a/src/shared/w_tmp.qc b/src/shared/w_tmp.qc
deleted file mode 100644
index 2c1a56a..0000000
--- a/src/shared/w_tmp.qc
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_tmp (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Steyr Tactical Weapon
-
-- Buy Menu -
-Price: $1250
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_tmp.mdl"
-*/
-
-enum
-{
- TMP_IDLE,
- TMP_RELOAD,
- TMP_DRAW,
- TMP_SHOOT1,
- TMP_SHOOT2,
- TMP_SHOOT3
-};
-
-void
-w_tmp_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_tmp.fire");
- precache_model("models/w_tmp.mdl");
-#else
- precache_model("models/v_tmp.mdl");
- precache_model("models/p_tmp.mdl");
-#endif
-}
-
-void
-w_tmp_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.tmp_mag, pl.ammo_9mm, -1);
-}
-
-string
-w_tmp_wmodel(void)
-{
- return "models/w_tmp.mdl";
-}
-
-string
-w_tmp_pmodel(player pl)
-{
- return "models/p_tmp.mdl";
-}
-
-string
-w_tmp_deathmsg(void)
-{
- return "";
-}
-
-int
-w_tmp_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.tmp_mag = 30;
- else
- pl.tmp_mag = startammo;
- } else {
- if (pl.ammo_9mm < AMMO_MAX_9MM) {
- pl.ammo_9mm = bound(0, pl.ammo_9mm + 30, AMMO_MAX_9MM);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_tmp_draw(player pl)
-{
- Weapons_SetModel("models/v_tmp.mdl");
- Weapons_ViewAnimation(pl, TMP_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 7;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_tmp_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.tmp_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 30,0.95)+0.0035;
- pl.tmp_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, TMP_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, TMP_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, TMP_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_MP5, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_MP5, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_tmp_dmg", 26);
- TraceAttack_SetRangeModifier(1.25); /* 9 but not 10 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,0.8);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_TMP, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,0.8);
- Sound_Play(pl, CHAN_WEAPON, "weapon_tmp.fire");
-#endif
-
- Cstrike_ShotMultiplierAdd(pl, 0.95, 1.25,accuracy);
- pl.w_attack_next = 0.07f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_tmp_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.tmp_mag >= 30)
- return;
- if (!pl.ammo_9mm)
- return;
-
- Weapons_ViewAnimation(pl, TMP_RELOAD);
-
- pl.w_attack_next = 2.1f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::tmp_mag, player::ammo_9mm, 30);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_tmp_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.tmp_mag == 0 && pl.ammo_9mm > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_tmp_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_tmp_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [48/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_tmp_isempty(player pl)
-{
-
- if (pl.tmp_mag <= 0 && pl.ammo_9mm <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_tmp_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_tmp_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_9mm, AMMO_MAX_9MM, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud5_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud2_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_tmp =
-{
- .name = "tmp",
- .id = ITEM_TMP,
- .slot = 0,
- .slot_pos = 6,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_tmp_draw,
- .holster = __NULL__,
- .primary = w_tmp_primary,
- .secondary = __NULL__,
- .reload = w_tmp_reload,
- .release = w_tmp_release,
- .postdraw = w_tmp_hud,
- .precache = w_tmp_precache,
- .pickup = w_tmp_pickup,
- .updateammo = w_tmp_updateammo,
- .wmodel = w_tmp_wmodel,
- .pmodel = w_tmp_pmodel,
- .deathmsg = w_tmp_deathmsg,
- .aimanim = w_tmp_aimanim,
- .hudpic = w_tmp_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_tmp_isempty
-};
-
-#ifdef SERVER
-void
-weapon_tmp(void)
-{
- Weapons_InitItem(WEAPON_TMP);
-}
-#endif
diff --git a/src/shared/w_ump45.qc b/src/shared/w_ump45.qc
deleted file mode 100644
index 7713624..0000000
--- a/src/shared/w_ump45.qc
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_ump45 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Heckler & Koch UMP .45 ACP Weapon
-
-- Buy Menu -
-Price: $1700
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_ump45.mdl"
-*/
-
-enum
-{
- UMP45_IDLE,
- UMP45_RELOAD,
- UMP45_DRAW,
- UMP45_SHOOT1,
- UMP45_SHOOT2,
- UMP45_SHOOT3
-};
-
-void
-w_ump45_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_ump45.fire");
- precache_model("models/w_ump45.mdl");
-#else
- precache_model("models/v_ump45.mdl");
- precache_model("models/p_ump45.mdl");
-#endif
-}
-
-void
-w_ump45_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.ump45_mag, pl.ammo_45acp, -1);
-}
-
-string
-w_ump45_wmodel(void)
-{
- return "models/w_ump45.mdl";
-}
-
-string
-w_ump45_pmodel(player pl)
-{
- return "models/p_ump45.mdl";
-}
-
-string
-w_ump45_deathmsg(void)
-{
- return "";
-}
-
-int
-w_ump45_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.ump45_mag = 25;
- else
- pl.ump45_mag = startammo;
- } else {
- if (pl.ammo_45acp < AMMO_MAX_45ACP) {
- pl.ammo_45acp = bound(0, pl.ammo_45acp + 25, AMMO_MAX_45ACP);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_ump45_draw(player pl)
-{
- Weapons_SetModel("models/v_ump45.mdl");
- Weapons_ViewAnimation(pl, UMP45_DRAW);
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 6;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_ump45_primary(player pl)
-{
- int dmg = 0;
-
- if (pl.w_attack_next > 0.0)
- return;
- if (!pl.ump45_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl, 100,1)+0.003;
- pl.ump45_mag--;
-
- int r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, UMP45_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, UMP45_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, UMP45_SHOOT3);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_MP5, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_MP5, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_ump45_dmg", 30);
- TraceAttack_SetRangeModifier(0.875); /* 6, but not 7 */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,1.2);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_UMP45, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,1.2);
- Sound_Play(pl, CHAN_WEAPON, "weapon_ump45.fire");
-#endif
- Cstrike_ShotMultiplierAdd(pl, 1, .9,accuracy);
- pl.w_attack_next = 0.105f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_ump45_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.ump45_mag >= 25)
- return;
- if (!pl.ammo_45acp)
- return;
-
- Weapons_ViewAnimation(pl, UMP45_RELOAD);
-
- pl.w_attack_next = 3.5f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::ump45_mag, player::ammo_45acp, 25);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_ump45_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.ump45_mag == 0 && pl.ammo_45acp > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_ump45_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_ump45_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [96/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_ump45_isempty(player pl)
-{
-
- if (pl.ump45_mag <= 0 && pl.ammo_45acp <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_ump45_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_ump45_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_45acp, AMMO_MAX_45ACP, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud16_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud16_spr,
- [0,0],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_ump45 =
-{
- .name = "ump45",
- .id = ITEM_UMP45,
- .slot = 0,
- .slot_pos = 4,
- .weight = 25,
- .allow_drop = TRUE,
- .draw = w_ump45_draw,
- .holster = __NULL__,
- .primary = w_ump45_primary,
- .secondary = __NULL__,
- .reload = w_ump45_reload,
- .release = w_ump45_release,
- .postdraw = w_ump45_hud,
- .precache = w_ump45_precache,
- .pickup = w_ump45_pickup,
- .updateammo = w_ump45_updateammo,
- .wmodel = w_ump45_wmodel,
- .pmodel = w_ump45_pmodel,
- .deathmsg = w_ump45_deathmsg,
- .aimanim = w_ump45_aimanim,
- .hudpic = w_ump45_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_ump45_isempty
-};
-
-#ifdef SERVER
-void
-weapon_ump45(void)
-{
- Weapons_InitItem(WEAPON_UMP45);
-}
-#endif
diff --git a/src/shared/w_usp45.qc b/src/shared/w_usp45.qc
deleted file mode 100644
index 333575c..0000000
--- a/src/shared/w_usp45.qc
+++ /dev/null
@@ -1,376 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_usp45 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Heckler & Koch USP .45 Tactical Weapon
-
-Default arsenal for Counter-Terrorists
-
-- Buy Menu -
-Price: $500
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_usp45.mdl"
-*/
-
-enum
-{
- USP45_IDLE,
- USP45_SHOOT1,
- USP45_SHOOT2,
- USP45_SHOOT3,
- USP45_SHOOTLAST,
- USP45_RELOAD,
- USP45_DRAW,
- USP45_ADDSIL,
- USP45_IDLEUNSIL,
- USP45_SHOOT1UNSIL,
- USP45_SHOOT2UNSIL,
- USP45_SHOOT3UNSIL,
- USP45_SHOOTLASTUNSIL,
- USP45_RELOADUNSIL,
- USP45_DRAWUNSIL,
- USP45_DETACHSIL
-};
-
-void
-w_usp45_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_usp45.fire");
- Sound_Precache("weapon_usp45.silenced");
- precache_model("models/w_usp.mdl");
-#else
- precache_model("models/v_usp.mdl");
- precache_model("models/p_usp.mdl");
-#endif
-}
-
-void
-w_usp45_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.usp45_mag, pl.ammo_45acp, -1);
-}
-
-string
-w_usp45_wmodel(void)
-{
- return "models/w_usp.mdl";
-}
-
-string
-w_usp45_pmodel(player pl)
-{
- return "models/p_usp.mdl";
-}
-
-string
-w_usp45_deathmsg(void)
-{
- return "";
-}
-
-int
-w_usp45_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.usp45_mag = 12;
- else
- pl.usp45_mag = startammo;
- } else {
- if (pl.ammo_45acp < AMMO_MAX_45ACP) {
- pl.ammo_45acp = bound(0, pl.ammo_45acp + 12, AMMO_MAX_45ACP);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_usp45_draw(player pl)
-{
-
- Weapons_SetModel("models/v_usp.mdl");
- if (pl.mode_usp45 == 1) {
- Weapons_ViewAnimation(pl, USP45_DRAW);
- } else {
- Weapons_ViewAnimation(pl, USP45_DRAWUNSIL);
- }
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 8;
- pl.cs_cross_deltadist = 3;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-void
-w_usp45_primary(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.gflags & GF_SEMI_TOGGLED)
- return;
- if (!pl.usp45_mag)
- return;
-
-
- float accuracy = Cstrike_CalculateAccuracy(pl,25,2.2);
- int dmg = 0;
- pl.usp45_mag--;
-
- /* this stuff is predicted */
- int r = (float)input_sequence % 3;
- if (pl.mode_usp45 == 1) {
- if (pl.usp45_mag <= 0) {
- Weapons_ViewAnimation(pl, USP45_SHOOTLAST);
- } else {
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, USP45_SHOOT1);
- break;
- case 1:
- Weapons_ViewAnimation(pl, USP45_SHOOT2);
- break;
- default:
- Weapons_ViewAnimation(pl, USP45_SHOOT3);
- break;
- }
- }
- } else {
- if (pl.usp45_mag <= 0) {
- Weapons_ViewAnimation(pl, USP45_SHOOTLASTUNSIL);
- } else {
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, USP45_SHOOT1UNSIL);
- break;
- case 1:
- Weapons_ViewAnimation(pl, USP45_SHOOT2UNSIL);
- break;
- default:
- Weapons_ViewAnimation(pl, USP45_SHOOT3UNSIL);
- break;
- }
- }
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_ONEHAND, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_ONEHAND, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_SMALL);
- View_AddEvent(w_pistol_ejectshell, 0.0f);
-#else
- /* Different sounds without silencer */
- if (pl.mode_usp45 == 1) {
- Sound_Play(pl, CHAN_WEAPON, "weapon_usp45.silenced");
- } else {
- Sound_Play(pl, CHAN_WEAPON, "weapon_usp45.fire");
- }
-
- /* actual firing */
- dmg = Skill_GetValue("plr_usp45_dmg", 33);
- TraceAttack_SetRangeModifier(0.79); /* can penetrate 6 but not 7 units */
- TraceAttack_SetPenetrationPower(1);
- Cstrike_BulletRecoil_ApplyPre(pl,0.625);
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [accuracy,accuracy], WEAPON_USP45, "Impact.BigShot");
- Cstrike_BulletRecoil_ApplyPost(pl,0.625);
-#endif
- Cstrike_ShotMultiplierAdd(pl, 2.5, .5,accuracy*0.5);
-
- pl.gflags |= GF_SEMI_TOGGLED;
- pl.w_attack_next = 0.15f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_usp45_secondary(player pl)
-{
-
- if (pl.w_attack_next > 0)
- return;
-
- /* toggle silencer */
- pl.mode_usp45 = 1 - pl.mode_usp45;
-
- /* play the animation */
- if (pl.mode_usp45)
- Weapons_ViewAnimation(pl, USP45_ADDSIL);
- else
- Weapons_ViewAnimation(pl, USP45_DETACHSIL);
-
- pl.w_attack_next = 3.1f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_usp45_reload(player pl)
-{
-
- if (pl.w_attack_next > 0.0)
- return;
- if (pl.usp45_mag >= 12)
- return;
- if (!pl.ammo_45acp)
- return;
-
- if (pl.mode_usp45 == 1)
- Weapons_ViewAnimation(pl, USP45_RELOAD);
- else
- Weapons_ViewAnimation(pl, USP45_RELOADUNSIL);
-
- pl.w_attack_next = 2.5f;
- pl.w_idle_next = pl.w_attack_next;
-
-#ifdef SERVER
- static void w_weapon_reload_done(void) {
- player pl = (player)self;
- Weapons_ReloadWeapon(pl, player::usp45_mag, player::ammo_45acp, 12);
- Cstrike_ShotReset(pl);
- }
-
- pl.think = w_weapon_reload_done;
- pl.nextthink = time + pl.w_attack_next - 0.1f;
-#endif
-}
-
-void
-w_usp45_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.usp45_mag == 0 && pl.ammo_45acp > 0) {
- Weapons_Reload(pl);
- return;
- }
-}
-
-float
-w_usp45_aimanim(player pl)
-{
- return w_deagle_aimanim(pl);
-}
-
-void
-w_usp45_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [96/256,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_usp45_isempty(player pl)
-{
-
- if (pl.usp45_mag <= 0 && pl.ammo_45acp <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_usp45_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_usp45_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_45acp, AMMO_MAX_45ACP, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud4_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud1_spr,
- [0,90/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_usp45 =
-{
- .name = "usp",
- .id = ITEM_USP45,
- .slot = 1,
- .slot_pos = 0,
- .weight = 5,
- .allow_drop = TRUE,
- .draw = w_usp45_draw,
- .holster = __NULL__,
- .primary = w_usp45_primary,
- .secondary = w_usp45_secondary,
- .reload = w_usp45_reload,
- .release = w_usp45_release,
- .postdraw = w_usp45_hud,
- .precache = w_usp45_precache,
- .pickup = w_usp45_pickup,
- .updateammo = w_usp45_updateammo,
- .wmodel = w_usp45_wmodel,
- .pmodel = w_usp45_pmodel,
- .deathmsg = w_usp45_deathmsg,
- .aimanim = w_usp45_aimanim,
- .hudpic = w_usp45_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_usp45_isempty
-};
-
-#ifdef SERVER
-void
-weapon_usp45(void)
-{
- Weapons_InitItem(WEAPON_USP45);
-}
-#endif
diff --git a/src/shared/w_xm1014.qc b/src/shared/w_xm1014.qc
deleted file mode 100644
index 04779ca..0000000
--- a/src/shared/w_xm1014.qc
+++ /dev/null
@@ -1,381 +0,0 @@
-/*
- * Copyright (c) 2016-2021 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*!QUAKED weapon_xm1014 (0 0 1) (-16 -16 0) (16 16 32)
-
-COUNTER-STRIKE (1999) ENTITY
-
-Benneli XM1014 Weapon
-
-- Buy Menu -
-Price: $3000
-
--------- MODEL FOR RADIANT ONLY - DO NOT SET THIS AS A KEY --------
-model="models/w_xm1014.mdl"
-*/
-
-#ifdef CLIENT
-void
-w_xm1014_ejectshell(void)
-{
- static void w_xm1014_ejectshell_death(void) {
- remove(self);
- }
- static void w_xm1014_ejectshell_touch(void) {
- if (other == world)
- Sound_Play(self, CHAN_BODY, "modelevent_shotgunshell.land");
- }
- entity eShell = spawn();
- setmodel(eShell, "models/shotgunshell.mdl");
- eShell.solid = SOLID_BBOX;
- eShell.movetype = MOVETYPE_BOUNCE;
- eShell.drawmask = MASK_ENGINE;
- eShell.angles = [pSeat->m_eViewModel.angles[0], pSeat->m_eViewModel.angles[1], 0];
- eShell.velocity = pSeat->m_vecPredictedVelocity;
-
- makevectors(pSeat->m_eViewModel.angles);
- eShell.velocity += (v_forward * 0);
- eShell.velocity += (v_right * 80);
- eShell.velocity += (v_up * 100);
- eShell.touch = w_xm1014_ejectshell_touch;
-
- eShell.avelocity = [0,45,900];
- eShell.think = w_xm1014_ejectshell_death;
- eShell.nextthink = time + 2.5f;
- setsize(eShell, [0,0,0], [0,0,0]);
- setorigin(eShell, pSeat->m_eViewModel.origin + (v_forward * 26) + (v_right * 8) + (v_up * -8));
-}
-#endif
-
-enum
-{
- XM1014_IDLE,
- XM1014_SHOOT1,
- XM1014_SHOOT2,
- XM1014_INSERT,
- XM1014_RELOAD_END,
- XM1014_RELOAD_START,
- XM1014_DRAW
-};
-
-enum
-{
- XM1014S_IDLE,
- XM1014S_RELOAD_START,
- XM1014S_RELOAD,
- XM1014S_RELOAD_END
-};
-
-void
-w_xm1014_precache(void)
-{
-#ifdef SERVER
- Sound_Precache("weapon_xm1014.fire");
- Sound_Precache("weapon_xm1014.insertshell");
- precache_model("models/w_xm1014.mdl");
-#else
- precache_model("models/v_xm1014.mdl");
- precache_model("models/p_xm1014.mdl");
-#endif
-}
-
-void
-w_xm1014_updateammo(player pl)
-{
- Weapons_UpdateAmmo(pl, pl.xm1014_mag, pl.ammo_buckshot, -1);
-}
-
-string
-w_xm1014_wmodel(void)
-{
- return "models/w_xm1014.mdl";
-}
-
-string
-w_xm1014_pmodel(player pl)
-{
- return "models/p_xm1014.mdl";
-}
-
-string
-w_xm1014_deathmsg(void)
-{
- return "";
-}
-
-int
-w_xm1014_pickup(player pl, int new, int startammo)
-{
-#ifdef SERVER
-
- if (new) {
- if (startammo == -1)
- pl.xm1014_mag = 7;
- else
- pl.xm1014_mag = startammo;
- } else {
- if (pl.ammo_buckshot < AMMO_MAX_BUCKSHOT) {
- pl.ammo_buckshot = bound(0, pl.ammo_buckshot + 7, AMMO_MAX_BUCKSHOT);
- } else {
- return (0);
- }
- }
-#endif
- return (1);
-}
-
-void
-w_xm1014_draw(player pl)
-{
- Weapons_SetModel("models/v_xm1014.mdl");
- Weapons_ViewAnimation(pl, XM1014_DRAW);
- pl.mode_temp = 0;
-
-#ifdef CLIENT
- pl.cs_cross_mindist = 9;
- pl.cs_cross_deltadist = 4;
- CStrikeView_UpdateGeomset(pl);
-#endif
-}
-
-
-void w_xm1014_release(player pl);
-
-void
-w_xm1014_primary(player pl)
-{
- int dmg = 0;
- int r = 0;
-
- if (pl.w_attack_next > 0.0) {
- w_xm1014_release(pl);
- return;
- }
-
- /* interrupt reloading if no longer empty */
- if (pl.mode_temp == XM1014S_RELOAD && pl.xm1014_mag >= 1) {
- pl.mode_temp = XM1014S_RELOAD_END;
- w_xm1014_release(pl);
- return;
- } else if (pl.mode_temp > XM1014S_IDLE) {
- w_xm1014_release(pl);
- return;
- }
-
- /* Ammo check */
- if (pl.xm1014_mag <= 0) {
- w_xm1014_release(pl);
- return;
- }
-
- pl.xm1014_mag--;
-
- r = (float)input_sequence % 3;
- switch (r) {
- case 0:
- Weapons_ViewAnimation(pl, XM1014_SHOOT1);
- break;
- default:
- Weapons_ViewAnimation(pl, XM1014_SHOOT2);
- break;
- }
-
- if (pl.flags & FL_CROUCHING)
- Animation_PlayerTop(pl, ANIM_SHOOT_SHOTGUN, 0.45f);
- else
- Animation_PlayerTop(pl, ANIM_CROUCH_SHOOT_SHOTGUN, 0.45f);
-
-#ifdef CLIENT
- View_SetMuzzleflash(MUZZLE_RIFLE);
- View_AddEvent(w_xm1014_ejectshell, 0.0f);
-#else
- dmg = Skill_GetValue("plr_xm1014_dmg", 22);
- TraceAttack_SetPenetrationPower(0); /* shotties can't wallbang?! */
- Sound_Play(pl, CHAN_WEAPON, "weapon_xm1014.fire");
-#endif
-
- for (int i = 0; i < 6; i++) {
- Cstrike_ShotMultiplierAdd(pl, 1, 1,1);
- pl.punchangle[0] = -4 * (6 / 6);
-#ifdef SERVER
- TraceAttack_FireBulletsWithDecal(1, pl.origin + pl.view_ofs, dmg, [random(-1,1) * 0.1,random(-1,1) * 0.05], WEAPON_M3, "Impact.BigShot");
-#endif
- }
-
- pl.w_attack_next = 0.25f;
- pl.w_idle_next = pl.w_attack_next;
-}
-
-void
-w_xm1014_reload(player pl)
-{
-
- if (pl.xm1014_mag >= 7) {
- return;
- }
- if (pl.ammo_buckshot <= 0) {
- return;
- }
-
- if (pl.mode_temp > XM1014S_IDLE) {
- return;
- }
- pl.mode_temp = XM1014S_RELOAD_START;
- pl.w_idle_next = 0.0f;
-}
-
-void
-w_xm1014_release(player pl)
-{
-
- w_cstrike_weaponrelease();
-
- /* auto-reload if need be */
- if (pl.w_attack_next <= 0.0)
- if (pl.mode_temp == XM1014S_IDLE && pl.xm1014_mag == 0 && pl.ammo_buckshot > 0) {
- Weapons_Reload(pl);
- return;
- }
-
- if (pl.w_idle_next > 0.0) {
- return;
- }
-
- if (pl.mode_temp == XM1014S_RELOAD_START) {
- Weapons_ViewAnimation(pl, XM1014_RELOAD_START);
- pl.mode_temp = XM1014S_RELOAD;
- pl.w_idle_next = 0.65f;
- } else if (pl.mode_temp == XM1014S_RELOAD) {
- Weapons_ViewAnimation(pl, XM1014_INSERT);
- pl.xm1014_mag++;
- pl.ammo_buckshot--;
- w_xm1014_updateammo(pl);
-#ifdef SERVER
- Sound_Play(pl, CHAN_WEAPON, "weapon_xm1014.insertshell");
-#endif
- if (pl.ammo_buckshot <= 0 || pl.xm1014_mag >= 7) {
- pl.mode_temp = XM1014S_RELOAD_END;
- }
- pl.w_idle_next = 0.5f;
- } else if (pl.mode_temp == XM1014S_RELOAD_END) {
- Weapons_ViewAnimation(pl, XM1014_RELOAD_END);
- pl.mode_temp = XM1014S_IDLE;
- pl.w_idle_next = 10.0f;
- pl.w_attack_next = 0.5f;
- }
-}
-
-float
-w_xm1014_aimanim(player pl)
-{
- return w_ak47_aimanim(pl);
-}
-
-void
-w_xm1014_hud(player pl)
-{
-#ifdef CLIENT
- Cstrike_DrawCrosshair();
- HUD_DrawAmmo1();
- HUD_DrawAmmo2();
- vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42];
- drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,72/256], [24/256, 24/256], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE);
-#endif
-}
-
-int
-w_xm1014_isempty(player pl)
-{
-
- if (pl.xm1014_mag <= 0 && pl.ammo_buckshot <= 0)
- return 1;
-
- return 0;
-}
-
-void
-w_xm1014_hudpic(player pl, int selected, vector pos, float a)
-{
-#ifdef CLIENT
- vector hud_col;
-
- if (w_xm1014_isempty(pl))
- hud_col = [1,0,0];
- else
- hud_col = g_hud_color;
-
- HUD_DrawAmmoBar(pos, pl.ammo_buckshot, AMMO_MAX_BUCKSHOT, a);
-
- if (selected) {
- drawsubpic(
- pos,
- [170,45],
- g_hud13_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- } else {
- drawsubpic(
- pos,
- [170,45],
- g_hud12_spr,
- [0,135/256],
- [170/256,45/256],
- hud_col,
- a,
- DRAWFLAG_ADDITIVE
- );
- }
-#endif
-}
-
-weapon_t w_xm1014 =
-{
- .name = "xm1014",
- .id = ITEM_XM1014,
- .slot = 0,
- .slot_pos = 1,
- .weight = 20,
- .allow_drop = TRUE,
- .draw = w_xm1014_draw,
- .holster = __NULL__,
- .primary = w_xm1014_primary,
- .secondary = __NULL__,
- .reload = w_xm1014_reload,
- .release = w_xm1014_release,
- .postdraw = w_xm1014_hud,
- .precache = w_xm1014_precache,
- .pickup = w_xm1014_pickup,
- .updateammo = w_xm1014_updateammo,
- .wmodel = w_xm1014_wmodel,
- .pmodel = w_xm1014_pmodel,
- .deathmsg = w_xm1014_deathmsg,
- .aimanim = w_xm1014_aimanim,
- .hudpic = w_xm1014_hudpic,
- .type = csweapon_ranged_type,
- .isempty = w_xm1014_isempty
-};
-
-#ifdef SERVER
-void
-weapon_xm1014(void)
-{
- Weapons_InitItem(WEAPON_XM1014);
-}
-#endif
diff --git a/src/shared/weapons.h b/src/shared/weapons.h
index 0ccf943..facea3f 100644
--- a/src/shared/weapons.h
+++ b/src/shared/weapons.h
@@ -25,6 +25,10 @@ enum
WEAPON_UMP45,
WEAPON_MAC10,
WEAPON_TMP,
+#if defined(CZERO) || defined(CSSOURCE)
+ WEAPON_FAMAS,
+ WEAPON_GALIL,
+#endif
WEAPON_AK47,
WEAPON_SG552,
WEAPON_M4A1,
diff --git a/src/shared/weapons.qc b/src/shared/weapons.qc
deleted file mode 100644
index 09e9e08..0000000
--- a/src/shared/weapons.qc
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2016-2020 Marco Cawthorne
- *
- * Permission to use, copy, modify, and distribute this software for any
- * purpose with or without fee is hereby granted, provided that the above
- * copyright notice and this permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF MIND, USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
- * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
-weapon_t w_null = {};
-weapon_t g_weapons[] = {
- w_null,
- w_m3,
- w_xm1014,
- w_mp5,
- w_p90,
- w_ump45,
- w_mac10,
- w_tmp,
- w_ak47,
- w_sg552,
- w_m4a1,
- w_aug,
- w_scout,
- w_awp,
- w_g3sg1,
- w_sg550,
- w_para,
- w_usp45,
- w_glock18,
- w_deagle,
- w_p228,
- w_elites,
- w_fiveseven,
- w_knife,
- w_hegrenade,
- w_flashbang,
- w_smokegrenade,
- w_c4bomb
-};
-
-int
-Cstrike_WeaponToDropUponDeath(player pl)
-{
- int best_weapon = WEAPON_KNIFE; /* this will never drop, so an okay default */
-
- for (int i = 0; i < g_weapons.length; i++) {
- if (pl.g_items & g_weapons[i].id) {
- if (g_weapons[i].slot == 0)
- return i; /* immediately choose this primary weapon */
-
- best_weapon = i;
- }
- }
-
- return best_weapon;
-}
\ No newline at end of file
diff --git a/src/shared/weapons_cstrike.qc b/src/shared/weapons_cstrike.qc
index 5f1e4af..d53cefa 100644
--- a/src/shared/weapons_cstrike.qc
+++ b/src/shared/weapons_cstrike.qc
@@ -34,19 +34,19 @@ var float autocvar_fcs_guns_movement_inaccuracy = 1.0f;
var float autocvar_fcs_guns_firing_inaccuracy = 1.0f;
weapontype_t
-csweapon_ranged_type(player pl)
+csweapon_ranged_type(CSPlayer pl)
{
return WPNTYPE_RANGED;
}
weapontype_t
-csweapon_melee_type(player pl)
+csweapon_melee_type(CSPlayer pl)
{
return WPNTYPE_CLOSE;
}
float
-Cstrike_CalculateMovementInaccuracy(player pl) {
+Cstrike_CalculateMovementInaccuracy(CSPlayer pl) {
float m = 1.0f;
float maxspeed = 250;
float speedlimit_low = maxspeed/3;
@@ -61,7 +61,7 @@ Cstrike_CalculateMovementInaccuracy(player pl) {
}
if (!(pl.flags & FL_ONGROUND)) {
m = 2.5f;
- }else if (pl.flags & FL_CROUCHING) {
+ }else if (pl.IsCrouching()) {
m *= 0.6f;
}
return bound(0.75f,m,2.5f);
@@ -69,7 +69,7 @@ Cstrike_CalculateMovementInaccuracy(player pl) {
/* called whenever a cstrike gun fires a successful shot */
void
-Cstrike_ShotMultiplierAdd(player pl, float shots, float strength, float inaccuracy)
+Cstrike_ShotMultiplierAdd(CSPlayer pl, float shots, float strength, float inaccuracy)
{
int r;
inaccuracy = bound(.95,inaccuracy*50+0.1,1.6);
@@ -154,7 +154,7 @@ Cstrike_ShotMultiplierAdd(player pl, float shots, float strength, float inaccura
/* generate an accuracy value that we'll pass onto TraceAttack */
float
-Cstrike_CalculateAccuracy(player pl, float divisor, float movement_penalty=1)
+Cstrike_CalculateAccuracy(CSPlayer pl, float divisor, float movement_penalty=1)
{
float inacc = 0;
float m = Cstrike_CalculateMovementInaccuracy(pl);
@@ -179,12 +179,12 @@ Cstrike_CalculateAccuracy(player pl, float divisor, float movement_penalty=1)
void
-Cstrike_BulletRecoil_ApplyPre(player pl, float strength) {
+Cstrike_BulletRecoil_ApplyPre(CSPlayer pl, float strength) {
strength *= autocvar_fcs_guns_recoil_strength;
pl.v_angle += strength*pl.punchangle*(2 - pl.cs_shotmultiplier/100*0.2);
}
void
-Cstrike_BulletRecoil_ApplyPost(player pl, float strength) {
+Cstrike_BulletRecoil_ApplyPost(CSPlayer pl, float strength) {
strength *= autocvar_fcs_guns_recoil_strength;
pl.v_angle -= strength*pl.punchangle*(2 - pl.cs_shotmultiplier/100*0.2);
}
@@ -192,7 +192,7 @@ Cstrike_BulletRecoil_ApplyPost(player pl, float strength) {
/* called whenever cstrike guns aren't firing */
void
-Cstrike_ShotMultiplierUpdate(player pl)
+Cstrike_ShotMultiplierUpdate(CSPlayer pl)
{
if ((pl.cs_shotmultiplier > 0) && (pl.cs_shottime <= 0.0f)) {
pl.cs_shottime = pl.w_attack_next + 0.01;
@@ -203,29 +203,28 @@ Cstrike_ShotMultiplierUpdate(player pl)
}
void
-Cstrike_ShotReset(player pl)
+Cstrike_ShotReset(CSPlayer pl)
{
pl.cs_shottime = 0.0f;
pl.cs_shotmultiplier = 0;
}
void
-w_cstrike_weaponrelease(void)
+w_cstrike_weaponrelease(CSPlayer pl)
{
- player pl = (player)self;
- pl.punchangle[1] *= 0.95;
+ //pl.punchangle[1] *= 0.95;
Cstrike_ShotMultiplierUpdate(pl);
}
void
-w_cstrke_switched(player pl)
+w_cstrke_switched(CSPlayer pl)
{
Cstrike_ShotReset(pl);
}
#ifdef CLIENT
void
-CStrikeView_UpdateGeomset(player pl)
+CStrikeView_UpdateGeomset(CSPlayer pl)
{
if (getplayerkeyfloat(pl.entnum-1, "*team") == TEAM_CT) {
setcustomskin(pSeat->m_eViewModel, "", "geomset 0 2\ngeomset 1 1\n");
diff --git a/zpak001.pk3dir/PAK_NAME b/zpak001.pk3dir/PAK_NAME
new file mode 100644
index 0000000..94f8520
--- /dev/null
+++ b/zpak001.pk3dir/PAK_NAME
@@ -0,0 +1 @@
+package_cstrike.pk3
diff --git a/zpak001.pk3dir/cfg/skill_cstrike.cfg b/zpak001.pk3dir/cfg/skill_cstrike.cfg
index 196a170..2afe7e7 100644
--- a/zpak001.pk3dir/cfg/skill_cstrike.cfg
+++ b/zpak001.pk3dir/cfg/skill_cstrike.cfg
@@ -2,6 +2,10 @@
// this is so that users can tweak all the stuff we mostly guessed
// and can make it more like how they want it to behave.
+set sk_hostage_health1 100
+set sk_hostage_health2 100
+set sk_hostage_health3 100
+
// knife: primary attack range
set sk_plr_knife_range1 48
set sk_plr_knife_range2 48
@@ -177,7 +181,7 @@ set sk_plr_awp_dmg1 115
set sk_plr_awp_dmg2 115
set sk_plr_awp_dmg3 115
-// para: bullet damage
-set sk_plr_para_dmg1 35
-set sk_plr_para_dmg2 35
-set sk_plr_para_dmg3 35
\ No newline at end of file
+// m249: bullet damage
+set sk_plr_m249_dmg1 35
+set sk_plr_m249_dmg2 35
+set sk_plr_m249_dmg3 35
diff --git a/zpak001.pk3dir/csprogs.dat.en.po b/zpak001.pk3dir/csprogs.dat.default.po
old mode 100755
new mode 100644
similarity index 93%
rename from zpak001.pk3dir/csprogs.dat.en.po
rename to zpak001.pk3dir/csprogs.dat.default.po
index 36dad96..240e4e8
--- a/zpak001.pk3dir/csprogs.dat.en.po
+++ b/zpak001.pk3dir/csprogs.dat.default.po
@@ -1,21 +1,4 @@
-# SOME DESCRIPTIVE TITLE.
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR , YEAR.
-#
-#, fuzzy
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2017-06-21 15:30+0200\n"
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
-"Last-Translator: FULL NAME \n"
-"Language-Team: LANGUAGE \n"
-"Language: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=CHARSET\n"
-"Content-Transfer-Encoding: 8bit\n"
+# English (Default) Locale file
msgid "VGUI_TITLE_MOTD"
msgstr "Message Of The Day"
diff --git a/zpak001.pk3dir/def/ammo.def b/zpak001.pk3dir/def/ammo.def
new file mode 100644
index 0000000..f4bc7ee
--- /dev/null
+++ b/zpak001.pk3dir/def/ammo.def
@@ -0,0 +1,116 @@
+// these have to be defined by the game.
+entityDef ammo_types {
+ "ammo_none" "0"
+ "ammo_338magnum" "1"
+ "ammo_357sig" "2"
+ "ammo_45acp" "3"
+ "ammo_50ae" "4"
+ "ammo_556nato" "5"
+ "ammo_556natobox" "6"
+ "ammo_57mm" "7"
+ "ammo_762nato" "8"
+ "ammo_9mm" "9"
+ "ammo_buckshot" "10"
+ "ammo_hegrenade" "11"
+ "ammo_smokegrenade" "12"
+ "ammo_flashbang" "13"
+}
+
+entityDef ammo_names {
+ "ammo_none" "None"
+ "ammo_338magnum" ".338 Lapua Magnum"
+ "ammo_357sig" ".357 SIG"
+ "ammo_45acp" ".45 ACP"
+ "ammo_50ae" ".50 Action Express"
+ "ammo_556nato" "5.56×45mm NATO"
+ "ammo_556natobox" "5.56×45mm NATO BOX"
+ "ammo_57mm" "FN 5.7×28mm"
+ "ammo_762nato" "7.62×51mm NATO"
+ "ammo_9mm" "9×19mm Parabellum"
+ "ammo_buckshot" "Buckshot"
+ "ammo_hegrenade" "HE Grenade"
+ "ammo_smokegrenade" "Smoke Grenade"
+ "ammo_flashbang" "Flashbang"
+}
+
+entityDef ammo_base
+{
+ "spawnclass" "NSItem"
+ "snd_acquire" "ammo.pickup"
+ "snd_respawn" "ammo.respawn"
+ "mins" "-16 -16 0"
+ "maxs" "16 16 16"
+ "model" "models/w_backpack.mdl"
+}
+
+// these don't exist as pickups in the game, but
+// might be helpful nonetheless
+entityDef ammo_338magnum
+{
+ "editor_usage" "Ammo used by weapon_awp"
+ "inherit" "ammo_base"
+ "inv_ammo_338magnum" "10"
+}
+
+entityDef ammo_357sig
+{
+ "editor_usage" "Ammo used by weapon_p228"
+ "inherit" "ammo_base"
+ "inv_ammo_357sig" "13"
+}
+
+entityDef ammo_45acp
+{
+ "editor_usage" "Ammo used by weapon_mac10, weapon_ump45, weapon_usp45"
+ "inherit" "ammo_base"
+ "inv_ammo_45acp" "12"
+}
+
+entityDef ammo_50ae
+{
+ "editor_usage" "Ammo used by weapon_deagle"
+ "inherit" "ammo_base"
+ "inv_ammo_50ae" "7"
+}
+
+entityDef ammo_556nato
+{
+ "editor_usage" "Ammo used by weapon_m4a1, weapon_sg550, weapon_sg552"
+ "inherit" "ammo_base"
+ "inv_ammo_556nato" "30"
+}
+
+entityDef ammo_556natobox
+{
+ "editor_usage" "Ammo used by weapon_m249"
+ "inherit" "ammo_base"
+ "inv_ammo_556natobox" "30"
+}
+
+entityDef ammo_57mm
+{
+ "editor_usage" "Ammo used by weapon_fiveseven, weapon_p90"
+ "inherit" "ammo_base"
+ "inv_ammo_57mm" "50"
+}
+
+entityDef ammo_762nato
+{
+ "editor_usage" "Ammo used by weapon_aug, weapon_famas, weapon_g3sg1, weapon_galil, weapon_ak47, weapon_scout"
+ "inherit" "ammo_base"
+ "inv_ammo_762nato" "30"
+}
+
+entityDef ammo_9mm
+{
+ "editor_usage" "Ammo used by weapon_elites, weapon_glock18, weapon_mp5navy, weapon_tmp"
+ "inherit" "ammo_base"
+ "inv_ammo_9mm" "30"
+}
+
+entityDef ammo_buckshot
+{
+ "editor_usage" "Ammo used by weapon_m3, weapon_xm1014"
+ "inherit" "ammo_base"
+ "inv_ammo_buckshot" "8"
+}
diff --git a/zpak001.pk3dir/def/bot.def b/zpak001.pk3dir/def/bot.def
deleted file mode 100644
index 7fbc892..0000000
--- a/zpak001.pk3dir/def/bot.def
+++ /dev/null
@@ -1,4 +0,0 @@
-entityDef bot
-{
- spawnclass csbot
-}
\ No newline at end of file
diff --git a/zpak001.pk3dir/def/hostage.def b/zpak001.pk3dir/def/hostage.def
new file mode 100644
index 0000000..5d92a55
--- /dev/null
+++ b/zpak001.pk3dir/def/hostage.def
@@ -0,0 +1,16 @@
+entityDef hostage_entity
+{
+ "spawnclass" "CSHostage"
+ "model" "models/hostage.mdl"
+ "netname" "Hostage"
+ "health" "skill:hostage_health"
+ "mins" "-16 -16 0"
+ "maxs" "16 16 72"
+ "eye_height" "64"
+ "team" "0"
+ "propdata" "actor_human"
+
+ "follow_on_use" "1"
+ "speed_walk" "64"
+ "speed_run" "364"
+}
diff --git a/zpak001.pk3dir/def/item_c4.def b/zpak001.pk3dir/def/item_c4.def
new file mode 100644
index 0000000..5f3bf2b
--- /dev/null
+++ b/zpak001.pk3dir/def/item_c4.def
@@ -0,0 +1,12 @@
+entityDef item_c4
+{
+ "spawnclass" "CSBombEntity"
+ "model" "models/w_c4.mdl"
+ "model_led" "sprites/ledglow.spr"
+ "snd_beep1" "weapon_c4bomb.beep1"
+ "snd_beep2" "weapon_c4bomb.beep2"
+ "snd_beep3" "weapon_c4bomb.beep3"
+ "snd_beep4" "weapon_c4bomb.beep4"
+ "snd_beep5" "weapon_c4bomb.beep5"
+ "snd_planted" "c4.plant"
+}
diff --git a/zpak001.pk3dir/def/player.def b/zpak001.pk3dir/def/player.def
new file mode 100644
index 0000000..bb234ef
--- /dev/null
+++ b/zpak001.pk3dir/def/player.def
@@ -0,0 +1,4 @@
+entityDef player
+{
+ "spawnclass" "CSPlayer"
+}
diff --git a/zpak001.pk3dir/def/spawns.def b/zpak001.pk3dir/def/spawns.def
new file mode 100644
index 0000000..7ca23f6
--- /dev/null
+++ b/zpak001.pk3dir/def/spawns.def
@@ -0,0 +1,26 @@
+entityDef info_player_start
+{
+ "editor_mins" "-16 -16 -36"
+ "editor_maxs" "16 16 36"
+ "editor_description" "Singleplayer Spawn Point"
+ "editor_color" "1 0 0"
+ "spawnclass" "NSSpawnPoint"
+}
+
+entityDef info_player_deathmatch
+{
+ "editor_mins" "-16 -16 -36"
+ "editor_maxs" "16 16 36"
+ "editor_description" "Deathmatch Spawn Point"
+ "editor_color" "1 0 0"
+ "spawnclass" "NSSpawnPoint"
+}
+
+entityDef info_player_coop
+{
+ "editor_mins" "-16 -16 -36"
+ "editor_maxs" "16 16 36"
+ "editor_description" "Cooperative Spawn Point"
+ "editor_color" "1 0 0"
+ "spawnclass" "NSSpawnPoint"
+}
\ No newline at end of file
diff --git a/zpak001.pk3dir/def/weapons.def b/zpak001.pk3dir/def/weapons.def
index e69de29..62590c0 100644
--- a/zpak001.pk3dir/def/weapons.def
+++ b/zpak001.pk3dir/def/weapons.def
@@ -0,0 +1,76 @@
+#include "weapons/ak47.def"
+#include "weapons/aug.def"
+#include "weapons/awp.def"
+#include "weapons/c4.def"
+#include "weapons/deagle.def"
+#include "weapons/elites.def"
+#include "weapons/famas.def"
+#include "weapons/fiveseven.def"
+#include "weapons/flashbang.def"
+#include "weapons/g3sg1.def"
+#include "weapons/galil.def"
+#include "weapons/glock18.def"
+#include "weapons/hegrenade.def"
+#include "weapons/knife.def"
+#include "weapons/m249.def"
+#include "weapons/m3.def"
+#include "weapons/m4a1.def"
+#include "weapons/mac10.def"
+#include "weapons/mp5navy.def"
+#include "weapons/p228.def"
+#include "weapons/p90.def"
+#include "weapons/scout.def"
+#include "weapons/sg550.def"
+#include "weapons/sg552.def"
+#include "weapons/smokegrenade.def"
+#include "weapons/tmp.def"
+#include "weapons/ump45.def"
+#include "weapons/usp.def"
+#include "weapons/xm1014.def"
+
+entityDef CSBaseMelee
+{
+ "spawnclass" "CSWeapon"
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_rotatable" "1"
+
+ "snd_acquire" "Player.PickupWeapon"
+}
+
+entityDef CSBasePistol
+{
+ "spawnclass" "CSWeapon"
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_rotatable" "1"
+
+ "semiAuto" "1"
+ "snd_acquire" "Player.PickupWeapon"
+ "snd_empty" "Default.ClipEmpty_Pistol"
+}
+
+entityDef CSBaseRifle
+{
+ "spawnclass" "CSWeapon"
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_rotatable" "1"
+
+ "snd_acquire" "Player.PickupWeapon"
+ "snd_empty" "Default.ClipEmpty_Rifle"
+}
+
+entityDef CSBaseShotgun
+{
+ "spawnclass" "CSWeapon"
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_rotatable" "1"
+
+ "snd_acquire" "Player.PickupWeapon"
+}
diff --git a/zpak001.pk3dir/def/weapons/ak47.def b/zpak001.pk3dir/def/weapons/ak47.def
new file mode 100644
index 0000000..d14fd50
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/ak47.def
@@ -0,0 +1,54 @@
+entityDef weapon_ak47
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "AK-47 Weapon - Uses ammo_762nato"
+
+ "model" "models/w_ak47.mdl"
+ "model_view" "models/v_ak47.mdl"
+
+ "inv_name" "AK-47 Weapon"
+ "def_fireInfo" "fireInfo_ak47"
+ "clipSize" "30"
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_AK47.Single"
+
+ "speed_mod" "0.884"
+ "price" "2500"
+ "crossMinDist" "4"
+ "crossDeltaDist" "4"
+ "accuracyDivisor" "30"
+ "accuracyMovementPenalty" "3"
+ "accuracyMultiplier" "1.5"
+ "rangeModifier" "2.375"
+ "penetrationPower" "1.0"
+ "bulletStrength" "1.2"
+ "multiplierShots" "1.1"
+ "multiplierStrength" "0.92"
+ "multiplierInaccuracy" "0.5"
+
+ "hudSlot" "0"
+ "hudSlotPos" "7"
+ "weight" "25"
+}
+
+entityDef projectile_ak47
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_ak47_dmg"
+}
+
+entityDef fireInfo_ak47
+{
+ "def_onFire" "projectile_ak47"
+ "ammoType" "ammo_762nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" ".0975"
+ "punchAngle" "-2 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/aug.def b/zpak001.pk3dir/def/weapons/aug.def
new file mode 100644
index 0000000..795c19b
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/aug.def
@@ -0,0 +1,54 @@
+entityDef weapon_aug
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Steyr AUG Weapon - Uses ammo_762nato"
+
+ "model" "models/w_aug.mdl"
+ "model_view" "models/v_aug.mdl"
+
+ "inv_name" "Steyr AUG Weapon"
+ "def_fireInfo" "fireInfo_aug"
+ "clipSize" "30"
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_AUG.Single"
+
+ "speed_mod" "0.96"
+ "price" "3500"
+ "crossMinDist" "3"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "35"
+ "accuracyMovementPenalty" "2"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.125"
+ "penetrationPower" "1.0"
+ "bulletStrength" "1.03"
+ "multiplierShots" "1.1"
+ "multiplierStrength" "1.1"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "10"
+ "weight" "25"
+}
+
+entityDef projectile_aug
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_aug_dmg"
+}
+
+entityDef fireInfo_aug
+{
+ "def_onFire" "projectile_aug"
+ "ammoType" "ammo_762nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.0825f"
+ "punchAngle" "-2 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/awp.def b/zpak001.pk3dir/def/weapons/awp.def
new file mode 100644
index 0000000..3cb1a50
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/awp.def
@@ -0,0 +1,64 @@
+entityDef weapon_awp
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "AWP (AI Arctic Warfare/Magnum) Weapon - Uses ammo_338magnum"
+
+ "model" "models/w_awp.mdl"
+ "model_view" "models/v_awp.mdl"
+
+ "inv_name" "AWP (AI Arctic Warfare/Magnum) Weapon"
+ "def_fireInfo" "fireInfo_awp"
+ "clipSize" "5"
+
+ "actFire" "1,2,3"
+ "actAltFire" ""
+ "actHolster" ""
+ "actReload" "4"
+ "actDraw" "5"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_AWP.Single"
+
+ "speed_mod" "0.84"
+ "price" "4750"
+ "crossMinDist" "8"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "-1"
+ "accuracyMovementPenalty" "1"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "1.375"
+ "penetrationPower" "2.0"
+ "bulletStrength" "1"
+ "multiplierShots" "1.0"
+ "multiplierStrength" "1.0"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "12"
+ "weight" "30"
+
+ "zoomDuration" "0.075"
+ "zoomFov" "20"
+ "zoomFovStep" "5"
+ "zoomFovMin" "5"
+ "zoomFovMax" "40"
+ "snd_raise_scope" "Default.Zoom"
+ "snd_lower_scope" "Default.Zoom"
+}
+
+entityDef projectile_awp
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_awp_dmg"
+}
+
+entityDef fireInfo_awp
+{
+ "def_onFire" "projectile_awp"
+ "ammoType" "ammo_338magnum"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "1.2"
+ "punchAngle" "-5 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/c4.def b/zpak001.pk3dir/def/weapons/c4.def
new file mode 100644
index 0000000..52ceac3
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/c4.def
@@ -0,0 +1,33 @@
+entityDef weapon_c4
+{
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_usage" "C4 Bomb Weapon, Bomb Defusal Gamemode Entity"
+ "editor_rotatable" "1"
+
+ "spawnclass" "CSWeapon"
+ "model" "models/w_backpack.mdl"
+ "model_view" "models/v_c4.mdl"
+ "snd_acquire" "weapon.pickup"
+ "snd_respawn" "item.respawn"
+
+ "def_plant" "item_c4"
+ "inv_name" "C4 Bomb Weapon"
+ "clipSize" "1"
+ "trigger_delay" "3" // takes three seconds to charge
+
+ "actFire" "2"
+ "actDraw" "1"
+ "actIdle" "0"
+ "actDelay" "3"
+
+ "snd_fire" "C4.PlantSound"
+
+ "speed_mod" "1.0"
+
+ "hudSlot" "4"
+ "hudSlotPos" "0"
+ "weight" "0"
+ "team" "1" // Terrorists only!
+}
diff --git a/zpak001.pk3dir/def/weapons/deagle.def b/zpak001.pk3dir/def/weapons/deagle.def
new file mode 100644
index 0000000..9ff23a9
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/deagle.def
@@ -0,0 +1,55 @@
+entityDef weapon_deagle
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "Desert Eagle .50 AE Weapon - Uses ammo_50ae"
+ "model" "models/w_deagle.mdl"
+ "model_view" "models/v_deagle.mdl"
+
+ "inv_name" "Desert Eagle .50 AE Weapon"
+ "def_fireInfo" "fireInfo_deagle"
+ "clipSize" "7"
+
+ "actFire" "1,2"
+ "actFireLast" "3"
+ "actReload" "4"
+ "actDraw" "5"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_DEagle.Single"
+
+ "speed_mod" "1.0"
+ "price" "650"
+
+ "crossMinDist" "8"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "55"
+ "accuracyMovementPenalty" "1.5"
+ "accuracyMultiplier" "1.0"
+ "accuracyAdd" "0.005"
+ "rangeModifier" "1.875"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.5"
+ "multiplierShots" "10"
+ "multiplierStrength" "0.35"
+ "multiplierInaccuracy" "0.5"
+
+ "hudSlot" "1"
+ "hudSlotPos" "2"
+ "weight" "7"
+}
+
+entityDef projectile_deagle
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_deagle_dmg"
+}
+
+entityDef fireInfo_deagle
+{
+ "def_onFire" "projectile_deagle"
+ "ammoType" "ammo_50ae"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.2"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
\ No newline at end of file
diff --git a/zpak001.pk3dir/def/weapons/elites.def b/zpak001.pk3dir/def/weapons/elites.def
new file mode 100644
index 0000000..45a2e36
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/elites.def
@@ -0,0 +1,66 @@
+entityDef weapon_elites
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "Dual Beretta 96G (Elites) Weapon - Uses ammo_9mm"
+
+ "model" "models/w_elite.mdl"
+ "model_view" "models/v_elite.mdl"
+
+ "inv_name" "Dual Beretta 96G (Elites) Weapon"
+ "def_fireInfo" "fireInfo_elites"
+ "def_altFireInfo" "fireInfo_elites_alt"
+ "clipSize" "30"
+
+ "actFire" "2,3,4,5,6"
+ "actFireLast" "7"
+ "actReload" "14"
+ "actDraw" "15"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_ELITE.Single"
+ "snd_altfire" "Weapon_ELITE.Single"
+
+ "altAlternates" "1"
+ "speed_mod" "1.0"
+ "price" "1000"
+ "crossMinDist" "4"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "150"
+ "accuracyMovementPenalty" "1"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.002"
+ "rangeModifier" "1.875"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.9"
+ "multiplierShots" "3"
+ "multiplierStrength" "0.85"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "1"
+ "hudSlotPos" "4"
+ "weight" "5"
+}
+
+entityDef projectile_elites
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_elites_dmg"
+}
+
+entityDef fireInfo_elites
+{
+ "def_onFire" "projectile_elites"
+ "ammoType" "ammo_9mm"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.13"
+ "punchAngle" "-2 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
+
+entityDef fireInfo_elites_alt
+{
+ "inherit" "fireInfo_elites"
+ "actFire" "8,9,10,11,12"
+ "actFireLast" "13"
+}
diff --git a/zpak001.pk3dir/def/weapons/fiveseven.def b/zpak001.pk3dir/def/weapons/fiveseven.def
new file mode 100644
index 0000000..6bc86de
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/fiveseven.def
@@ -0,0 +1,57 @@
+entityDef weapon_fiveseven
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "Five-SeveN Weapon - Uses ammo_57mm"
+
+ "model" "models/w_fiveseven.mdl"
+ "model_view" "models/v_fiveseven.mdl"
+
+ "inv_name" "Five-SeveN Weapon"
+ "def_fireInfo" "fireInfo_fiveseven"
+ "clipSize" "20"
+
+ "actFire" "1,2"
+ "actFireLast" "3"
+ "actReload" "4"
+ "actDraw" "5"
+ "actIdle" "0"
+
+
+ "snd_fire" "Weapon_FiveSeven.Single"
+
+ "speed_mod" "1.0"
+ "price" "750"
+ "crossMinDist" "8"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "200"
+ "accuracyMovementPenalty" "1.4"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.0055"
+ "rangeModifier" "1.875"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.5"
+ "multiplierShots" "10"
+ "multiplierStrength" "0.4"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "1"
+ "hudSlotPos" "5"
+ "weight" "5"
+}
+
+entityDef projectile_fiveseven
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_fiveseven_dmg"
+}
+
+entityDef fireInfo_fiveseven
+{
+ "def_onFire" "projectile_fiveseven"
+ "ammoType" "ammo_57mm"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.155"
+ "punchAngle" "-2 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/flashbang.def b/zpak001.pk3dir/def/weapons/flashbang.def
new file mode 100644
index 0000000..a026c1b
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/flashbang.def
@@ -0,0 +1,46 @@
+entityDef weapon_flashbang
+{
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_usage" "Flashbang"
+ "editor_rotatable" "1"
+
+ "spawnclass" "CSWeapon"
+ "model" "models/w_flashbang.mdl"
+ "model_view" "models/v_flashbang.mdl"
+ "snd_acquire" "weapon.pickup"
+ "snd_respawn" "item.respawn"
+
+ "def_onFire" "projectile_flashgrenade"
+ "inv_name" "Flashbang"
+ "ammoType" "ammo_flashbang"
+ "ammoRequired" "1"
+ "silent_fire" "1"
+ "primed_fuse" "4"
+
+ "actIdle" "0"
+ "actDraw" "3"
+ "actPull" "1"
+ "actThrow" "2"
+
+ "hudSlot" "3"
+ "hudSlotPos" "1"
+}
+
+entityDef projectile_flashgrenade
+{
+ "spawnclass" "CSProjectile"
+ "model" "models/w_smokegrenade.mdl"
+ "frame" "1"
+ "fuse" "4"
+ "detonate_on_fuse" "1"
+ "bounce" "1"
+ "angular_velocity" "-350 0 0"
+
+ "snd_explode" "Flashbang.Explode"
+ "snd_bounce" "Flashbang.Bounce"
+ "decal_detonate" "ExplosionScorch"
+
+ "flashTime" "4"
+}
diff --git a/zpak001.pk3dir/def/weapons/g3sg1.def b/zpak001.pk3dir/def/weapons/g3sg1.def
new file mode 100644
index 0000000..924149b
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/g3sg1.def
@@ -0,0 +1,54 @@
+entityDef weapon_g3sg1
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Heckler & Koch G3/SG-1 Weapon - Uses ammo_762nato"
+
+ "model" "models/w_g3sg1.mdl"
+ "model_view" "models/v_g3sg1.mdl"
+
+ "inv_name" "Heckler & Koch G3/SG-1 Weapon"
+ "def_fireInfo" "fireInfo_g3sg1"
+ "clipSize" "20"
+
+ "actFire" "1,2"
+ "actReload" "3"
+ "actDraw" "4"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_G3SG1.Single"
+
+ "speed_mod" "0.84"
+ "price" "5000"
+
+ "crossMinDist" "6"
+ "crossDeltaDist" "4"
+ "accuracyDivisor" "200"
+ "accuracyMovementPenalty" "1"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.375"
+ "penetrationPower" "1.0"
+ "bulletStrength" ""
+ "multiplierShots" "1.0"
+ "multiplierStrength" "1.0"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "13"
+ "weight" "25"
+}
+
+entityDef projectile_g3sg1
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_g3sg1_dmg"
+}
+
+entityDef fireInfo_g3sg1
+{
+ "def_onFire" "projectile_g3sg1"
+ "ammoType" "ammo_762nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.25"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/glock18.def b/zpak001.pk3dir/def/weapons/glock18.def
new file mode 100644
index 0000000..7a6d8c7
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/glock18.def
@@ -0,0 +1,65 @@
+entityDef weapon_glock18
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "Glock 18 Select Fire Weapon - Uses ammo_9mm"
+
+ "model" "models/w_glock18.mdl"
+ "model_view" "models/v_glock18.mdl"
+
+ "inv_name" "Glock 18 Select Fire Weapon"
+ "def_fireInfo" "fireInfo_glock18"
+ "def_altFireInfo" "fireInfo_altglock18"
+ "clipSize" "20"
+ "ammoRequired" "1"
+ "model_flash" "sprites/muzzleflash2.spr"
+
+ "actFire" "5"
+ "actFireLast" "6"
+ "actHolster" "9"
+ "actReload" "7,12"
+ "actDraw" "9,11"
+ "actIdle" "0,1,2"
+
+ "snd_fire" "Weapon_Glock.Single"
+
+ "speed_mod" "1.0"
+ "price" "400"
+
+ "crossMinDist" "8.0"
+ "crossDeltaDist" "3.0"
+ "accuracyMovementPenalty" "1.2"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "1.25"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.6"
+ "multiplierShots" "2.0"
+ "multiplierStrength" "0.7"
+ "multiplierInaccuracy" "1.0"
+}
+
+entityDef projectile_glock
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_glock18_dmg"
+}
+
+entityDef fireInfo_glock18
+{
+ "def_onFire" "projectile_glock"
+ "ammoType" "ammo_9mm"
+ "ammoPerShot" "1"
+ "fireRate" "0.13"
+ "accuracyDivisor" "120"
+}
+
+entityDef fireInfo_altglock18
+{
+ "def_onFire" "projectile_glock"
+ "ammoType" "ammo_9mm"
+ "ammoPerShot" "3"
+ "numProjectiles" "3"
+ "fireRate" "0.5"
+ "accuracyDivisor" "75"
+ "actFire" "3,4"
+ "snd_fire" "Weapon_Glock.Burst"
+}
diff --git a/zpak001.pk3dir/def/weapons/hegrenade.def b/zpak001.pk3dir/def/weapons/hegrenade.def
new file mode 100644
index 0000000..8dc0d46
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/hegrenade.def
@@ -0,0 +1,63 @@
+
+entityDef weapon_hegrenade
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "HE Grenade"
+
+ "model" "models/w_hegrenade.mdl"
+ "model_view" "models/v_hegrenade.mdl"
+
+ "inv_name" "HE Grenade"
+ "inv_ammo_hegrenade" "5"
+ "def_onFire" "projectile_handgrenade"
+ "def_explode_inhand" "env_handgrenade_explodeinhand"
+ "def_damage_inhand" "damage_handgrenadeSplash"
+ "ammoType" "ammo_hegrenade"
+ "ammoRequired" "1"
+ "silent_fire" "1"
+ "primed_fuse" "4"
+
+ "actIdle" "0"
+ "actDraw" "3"
+ "actPull" "1"
+ "actThrow" "2"
+
+ // HLWeapon specific
+ "hudSlot" "3"
+ "hudSlotPos" "0"
+}
+
+entityDef projectile_handgrenade
+{
+ "spawnclass" "NSProjectile"
+ "model" "models/w_grenade.mdl"
+ "frame" "1"
+ "fuse" "4"
+ "detonate_on_fuse" "1"
+ "bounce" "1"
+ "angular_velocity" "-350 0 0"
+ "model_detonate" "fx_explosion.main"
+ "snd_explode" "fx.explosion"
+ "snd_bounce" "weapon_handgrenade.bounce"
+ "decal_detonate" "ExplosionScorch"
+
+ "def_damage" "damage_handgrenadeDirect"
+ "def_splash_damage" "damage_handgrenadeSplash"
+}
+
+entityDef damage_handgrenadeDirect
+{
+ "damage" "1"
+}
+
+entityDef damage_handgrenadeSplash
+{
+ "damage" "skill:plr_hand_grenade"
+ "radius" "250"
+}
+
+entityDef env_handgrenade_explodeinhand
+{
+ "spawnclass" "idAnimatedEntity"
+ "model" "grenadeExplosion.prt"
+}
diff --git a/zpak001.pk3dir/def/weapons/knife.def b/zpak001.pk3dir/def/weapons/knife.def
new file mode 100644
index 0000000..5cb2118
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/knife.def
@@ -0,0 +1,40 @@
+entityDef weapon_knife
+{
+ "inherit" "CSBaseMelee"
+ "editor_usage" "Knife Weapon"
+
+ "model" "models/w_knife.mdl"
+ "model_view" "models/v_knife.mdl"
+
+ // weapon specific
+ "def_melee" "damage_knife"
+ "melee_distance" "48"
+ "inv_name" "Knife Weapon"
+ "clipSize" "6"
+ "ammoType" ""
+ "ammoRequired" "0"
+ "clipSize" "0"
+ "silent_fire" "1"
+
+ "meleeRateMiss" "0.7"
+ "meleeRateHit" "0.7"
+
+ "actIdle" "0"
+ "actDraw" "3"
+ "actMeleeMiss" "1,2"
+ "actMeleeHit" "1,2"
+
+ "hudSlot" "2"
+ "hudSlotPos" "0"
+}
+
+entityDef damage_knife
+{
+ "damage" "skill:plr_knife"
+// "kickDir" "-1 0 0"
+// "knockback" "20"
+// "push" "20000"
+
+ "snd_hit" "Weapon_Knife.Hit"
+ "snd_miss" "Weapon_Knife.Slash"
+}
diff --git a/zpak001.pk3dir/def/weapons/m249.def b/zpak001.pk3dir/def/weapons/m249.def
new file mode 100644
index 0000000..1605b0d
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/m249.def
@@ -0,0 +1,54 @@
+entityDef weapon_m249
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "FN M249 Para Weapon - Uses ammo_556natobox"
+
+ "model" "models/w_m249.mdl"
+ "model_view" "models/v_m249.mdl"
+
+ "inv_name" "FN M249 Para Weapon"
+ "def_fireInfo" "fireInfo_m249"
+ "clipSize" "100"
+
+ "actFire" "1,2"
+ "actReload" "3"
+ "actDraw" "4"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_M249.Single"
+
+ "speed_mod" "0.88"
+ "price" "5750"
+
+ "crossMinDist" "6"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "70"
+ "accuracyMovementPenalty" "3"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.125"
+ "penetrationPower" "1.0"
+ "bulletStrength" "1.0"
+ "multiplierShots" "1.0"
+ "multiplierStrength" "1.0"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "15"
+ "weight" "25"
+}
+
+entityDef projectile_m249
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_m249_dmg"
+}
+
+entityDef fireInfo_m249
+{
+ "def_onFire" "projectile_m249"
+ "ammoType" "ammo_556natobox"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.1"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/m3.def b/zpak001.pk3dir/def/weapons/m3.def
new file mode 100644
index 0000000..5f2a50c
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/m3.def
@@ -0,0 +1,57 @@
+entityDef weapon_m3
+{
+ "inherit" "CSBaseShotgun"
+ "editor_usage" "Benneli M3 Super90 Weapon - Uses ammo_buckshot"
+
+ "model" "models/w_m3.mdl"
+ "model_view" "models/v_m3.mdl"
+
+ "inv_name" "Benneli M3 Super90 Weapon"
+ "def_fireInfo" "fireInfo_m3"
+ "clipSize" "8"
+
+ "actFire" "1,2"
+ "actReloadStart" "5"
+ "actReload" "3"
+ "actReloadEnd" "4"
+ "actDraw" "6"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_M3.Single"
+
+ "speed_mod" "0.92"
+ "price" "1700"
+ "crossMinDist" ""
+ "crossDeltaDist" ""
+ "accuracyDivisor" ""
+ "accuracyMovementPenalty" ""
+ "accuracyMultiplier" ""
+ "rangeModifier" ""
+ "penetrationPower" "0"
+ "bulletStrength" ""
+ "multiplierShots" ""
+ "multiplierStrength" ""
+ "multiplierInaccuracy" ""
+
+ "hudSlot" "0"
+ "hudSlotPos" "0"
+ "weight" "20"
+}
+
+entityDef projectile_m3
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_m3_dmg"
+}
+
+entityDef fireInfo_m3
+{
+ "def_onFire" "projectile_m3"
+ "ammoType" "ammo_buckshot"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "1.0"
+ "punchAngle" "-2 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+ "numProjectiles" "9"
+}
diff --git a/zpak001.pk3dir/def/weapons/m4a1.def b/zpak001.pk3dir/def/weapons/m4a1.def
new file mode 100644
index 0000000..0b01711
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/m4a1.def
@@ -0,0 +1,70 @@
+entityDef weapon_m4a1
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Colt M4A1 Carbine Weapon - Uses ammo_556nato"
+
+ "model" "models/w_m4a1.mdl"
+ "model_view" "models/v_m4a1.mdl"
+
+ "inv_name" "Colt M4A1 Carbine Weapon"
+ "def_fireInfo" "fireInfo_m4a1"
+ "def_altFireInfo" "fireInfo_m4a1_silenced"
+ "clipSize" "30"
+ "ammoType" "ammo_556nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.0875"
+
+ "altSilences" "1"
+ "actAddSil" "6"
+ "actDetachSil" "13"
+
+ // Unsilenced
+ "actFire" "8,9,10"
+ "actReload" "11"
+ "actDraw" "12"
+ "actIdle" "7"
+ "snd_fire" "Weapon_M4A1.Single"
+
+
+ "speed_mod" "0.92"
+ "price" "3100"
+
+ "crossMinDist" "4.0"
+ "crossDeltaDist" "3.0"
+ "accuracyDivisor" "60"
+ "accuracyMovementPenalty" "3"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.125"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.96"
+ "multiplierShots" "0.8"
+ "multiplierStrength" "1.025"
+ "multiplierInaccuracy" "0.8"
+
+ "hudSlot" "0"
+ "hudSlotPos" "9"
+ "weight" "25"
+}
+
+entityDef projectile_m4a1
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_m4a1_dmg"
+}
+
+entityDef fireInfo_m4a1
+{
+ "def_onFire" "projectile_m4a1"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
+
+entityDef fireInfo_m4a1_silenced
+{
+ "inherit" "fireInfo_m4a1"
+ "actFire" "1,2,3"
+ "actReload" "4"
+ "actDraw" "5"
+ "actIdle" "0"
+ "snd_fire" "Weapon_M4A1.Silenced"
+}
diff --git a/zpak001.pk3dir/def/weapons/mac10.def b/zpak001.pk3dir/def/weapons/mac10.def
new file mode 100644
index 0000000..eb7d2ea
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/mac10.def
@@ -0,0 +1,55 @@
+entityDef weapon_mac10
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Ingram MAC-10 Weapon - Used ammo_45acp"
+
+ "model" "models/w_mac10.mdl"
+ "model_view" "models/v_mac10.mdl"
+
+ "inv_name" "Ingram MAC-10 Weapon"
+ "def_fireInfo" "fireInfo_mac10"
+ "clipSize" "30"
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_MAC10.Single"
+
+ "speed_mod" "1.0"
+ "price" "1400"
+
+ "crossMinDist" "9"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "50"
+ "accuracyMovementPenalty" "0.8"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.0095"
+ "rangeModifier" "1.25"
+ "penetrationPower" "1.0"
+ "bulletStrength" "1.115"
+ "multiplierShots" "2.0"
+ "multiplierStrength" "0.7"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "5"
+ "weight" "25"
+}
+
+entityDef projectile_mac10
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_mac10_dmg"
+}
+
+entityDef fireInfo_mac10
+{
+ "def_onFire" "projectile_mac10"
+ "ammoType" "ammo_45acp"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.07"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/mp5navy.def b/zpak001.pk3dir/def/weapons/mp5navy.def
new file mode 100644
index 0000000..89179ea
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/mp5navy.def
@@ -0,0 +1,55 @@
+entityDef weapon_mp5navy
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Heckler & Koch MP5-Navy Weapon - Uses ammo_9mm"
+
+ "model" "models/w_mp5.mdl"
+ "model_view" "models/v_mp5.mdl"
+
+ "inv_name" "Heckler & Koch MP5-Navy Weapon"
+ "def_fireInfo" "fireInfo_mp5navy"
+ "clipSize" "30"
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_MP5Navy.Single"
+
+ "speed_mod" "1.0"
+ "price" "1500"
+
+ "crossMinDist" "5.0"
+ "crossDeltaDist" "2.0"
+ "accuracyDivisor" "60"
+ "accuracyMovementPenalty" "1.25"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.0045"
+ "rangeModifier" "1.25"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.825"
+ "multiplierShots" "0.5"
+ "multiplierStrength" "1.25"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "2"
+ "weight" "25"
+}
+
+entityDef projectile_mp5navy
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_mp5_dmg"
+}
+
+entityDef fireInfo_mp5navy
+{
+ "def_onFire" "projectile_mp5navy"
+ "ammoType" "ammo_9mm"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.08"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/p228.def b/zpak001.pk3dir/def/weapons/p228.def
new file mode 100644
index 0000000..4b70c1c
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/p228.def
@@ -0,0 +1,57 @@
+entityDef weapon_p228
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "SIG P228 Weapon - Uses ammo_357sig"
+
+ "model" "models/w_p228.mdl"
+ "model_view" "models/v_p228.mdl"
+
+ "inv_name" "SIG P228 Weapon"
+ "def_fireInfo" "fireInfo_p228"
+ "clipSize" "13"
+
+
+ "actFire" "1,2,3"
+ "actFireLast" "4"
+ "actReload" "5"
+ "actDraw" "6"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_P228.Single"
+
+ "speed_mod" "1.0"
+ "price" "600"
+
+ "crossMinDist" "8.0"
+ "crossDeltaDist" "3.0"
+ "accuracyDivisor" "200"
+ "accuracyMovementPenalty" "1.6"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.004"
+ "rangeModifier" "1.5"
+ "penetrationPower" "1.0"
+ "bulletStrength" "1.05"
+ "multiplierShots" "6.0"
+ "multiplierStrength" "0.5"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "1"
+ "hudSlotPos" "3"
+ "weight" "5"
+}
+
+entityDef projectile_p228
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_p228_dmg"
+}
+
+entityDef fireInfo_p228
+{
+ "def_onFire" "projectile_p228"
+ "ammoType" "ammo_357sig"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.1425"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/p90.def b/zpak001.pk3dir/def/weapons/p90.def
new file mode 100644
index 0000000..afc2c1e
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/p90.def
@@ -0,0 +1,55 @@
+entityDef weapon_p90
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "FN P90 Weapon - Uses ammo_57mm"
+
+ "model" "models/w_p90.mdl"
+ "model_view" "models/v_p90.mdl"
+
+ "inv_name" "FN P90 Weapon"
+ "def_fireInfo" "fireInfo_p90"
+ "clipSize" "50"
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_P90.Single"
+
+ "speed_mod" "0.98"
+ "price" "2350"
+
+ "crossMinDist" "7"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "50"
+ "accuracyMovementPenalty" "1.125"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.0055"
+ "rangeModifier" "1.875"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.9"
+ "multiplierShots" "1.1"
+ "multiplierStrength" "1.3"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "3"
+ "weight" "26"
+}
+
+entityDef projectile_p90
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_p90_dmg"
+}
+
+entityDef fireInfo_p90
+{
+ "def_onFire" "projectile_p90"
+ "ammoType" "ammo_57mm"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.07"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/scout.def b/zpak001.pk3dir/def/weapons/scout.def
new file mode 100644
index 0000000..8c65233
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/scout.def
@@ -0,0 +1,55 @@
+entityDef weapon_scout
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Steyr Scout Weapon - Uses ammo_762nato"
+
+ "model" "models/w_scout.mdl"
+ "model_view" "models/v_scout.mdl"
+
+ "inv_name" "Steyr Scout Weapon"
+ "def_fireInfo" "fireInfo_scout"
+ "clipSize" "10"
+
+
+ "actFire" "1,2"
+ "actReload" "3"
+ "actDraw" "4"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_Scout.Single"
+
+ "speed_mod" "1.04"
+ "price" "1250"
+
+ "crossMinDist" "5.0"
+ "crossDeltaDist" "3.0"
+ "accuracyDivisor" "200"
+ "accuracyMovementPenalty" "1"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.375"
+ "penetrationPower" "1.0"
+ "bulletStrength" ""
+ "multiplierShots" "1.0"
+ "multiplierStrength" "1.0"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "11"
+ "weight" "30"
+}
+
+entityDef projectile_scout
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_scout_dmg"
+}
+
+entityDef fireInfo_scout
+{
+ "def_onFire" "projectile_scout"
+ "ammoType" "ammo_762nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.3"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/sg550.def b/zpak001.pk3dir/def/weapons/sg550.def
new file mode 100644
index 0000000..a4b190d
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/sg550.def
@@ -0,0 +1,54 @@
+entityDef weapon_sg550
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "SIG SG 550 Weapon - Uses ammo_556nato"
+
+ "model" "models/w_sg550.mdl"
+ "model_view" "models/v_sg550.mdl"
+
+ "inv_name" "SIG SG 550 Weapon"
+ "def_fireInfo" "fireInfo_sg550"
+ "clipSize" "30"
+
+ "actFire" "1,2"
+ "actReload" "3"
+ "actDraw" "4"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_SG550.Single"
+
+ "speed_mod" "0.84"
+ "price" "4200"
+
+ "crossMinDist" "5.0"
+ "crossDeltaDist" "3.0"
+ "accuracyDivisor" "200"
+ "accuracyMovementPenalty" "1"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.125"
+ "penetrationPower" "1.0"
+ "bulletStrength" ""
+ "multiplierShots" "1.0"
+ "multiplierStrength" "1.0"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "14"
+ "weight" "20"
+}
+
+entityDef projectile_sg550
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_sg550_dmg"
+}
+
+entityDef fireInfo_sg550
+{
+ "def_onFire" "projectile_sg550"
+ "ammoType" "ammo_556nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.25"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/sg552.def b/zpak001.pk3dir/def/weapons/sg552.def
new file mode 100644
index 0000000..4b23007
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/sg552.def
@@ -0,0 +1,56 @@
+entityDef weapon_sg552
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "SIG SG 552 Commando Weapon - Uses ammo_556nato"
+
+ "model" "models/w_sg552.mdl"
+ "model_view" "models/v_sg552.mdl"
+
+ "inv_name" "SIG SG 552 Commando Weapon"
+ "def_fireInfo" "fireInfo_sg552"
+ "clipSize" "30"
+
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_SG552.Single"
+
+ "speed_mod" "0.94"
+ "price" "3500"
+
+ "crossMinDist" "5.0"
+ "crossDeltaDist" "3.0"
+ "accuracyDivisor" "75"
+ "accuracyMovementPenalty" "3"
+ // we actually want to * viewzoom here...
+ "accuracyMultiplier" "1"
+ "rangeModifier" "2.125"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.726"
+ "multiplierShots" "2.2"
+ "multiplierStrength" "0.9"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "8"
+ "weight" "25"
+}
+
+entityDef projectile_sg552
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_sg552_dmg"
+}
+
+entityDef fireInfo_sg552
+{
+ "def_onFire" "projectile_sg552"
+ "ammoType" "ammo_556nato"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.0825"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/smokegrenade.def b/zpak001.pk3dir/def/weapons/smokegrenade.def
new file mode 100644
index 0000000..5de28d5
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/smokegrenade.def
@@ -0,0 +1,50 @@
+entityDef weapon_smokegrenade
+{
+ "editor_color" ".3 .3 1"
+ "editor_mins" "-16 -16 -16"
+ "editor_maxs" "16 16 16"
+ "editor_usage" "smokegrenade"
+ "editor_rotatable" "1"
+
+ "spawnclass" "CSWeapon"
+ "model" "models/w_smokegrenade.mdl"
+ "model_view" "models/v_smokegrenade.mdl"
+ "snd_acquire" "weapon.pickup"
+ "snd_respawn" "item.respawn"
+
+ "def_onFire" "projectile_smokegrenade"
+ "inv_name" "smokegrenade"
+ "clipSize" "50"
+ "clipSizeDefault" "25"
+
+ "actFire" "5,6,7"
+ "actAltFire" "2"
+ "actHolster" "4"
+ "actReload" "3"
+ "actDraw" "4"
+ "actIdle" "0,1"
+
+ "snd_fire" "weapon_smokegrenade.shoot"
+ "snd_altfire" "weapon_smokegrenade.gl"
+ "snd_empty" "weapon_smokegrenade.empty"
+
+ "hudSlot" "3"
+ "hudSlotPos" "2"
+}
+
+entityDef projectile_smokegrenade
+{
+ "spawnclass" "CSProjectile"
+ "model" "models/w_smokegrenade.mdl"
+ "frame" "1"
+ "fuse" "4"
+ "detonate_on_fuse" "1"
+ "bounce" "1"
+ "angular_velocity" "-350 0 0"
+
+ "snd_explode" "BaseSmokeEffect.Sound"
+ "snd_bounce" "SmokeGrenade.Bounce"
+ "decal_detonate" "ExplosionScorch"
+
+ "smokeTime" "4"
+}
diff --git a/zpak001.pk3dir/def/weapons/tmp.def b/zpak001.pk3dir/def/weapons/tmp.def
new file mode 100644
index 0000000..c00050e
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/tmp.def
@@ -0,0 +1,56 @@
+entityDef weapon_tmp
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Steyr Tactical Weapon - Uses ammo_9mm"
+
+ "model" "models/w_tmp.mdl"
+ "model_view" "models/v_tmp.mdl"
+
+ "inv_name" "Steyr Tactical Weapon"
+ "def_fireInfo" "fireInfo_tmp"
+ "clipSize" "30"
+
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_TMP.Single"
+
+ "speed_mod" "1.0"
+ "price" "1250"
+
+ "crossMinDist" "7"
+ "crossDeltaDist" "3"
+ "accuracyDivisor" "30"
+ "accuracyMovementPenalty" "0.95"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.0035"
+ "rangeModifier" "1.25"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.8"
+ "multiplierShots" "0.95"
+ "multiplierStrength" "1.25"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "6"
+ "weight" "25"
+}
+
+entityDef projectile_tmp
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_tmp_dmg"
+}
+
+entityDef fireInfo_tmp
+{
+ "def_onFire" "projectile_tmp"
+ "ammoType" "ammo_9mm"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.07"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
diff --git a/zpak001.pk3dir/def/weapons/ump45.def b/zpak001.pk3dir/def/weapons/ump45.def
new file mode 100644
index 0000000..71655b0
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/ump45.def
@@ -0,0 +1,57 @@
+entityDef weapon_ump45
+{
+ "inherit" "CSBaseRifle"
+ "editor_usage" "Heckler & Koch UMP .45 ACP Weapon - Uses ammo_45acp"
+
+ "model" "models/w_ump45.mdl"
+ "model_view" "models/v_ump45.mdl"
+
+ "inv_name" "Heckler & Koch UMP .45 ACP Weapon"
+ "def_fireInfo" "fireInfo_ump45"
+ "clipSize" "25"
+
+
+ "actFire" "3,4,5"
+ "actReload" "1"
+ "actDraw" "2"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_UMP45.Single"
+
+ "speed_mod" "1.0"
+ "price" "1700"
+
+ "crossMinDist" "6.0"
+ "crossDeltaDist" "3.0"
+ "accuracyDivisor" "100"
+ "accuracyMovementPenalty" "1"
+ "accuracyMultiplier" "1"
+ "accuracyAdd" "0.003"
+ "rangeModifier" "0.875"
+ "penetrationPower" "1.0"
+ "bulletStrength" "1.2"
+ "multiplierShots" "1.0"
+ "multiplierStrength" "0.9"
+ "multiplierInaccuracy" "1.0"
+
+ "hudSlot" "0"
+ "hudSlotPos" "4"
+ "weight" "25"
+}
+
+entityDef projectile_ump45
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_ump45_dmg"
+}
+
+entityDef fireInfo_ump45
+{
+ "def_onFire" "projectile_ump45"
+ "ammoType" "ammo_45acp"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.105"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
+
diff --git a/zpak001.pk3dir/def/weapons/usp.def b/zpak001.pk3dir/def/weapons/usp.def
new file mode 100644
index 0000000..60cc9fd
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/usp.def
@@ -0,0 +1,86 @@
+#define USP45_IDLE 0
+#define USP45_SHOOT1 1
+#define USP45_SHOOT2 2
+#define USP45_SHOOT3 3
+#define USP45_SHOOTLAST 4
+#define USP45_RELOAD 5
+#define USP45_DRAW 6
+#define USP45_ADDSIL 7
+#define USP45_IDLEUNSIL 8
+#define USP45_SHOOT1UNSIL 9
+#define USP45_SHOOT2UNSIL 10
+#define USP45_SHOOT3UNSIL 11
+#define USP45_SHOOTLASTUNSIL 12
+#define USP45_RELOADUNSIL 13
+#define USP45_DRAWUNSIL 14
+#define USP45_DETACHSIL 15
+
+entityDef weapon_usp
+{
+ "inherit" "CSBasePistol"
+ "editor_usage" "usp45"
+
+ "model" "models/w_usp.mdl"
+ "model_view" "models/v_usp.mdl"
+
+ "def_fireInfo" "fireInfo_usp45_unsil"
+ "def_altFireInfo" "fireInfo_usp45_sil"
+ "inv_name" "USP .45"
+ "clipSize" "12"
+ "ammoType" "ammo_45acp"
+ "fireRate" ".15"
+ "semiAuto" "1"
+ "ammoRequired" "1"
+
+ "altSilences" "1"
+ "actAddSil" "7"
+ "actDetachSil" "15"
+
+ "crossMinDist" "4"
+ "crossDeltaDist" "4"
+ "accuracyDivisor" "25"
+ "accuracyMovementPenalty" "2.2"
+ "accuracyMultiplier" "1"
+ "rangeModifier" "0.79"
+ "penetrationPower" "1.0"
+ "bulletStrength" "0.625"
+ "multiplierShots" "2.5"
+ "multiplierStrength" "0.5"
+ "multiplierInaccuracy" "0.5"
+
+ // Unsilenced
+ "actDraw" "14"
+ "actIdle" "8"
+ "actFire" "9,10,11"
+ "actFireLast" "12"
+ "actReload" "13"
+ "snd_fire" "Weapon_USP.Single"
+
+ "hudSlot" "1"
+ "hudSlotPos" "0"
+ "weight" "5"
+}
+
+entityDef projectile_usp45
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_usp45_dmg"
+}
+
+entityDef fireInfo_usp45_unsil
+{
+ "def_onFire" "projectile_usp45"
+ "model_flash" "sprites/muzzleflash2.spr"
+}
+
+entityDef fireInfo_usp45_sil
+{
+ "def_onFire" "projectile_usp45"
+ "model_flash" "sprites/muzzleflash2.spr"
+ "actDraw" "6"
+ "actIdle" "0"
+ "actReload" "5"
+ "actFire" "1,2,3"
+ "actFireLast" "4"
+ "snd_fire" "Weapon_USP.SilencedShot"
+}
diff --git a/zpak001.pk3dir/def/weapons/xm1014.def b/zpak001.pk3dir/def/weapons/xm1014.def
new file mode 100644
index 0000000..b1b570c
--- /dev/null
+++ b/zpak001.pk3dir/def/weapons/xm1014.def
@@ -0,0 +1,59 @@
+entityDef weapon_xm1014
+{
+ "inherit" "CSBaseShotgun"
+ "editor_usage" "Benneli XM1014 Weapon - Uses ammo_buckshot"
+
+ "model" "models/w_xm1014.mdl"
+ "model_view" "models/v_xm1014.mdl"
+
+ "inv_name" "Benneli XM1014 Weapon"
+ "def_fireInfo" "fireInfo_xm1014"
+ "clipSize" "7"
+
+ "ammoType" "ammo_buckshot"
+
+ "actFire" "1,2"
+ "actReloadStart" "5"
+ "actReload" "3"
+ "actReloadEnd" "4"
+ "actDraw" "6"
+ "actIdle" "0"
+
+ "snd_fire" "Weapon_XM1014.Single"
+
+ "speed_mod" "0.96"
+ "price" "3000"
+ "crossMinDist" ""
+ "crossDeltaDist" ""
+ "accuracyDivisor" ""
+ "accuracyMovementPenalty" ""
+ "accuracyMultiplier" ""
+ "rangeModifier" ""
+ "penetrationPower" "0"
+ "bulletStrength" ""
+ "multiplierShots" ""
+ "multiplierStrength" ""
+ "multiplierInaccuracy" ""
+
+ "hudSlot" "0"
+ "hudSlotPos" "1"
+ "weight" "20"
+}
+
+entityDef projectile_xm1014
+{
+ "inherit" "projectile_bullet_base"
+ "damage" "skill:plr_xm1014_dmg"
+}
+
+entityDef fireInfo_xm1014
+{
+ "def_onFire" "projectile_xm1014"
+ "ammoType" "ammo_buckshot"
+ "ammoRequired" "1"
+ "ammoPerShot" "1"
+ "fireRate" "0.25"
+ "punchAngle" "-2 0 0"
+ "model_flash" "sprites/muzzleflash2.spr"
+ "numProjectiles" "6"
+}
diff --git a/zpak001.pk3dir/scripts/bots.txt b/zpak001.pk3dir/scripts/bots.txt
new file mode 100644
index 0000000..b127b78
--- /dev/null
+++ b/zpak001.pk3dir/scripts/bots.txt
@@ -0,0 +1,59 @@
+{
+ name nothing
+ funname n0things
+}
+{
+ name goose
+ funname ^2Goose
+}
+{
+ name marco
+ funname "]I[ M4RC0 ]I["
+}
+{
+ name rich
+ funname "Rich"
+}
+{
+ name Getman
+}
+{
+ name pod
+ funname p0d
+}
+{
+ name leet
+ funname ^3l33t
+}
+{
+ name max
+ funname ^4Max^1well
+}
+{
+ name spike
+}
+{
+ name jub
+}
+{
+ name funkyboi
+}
+{
+ name error
+ funname ^1Error
+}
+{
+ name Shazbot
+}
+{
+ name BombGoBoom
+}
+{
+ name SgtMajor
+}
+{
+ name happy_camper
+}
+{
+ name DEViL
+}
\ No newline at end of file
diff --git a/zpak001.pk3dir/scripts/constants.txt b/zpak001.pk3dir/scripts/constants.txt
index 0438b01..e69de29 100644
--- a/zpak001.pk3dir/scripts/constants.txt
+++ b/zpak001.pk3dir/scripts/constants.txt
@@ -1,29 +0,0 @@
-// weapon constants
-WEAPON_NONE 0
-WEAPON_M3 1
-WEAPON_XM1014 2
-WEAPON_MP5 3
-WEAPON_P90 4
-WEAPON_UMP45 5
-WEAPON_MAC10 6
-WEAPON_TMP 7
-WEAPON_AK47 8
-WEAPON_SG552 9
-WEAPON_M4A1 10
-WEAPON_AUG 11
-WEAPON_SCOUT 12
-WEAPON_AWP 13
-WEAPON_G3SG1 14
-WEAPON_SG550 15
-WEAPON_PARA 16
-WEAPON_USP45 17
-WEAPON_GLOCK18 18
-WEAPON_DEAGLE 19
-WEAPON_P228 20
-WEAPON_ELITES 21
-WEAPON_FIVESEVEN 22
-WEAPON_KNIFE 23
-WEAPON_HEGRENADE 24
-WEAPON_FLASHBANG 25
-WEAPON_SMOKEGRENADE 26
-WEAPON_C4BOMB 27
\ No newline at end of file
diff --git a/zpak001.pk3dir/scripts/maptweaks.txt b/zpak001.pk3dir/scripts/maptweaks.txt
new file mode 100644
index 0000000..ebdfb63
--- /dev/null
+++ b/zpak001.pk3dir/scripts/maptweaks.txt
@@ -0,0 +1,6 @@
+// allows you to play Counter-Strike: Source levels (needs hl2 engine plugin)
+css_tweaks
+{
+ replace info_player_counterterrorist info_player_start
+ replace info_player_terrorist info_player_deathmatch
+}
diff --git a/zpak001.pk3dir/scripts/surfaceproperties.txt b/zpak001.pk3dir/scripts/surfaceproperties.txt
new file mode 100644
index 0000000..5c051e2
--- /dev/null
+++ b/zpak001.pk3dir/scripts/surfaceproperties.txt
@@ -0,0 +1,224 @@
+default
+{
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.default"
+ stepleft "step_default.left"
+ stepright "step_default.right"
+ scraperough "scrape.default"
+ scrapesmooth "scrape.default"
+}
+
+gs_material_glass
+{
+ gamematerial Y
+ part_bulletimpact "impact_glass.main"
+ bulletimpact "sfx_impact.glass"
+ stepleft "step_glass.left"
+ stepright "step_glass.right"
+ break "func_breakable.break_glass"
+}
+
+gs_material_wood
+{
+ gamematerial W
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.wood"
+ stepleft "step_wood.left"
+ stepright "step_wood.right"
+ break "func_breakable.break_wood"
+}
+
+gs_material_metal
+{
+ gamematerial M
+ part_bulletimpact "impact_unbreakable.main"
+ bulletimpact "sfx_impact.metal"
+ stepleft "step_metal.left"
+ stepright "step_metal.right"
+ break "func_breakable.break_metal"
+}
+
+gs_material_ladder
+{
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.metal"
+ stepleft "step_ladder.left"
+ stepright "step_ladder.right"
+}
+
+gs_material_flesh
+{
+ gamematerial F
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.flesh"
+ stepleft "step_flesh.left"
+ stepright "step_flesh.right"
+ break "func_breakable.break_flesh"
+}
+
+gs_material_cinderblock
+{
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.concrete"
+ stepleft "step_default.left"
+ stepright "step_default.right"
+ break "func_breakable.break_cinder"
+}
+
+gs_material_tile
+{
+ gamematerial T
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.tile"
+ stepleft "step_tile.left"
+ stepright "step_tile.right"
+ break "func_breakable.break_cinder"
+}
+
+gs_material_computer
+{
+ gamematerial P
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.computer"
+ stepleft "step_computer.left"
+ stepright "step_computer.right"
+ break "func_breakable.break_computer"
+}
+
+gs_material_unbreakableglass
+{
+ part_bulletimpact "impact_unbreakable.main"
+ bulletimpact "sfx_impact.glass"
+ stepleft "step_glass.left"
+ stepright "step_glass.right"
+ break "func_breakable.break_glass"
+}
+
+gs_material_rocks
+{
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.concrete"
+ stepleft "step_default.left"
+ stepright "step_default.right"
+ break "func_breakable.break_cinder"
+}
+
+gs_material_flesh
+{
+ gamematerial F
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.flesh"
+ stepleft "step_flesh.left"
+ stepright "step_flesh.right"
+ break "func_breakable.break_flesh"
+}
+
+gs_material_concrete
+{
+ gamematerial C
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.concrete"
+ stepleft "step_concrete.left"
+ stepright "step_concrete.right"
+ break "func_breakable.break_cinder"
+}
+
+gs_material_dirt
+{
+ gamematerial D
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.dirt"
+ stepleft "step_dirt.left"
+ stepright "step_dirt.right"
+ break "func_breakable.break_rocks"
+}
+
+gs_material_grate
+{
+ gamematerial G
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.grate"
+ stepleft "step_grate.left"
+ stepright "step_grate.right"
+ break "func_breakable.break_metal"
+}
+
+gs_material_alien
+{
+ gamematerial H
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.alien"
+ stepleft "step_alien.left"
+ stepright "step_alien.right"
+ break "func_breakable.break_flesh"
+}
+
+gs_material_snow
+{
+ gamematerial K
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.snow"
+ stepleft "step_snow.left"
+ stepright "step_snow.right"
+}
+
+gs_material_sand
+{
+ gamematerial N
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.sand"
+ stepleft "step_sand.left"
+ stepright "step_sand.right"
+}
+
+gs_material_foliage
+{
+ gamematerial O
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.foliage"
+ stepleft "step_foliage.left"
+ stepright "step_foliage.right"
+}
+
+gs_material_slosh
+{
+ gamematerial S
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.slosh"
+ stepleft "step_slosh.left"
+ stepright "step_slosh.right"
+}
+
+gs_material_vent
+{
+ gamematerial V
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.snow"
+ stepleft "step_vent.left"
+ stepright "step_vent.right"
+ break "func_breakable.break_metal"
+}
+
+water
+{
+ part_bulletimpact "fx_impact.water"
+ bulletimpact "sfx_impact.slosh"
+ stepleft "step_slosh.left"
+ stepright "step_slosh.right"
+}
+
+lava
+{
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.slosh"
+ stepleft "step_slosh.left"
+ stepright "step_slosh.right"
+}
+
+slime
+{
+ part_bulletimpact "impact_default.main"
+ bulletimpact "sfx_impact.slosh"
+ stepleft "step_slosh.left"
+ stepright "step_slosh.right"
+}
\ No newline at end of file
diff --git a/zpak001.pk3dir/sound/player.sndshd b/zpak001.pk3dir/sound/player.sndshd
index 01661d6..361afd2 100644
--- a/zpak001.pk3dir/sound/player.sndshd
+++ b/zpak001.pk3dir/sound/player.sndshd
@@ -134,4 +134,9 @@ Player.Swim
sample player/pl_swim2.wav
sample player/pl_swim3.wav
sample player/pl_swim4.wav
+}
+
+Player.PickupWeapon
+{
+ sample items/gunpickup2.wav
}
\ No newline at end of file
diff --git a/zpak001.pk3dir/sound/weapons_cstrike.sndshd b/zpak001.pk3dir/sound/weapons_cstrike.sndshd
index 5067656..f27cff4 100644
--- a/zpak001.pk3dir/sound/weapons_cstrike.sndshd
+++ b/zpak001.pk3dir/sound/weapons_cstrike.sndshd
@@ -1,42 +1,52 @@
-weapon_ak47.fire
+Default.ClipEmpty_Rifle
+{
+ sample weapons/dryfire_rifle.wav
+}
+
+Default.ClipEmpty_Pistol
+{
+ sample weapons/dryfire_pistol.wav
+}
+
+Weapon_AK47.Single
{
sample weapons/ak47-1.wav
sample weapons/ak47-2.wav
}
-weapon_aug.fire
+Weapon_AUG.Single
{
sample weapons/aug-1.wav
}
-weapon_awp.fire
+Weapon_AWP.Single
{
sample weapons/awp1.wav
}
-weapon_awp.zoom
+Default.Zoom
{
sample weapons/zoom.wav
}
-weapon_c4bomb.disarm
+c4.disarmstart
{
attenuation none
sample weapons/c4_disarm.wav
}
-weapon_c4bomb.disarmed
+c4.disarmfinish
{
sample weapons/c4_disarmed.wav
}
-weapon_c4bomb.explode
+c4.explode
{
attenuation none
sample weapons/c4_explode1.wav
}
-weapon_c4bomb.plant
+c4.plant
{
sample weapons/c4_plant.wav
}
@@ -67,19 +77,19 @@ weapon_c4bomb.beep5
sample weapons/c4_beep5.wav
}
-weapon_deagle.fire
+Weapon_DEagle.Single
{
sample weapons/deagle-1.wav
sample weapons/deagle-2.wav
}
-weapon_elites.fire
+Weapon_ELITE.Single
{
sample weapons/elite_fire.wav
sample weapons/elite_fire.wav
}
-weapon_fiveseven.fire
+Weapon_FiveSeven.Single
{
sample weapons/fiveseven-1.wav
}
@@ -89,17 +99,27 @@ weapon_flashbang.explode
sample weapons/flashbang-1.wav
}
-weapon_g3sg1.fire
+Weapon_FAMAS.Single
+{
+ sample weapons/famas-1.wav
+}
+
+Weapon_G3SG1.Single
{
sample weapons/g3sg1-1.wav
}
-weapon_glock18.fire
+Weapon_Galil.Single
+{
+ sample weapons/galil-1.wav
+}
+
+Weapon_Glock.Single
{
sample weapons/glock18-2.wav
}
-weapon_glock18.burstfire
+Weapon_Glock.Burst
{
sample weapons/glock18-1.wav
}
@@ -140,12 +160,12 @@ weapon_flashbang.explode
sample weapons/flashbang-2.wav
}
-weapon_knife.hit
+Weapon_Knife.HitWall
{
sample weapons/knife_hitwall1.wav
}
-weapon_knife.hitbody
+Weapon_Knife.Hit
{
sample weapons/knife_hit1.wav
sample weapons/knife_hit2.wav
@@ -153,70 +173,69 @@ weapon_knife.hitbody
sample weapons/knife_hit4.wav
}
-weapon_knife.hithard
+Weapon_Knife.Stab
{
sample weapons/knife_stab.wav
}
-weapon_knife.miss
+Weapon_Knife.Slash
{
sample weapons/knife_slash1.wav
}
-weapon_m3.fire
+Weapon_M3.Single
{
sample weapons/m3-1.wav
}
-weapon_m4a1.fire
+Weapon_M4A1.Single
{
sample weapons/m4a1_unsil-1.wav
sample weapons/m4a1_unsil-2.wav
}
-weapon_m4a1.silenced
+Weapon_M4A1.Silenced
{
sample weapons/m4a1-1.wav
}
-weapon_mac10.fire
+Weapon_MAC10.Single
{
sample weapons/mac10-1.wav
}
-weapon_mp5.fire
+Weapon_MP5Navy.Single
{
sample weapons/mp5-1.wav
}
-weapon_p228.fire
+Weapon_P228.Single
{
sample weapons/p228-1.wav
}
-weapon_p90.fire
+Weapon_P90.Single
{
sample weapons/p90-1.wav
}
-
-weapon_para.fire
+Weapon_M249.Single
{
sample weapons/m249-1.wav
sample weapons/m249-2.wav
}
-weapon_scout.fire
+Weapon_Scout.Single
{
sample weapons/scout_fire-1.wav
}
-weapon_sg550.fire
+Weapon_SG550.Single
{
sample weapons/sg550-1.wav
}
-weapon_sg552.fire
+Weapon_SG552.Single
{
sample weapons/sg552-1.wav
}
@@ -226,34 +245,34 @@ weapon_smokegrenade.explode
sample weapons/sg_explode.wav
}
-weapon_tmp.fire
+Weapon_TMP.Single
{
sample weapons/tmp-1.wav
sample weapons/tmp-2.wav
}
-weapon_ump45.fire
+Weapon_UMP45.Single
{
sample weapons/ump45-1.wav
}
-weapon_usp45.fire
+Weapon_USP.Single
{
sample weapons/usp_unsil-1.wav
}
-weapon_usp45.silenced
+Weapon_USP.SilencedShot
{
sample weapons/usp1.wav
sample weapons/usp2.wav
}
-weapon_xm1014.fire
+Weapon_XM1014.Single
{
sample weapons/xm1014-1.wav
}
-weapon_xm1014.insertshell
+Weapon_XM1014.InsertShell
{
sample weapons/m3_insertshell.wav
}