diff --git a/src/client/cstrike/defs.h b/src/client/cstrike/defs.h index ac339819..fd1204ca 100644 --- a/src/client/cstrike/defs.h +++ b/src/client/cstrike/defs.h @@ -15,3 +15,4 @@ */ void Cstrike_DrawCrosshair(void); +void Cstrike_DrawSimpleCrosshair(); diff --git a/src/gs-entbase/server/trigger_camera.cpp b/src/gs-entbase/server/trigger_camera.cpp index bfa60aaa..81271935 100644 --- a/src/gs-entbase/server/trigger_camera.cpp +++ b/src/gs-entbase/server/trigger_camera.cpp @@ -37,7 +37,7 @@ void trigger_camera::Trigger(void) entity e = find(world, CBaseTrigger::m_strTargetName, m_strTarget); if (e) { angles = vectoangles(e.origin - origin); - angles[0] *= -1; + //angles[0] *= -1; } } diff --git a/src/server/cstrike/armoury_entity.cpp b/src/server/cstrike/armoury_entity.cpp index 0a59488c..2f63aca5 100644 --- a/src/server/cstrike/armoury_entity.cpp +++ b/src/server/cstrike/armoury_entity.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2019 Marco Hladik + * Copyright (c) 2016-2020 Marco Hladik * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -14,9 +14,46 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +/*QUAKED armoury_entity (0 0 0.8) (-16 -16 0) (16 16 16) +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. +"item" Which weapon/equipment this item will contain +"count" How many of said item will players be able to pick up from this + +COUNTER-STRIKE (1999) ENTITY + +Items in the armoury. + +An item oriented entity that contains one or more weapon/equipment item +for players to pick up. It's limited to early Counter-Strike weapons, as +it was never updated in newer versions to add support for newly added ones. + +List of available items: + 0 = H&K MP5-Navy + 1 = Steyr Tactical (TMP) + 2 = FN P90 + 3 = Ingram MAC-10 + 4 = AK-47 + 5 = Sig SG-552 Commando + 6 = Colt M4A1 Carbine + 7 = Steyr AUG + 8 = Steyr Scout + 9 = H&K G3/SG-1 + 10 = AI Arctic Warfare/Magnum + 11 = Benneli M3 Super90 + 12 = Benneli XM1014 + 13 = FN M249 Para + 14 = Flashbang Grenade + 15 = HE Grenade + 16 = Kevlar + 17 = Kevlar + Helmet + 18 = Smoke Grenade +*/ + var int autocvar_fcs_nopickups = FALSE; -int iArmouryItems[19] = { +int g_cstrike_armouryitems[19] = { WEAPON_MP5, WEAPON_TMP, WEAPON_P90, @@ -33,8 +70,8 @@ int iArmouryItems[19] = { WEAPON_PARA, WEAPON_FLASHBANG, WEAPON_HEGRENADE, - EQUIPMENT_KEVLAR, - EQUIPMENT_HELMET, + 0,/*EQUIPMENT_KEVLAR,*/ + 0,/*EQUIPMENT_HELMET,*/ WEAPON_SMOKEGRENADE }; @@ -71,12 +108,6 @@ class armoury_entity:CBaseEntity virtual void() Respawn; }; -int -amoury_entity_pickup(armoury_entity item, entity player) -{ - -} - void armoury_entity::touch(void) { @@ -84,11 +115,16 @@ armoury_entity::touch(void) return; } - if (amoury_entity_pickup(this, other)) { - m_iLeft--; - if (m_iLeft <= 0) { - Hide(); - } + if (Weapons_AddItem((player)other, m_iItem) == FALSE) { + return; + } + + Logging_Pickup(other, this, __NULL__); + sound(other, CHAN_ITEM, "items/gunpickup2.wav", 1, ATTN_NORM); + + m_iLeft--; + if (m_iLeft <= 0) { + Hide(); } } @@ -109,6 +145,8 @@ armoury_entity::armoury_entity(void) remove(this); return; } + + m_iCount = 1; for (int i = 1; i < (tokenize(__fullspawndata) - 1); i += 2) { switch (argv(i)) { @@ -116,7 +154,7 @@ armoury_entity::armoury_entity(void) m_iCount = stoi(argv(i + 1)); break; case "item": - m_iItem = iArmouryItems[stoi(argv(i + 1))]; + m_iItem = g_cstrike_armouryitems[stoi(argv(i + 1))]; model = sArmouryModels[m_iItem]; break; default: @@ -124,7 +162,5 @@ armoury_entity::armoury_entity(void) } } - precache_model(model); CBaseEntity::CBaseEntity(); - armoury_entity::Respawn(); } diff --git a/src/server/cstrike/defs.h b/src/server/cstrike/defs.h new file mode 100644 index 00000000..17e24d3a --- /dev/null +++ b/src/server/cstrike/defs.h @@ -0,0 +1,18 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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. + */ + +var int g_cstrike_buying = 0; +var float g_cstrike_bombradius = 500; diff --git a/src/server/cstrike/func_bomb_target.cpp b/src/server/cstrike/func_bomb_target.cpp new file mode 100644 index 00000000..8ef99558 --- /dev/null +++ b/src/server/cstrike/func_bomb_target.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 func_bomb_target (0 .5 .8) ? +"targetname" Name +"target" Target when bomb blows up. +"killtarget" Target to kill when triggered. + +COUNTER-STRIKE (1999) ENTITY + +Bomb target zone. + +Used in the bomb defusal mode (de_* maps). +Once the bomb explodes inside this volume, it'll trigger its targets. +*/ + +class func_bomb_target:CBaseTrigger +{ + +}; diff --git a/src/server/cstrike/func_buyzone.cpp b/src/server/cstrike/func_buyzone.cpp new file mode 100644 index 00000000..55a23da5 --- /dev/null +++ b/src/server/cstrike/func_buyzone.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 func_buyzone (0 .5 .8) ? +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. +"team" Limits the buyzone to be used by set team. + +COUNTER-STRIKE (1999) ENTITY + +Buy zone. + +The buyzone is a brush volume that upon creation forces players of set team +to buy weapons in its designated area. +If this entity is not present, the game will automatically spawn buyzones +around each player spawn, unless prevented using a setting inside the +info_map_parameters entity. + +Info about automatically generated buyzones: +If no func_buyzone exists, the game will create one buyzone volume with a total +width of 256 units (radius thus being 128 units) on every player spawn point. + +Choices for 'team' include: + 0 = All teams + 1 = Terrorist + 2 = Counter-Terrorist +*/ + +class func_buyzone:CBaseTrigger +{ + +}; diff --git a/src/server/cstrike/func_escapezone.cpp b/src/server/cstrike/func_escapezone.cpp new file mode 100644 index 00000000..520ba40a --- /dev/null +++ b/src/server/cstrike/func_escapezone.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 func_escapezone (0 .5 .8) ? +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. + +COUNTER-STRIKE (1999) ENTITY + +Terrorist escape zone. + +Used in the Escape mode (es_* maps). +*/ + +class func_escapezone:CBaseTrigger +{ + +}; diff --git a/src/server/cstrike/func_hostage_rescue.cpp b/src/server/cstrike/func_hostage_rescue.cpp new file mode 100644 index 00000000..405b73ad --- /dev/null +++ b/src/server/cstrike/func_hostage_rescue.cpp @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 func_hostage_rescue (0 .5 .8) ? +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. + +COUNTER-STRIKE (1999) ENTITY + +Hostage rescue zone. + +Used in the Hostage Rescue mode (cs_* maps). +If neither a func_hostage_rescue or a info_hostage_rescue is placed, +zones will be placed in Counter-Terrorist player spawn nodes automatically. +*/ + +class func_hostage_rescue:CBaseTrigger +{ + +}; diff --git a/src/server/cstrike/func_vip_safetyzone.cpp b/src/server/cstrike/func_vip_safetyzone.cpp new file mode 100644 index 00000000..cdcc11b6 --- /dev/null +++ b/src/server/cstrike/func_vip_safetyzone.cpp @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 func_vip_safetyzone (0 .5 .8) ? +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. + +COUNTER-STRIKE (1999) ENTITY + +VIP safety zone. + +Used in the assassination mode (as_* maps). +*/ + +class func_vip_safetyzone:CBaseTrigger +{ + +}; diff --git a/src/server/cstrike/hostage_entity.cpp b/src/server/cstrike/hostage_entity.cpp new file mode 100644 index 00000000..bd787e88 --- /dev/null +++ b/src/server/cstrike/hostage_entity.cpp @@ -0,0 +1,193 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 hostage_entity (0 1 0) (-16 -16 0) (16 16 72) +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. +"model" "models/hostage.mdl" +"skin" "0" + +COUNTER-STRIKE (1999) ENTITY + +Hostage NPC. + +Used in the Hostage Rescue mode (cs_* maps). + +*/ + +enum { + HOSA_WALK, + HOSA_WALKSCARED, + HOSA_RUN, + HOSA_RUNSCARED, + HOSA_RUNLOOK, + HOSA_180LEFT, + HOSA_180RIGHT, + HOSA_FLINCH, + HOSA_PAIN, + HOSA_PAINLEFT, + HOSA_PAINRIGHT, + HOSA_PAINLEGLEFT, + HOSA_PAINLEGRIGHT, + HOSA_IDLE1, + HOSA_IDLE2, + HOSA_IDLE3, + HOSA_IDLE4, + HOSA_IDLE5, + HOSA_IDLE6, + HOSA_SCARED_END, + HOSA_SCARED1, + HOSA_SCARED2, + HOSA_SCARED3, + HOSA_SCARED4, + HOSA_PANIC, + HOSA_FEAR1, + HOSA_FEAR2, + HOSA_CRY, + HOSA_SCI1, + HOSA_SCI2, + HOSA_SCI3, + HOSA_DIE_SIMPLE, + HOSA_DIE_FORWARD1, + HOSA_DIE_FORWARD2, + HOSA_DIE_BACKWARD, + HOSA_DIE_HEADSHOT, + HOSA_DIE_GUTSHOT, + HOSA_LYING1, + HOSA_LYING2, + HOSA_DEADSIT, + HOSA_DEADTABLE1, + HOSA_DEADTABLE2, + HOSA_DEADTABLE3 +}; + +class hostage_entity:CBaseNPC +{ + void() hostage_entity; + + virtual void() Respawn; + virtual void() PlayerUse; + virtual void(int) Pain; + virtual void(int) Death; + virtual int() AnimIdle; + virtual int() AnimWalk; + virtual int() AnimRun; +}; + +int +hostage_entity::AnimIdle(void) +{ + return HOSA_IDLE1; +} + +int +hostage_entity::AnimWalk(void) +{ + return HOSA_WALK; +} + +int +hostage_entity::AnimRun(void) +{ + return HOSA_RUN; +} + +void +hostage_entity::PlayerUse(void) +{ + if (team == 1) { + return; + } + + if (m_eFollowing == world) + Sound_Speak(this, "hostage_entity.follow"); + + CBaseNPC::PlayerUse(); +} + +void +hostage_entity::Pain(int iHitBody) +{ + WarnAllies(); + + if (m_flAnimTime > time) { + return; + } + + if (random() < 0.25f) { + return; + } + + frame = HOSA_FLINCH; + m_iFlags |= MONSTER_FEAR; + m_flAnimTime = time + 0.25f; +} + +void +hostage_entity::Death(int iHitBody) +{ + WarnAllies(); + + if (style != MONSTER_DEAD) { + frame = HOSA_DIE_SIMPLE + floor(random(0, 6)); + style = MONSTER_DEAD; + } + + /* now mark our state as 'dead' */ + CBaseNPC::Death(iHitBody); +} + +void +hostage_entity::Respawn(void) +{ + CBaseNPC::Respawn(); + m_iFlags |= MONSTER_CANFOLLOW; +} + +void +hostage_entity::hostage_entity(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 = ""; + + model = "models/hostage.mdl"; + netname = "Hostage"; + base_health = 100; + base_mins = [-16,-16,0]; + base_maxs = [16,16,72]; + CBaseNPC::CBaseNPC(); +} diff --git a/src/server/cstrike/info_hostage_rescue.cpp b/src/server/cstrike/info_hostage_rescue.cpp new file mode 100644 index 00000000..2812489f --- /dev/null +++ b/src/server/cstrike/info_hostage_rescue.cpp @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 info_hostage_rescue (0 0 0.8) (-16 -16 0) (16 16 16) +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. + +COUNTER-STRIKE (1999) ENTITY + +Hostage rescue point. + +Used in the Hostage Rescue mode (cs_* maps). +Creates a volume around itself with a radius of 128 units. +If neither a info_hostage_rescue or a func_hostage_rescue is placed, +zones will be placed in Counter-Terrorist player spawn nodes automatically. +*/ + +class info_hostage_rescue +{ + void() info_hostage_rescue; +}; + +void +info_hostage_rescue::info_hostage_rescue(void) +{ + +} diff --git a/src/server/cstrike/info_map_parameters.cpp b/src/server/cstrike/info_map_parameters.cpp new file mode 100644 index 00000000..2b4e18b7 --- /dev/null +++ b/src/server/cstrike/info_map_parameters.cpp @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2016-2020 Marco Hladik + * + * 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 info_map_parameters (0 0 0.8) (-16 -16 0) (16 16 16) +"targetname" Name +"target" Target when triggered. +"killtarget" Target to kill when triggered. +"buying" Override for buy-behaviour. +"bombradius" Overrides the default bomb radius. + +COUNTER-STRIKE (1999) ENTITY + +Miscellaneous mapping parameters. + +Choices for 'buying': + 0 = Both teams can buy items + 1 = Only Counter-Terrorists can buy items + 2 = Only Terrorists can buy items + 3 = Neither Counter-Terrorists nor Terrorists can buy items +*/ + +class info_map_parameters +{ + void() info_map_parameters; +}; + +void +info_map_parameters::info_map_parameters(void) +{ + for (int i = 1; i < (tokenize(__fullspawndata) - 1); i += 2) { + switch (argv(i)) { + case "buying": + g_cstrike_buying = stoi(argv(i + 1)); + break; + case "bombradius": + g_cstrike_bombradius = stof(argv(i + 1)); + break; + default: + break; + } + } +} diff --git a/src/server/cstrike/progs.src b/src/server/cstrike/progs.src index 20ce6646..e242cebe 100755 --- a/src/server/cstrike/progs.src +++ b/src/server/cstrike/progs.src @@ -15,6 +15,7 @@ ../../shared/sound.c ../../shared/valve/animations.h ../defs.h +../cstrike/defs.h ../plugins.c ../logging.c ../nodes.c @@ -66,6 +67,15 @@ ../valve/items.cpp ../../shared/valve/weapon_common.c +../cstrike/armoury_entity.cpp +../cstrike/func_bomb_target.cpp +../cstrike/func_buyzone.cpp +../cstrike/func_escapezone.cpp +../cstrike/func_hostage_rescue.cpp +../cstrike/func_vip_safetyzone.cpp +../cstrike/hostage_entity.cpp +../cstrike/info_hostage_rescue.cpp +../cstrike/info_map_parameters.cpp ../cstrike/item_suit.cpp ../spawn.c diff --git a/src/server/defs.h b/src/server/defs.h index 0d614013..61157072 100644 --- a/src/server/defs.h +++ b/src/server/defs.h @@ -60,5 +60,6 @@ enumflags GF_USE_RELEASED, GF_IN_VEHICLE, GF_FROZEN, - GF_SEMI_TOGGLED + GF_SEMI_TOGGLED, + GF_GAMESTARTS }; diff --git a/src/shared/cstrike/w_ak47.c b/src/shared/cstrike/w_ak47.c index c8f6dd45..b5320a4d 100644 --- a/src/shared/cstrike/w_ak47.c +++ b/src/shared/cstrike/w_ak47.c @@ -14,6 +14,19 @@ * 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) +"model" "models/w_ak47.mdl" + +COUNTER-STRIKE (1999) ENTITY + +AK-47 Weapon + +- Buy Menu - +Price: $2500 +Terrorists only weapon + +*/ + enum { AK47_IDLE, AK47_RELOAD, diff --git a/src/shared/cstrike/w_aug.c b/src/shared/cstrike/w_aug.c index 048eb914..07f2d149 100644 --- a/src/shared/cstrike/w_aug.c +++ b/src/shared/cstrike/w_aug.c @@ -14,6 +14,19 @@ * 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) +"model" "models/w_aug.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Steyr AUG Weapon + +- Buy Menu - +Price: $3500 +Counter-Terrorists only weapon + +*/ + enum { AUG_IDLE, AUG_RELOAD, @@ -144,10 +157,30 @@ w_aug_primary(void) break; } - pl.w_attack_next = 0.0825f; + 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(void) +{ + player pl = (player)self; + 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(void) { @@ -191,7 +224,12 @@ void w_aug_hud(void) { #ifdef CSQC - Cstrike_DrawCrosshair(); + player pl = (player)self; + 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]; @@ -240,7 +278,7 @@ weapon_t w_aug = w_aug_draw, __NULL__, w_aug_primary, - __NULL__, + w_aug_secondary, w_aug_reload, w_cstrike_weaponrelease, w_aug_hud, diff --git a/src/shared/cstrike/w_awp.c b/src/shared/cstrike/w_awp.c index 87ec1eb3..ab824b48 100644 --- a/src/shared/cstrike/w_awp.c +++ b/src/shared/cstrike/w_awp.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_awp.mdl" + +COUNTER-STRIKE (1999) ENTITY + +AWP (AI Arctic Warfare/Magnum) Weapon + +- Buy Menu - +Price: $4750 + +*/ + enum { AWP_IDLE, AWP_SHOOT1, diff --git a/src/shared/cstrike/w_c4bomb.c b/src/shared/cstrike/w_c4bomb.c index 40429043..be0cae12 100644 --- a/src/shared/cstrike/w_c4bomb.c +++ b/src/shared/cstrike/w_c4bomb.c @@ -14,13 +14,32 @@ * 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) +"model" "models/w_c4bomb.mdl" + +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. + +*/ + enum { - C4BOMB_IDLE, - C4BOMB_RELOAD, - C4BOMB_DRAW, - C4BOMB_SHOOT1, - C4BOMB_SHOOT2, - C4BOMB_SHOOT3 + C4_IDLE, + C4_DRAW, + C4_DROP, + C4_ENTERCODE +}; + +enum { + C4S_NONE, + C4S_ENTERINGCODE, + C4S_DROPPING, + C4S_DONE }; void @@ -32,29 +51,29 @@ w_c4bomb_precache(void) Sound_Precache("weapon_c4bomb.explode"); Sound_Precache("weapon_c4bomb.plant"); #endif - precache_model("models/v_c4bomb.mdl"); - precache_model("models/w_c4bomb.mdl"); - precache_model("models/p_c4bomb.mdl"); + precache_model("models/v_c4.mdl"); + precache_model("models/w_c4.mdl"); + precache_model("models/p_c4.mdl"); } void w_c4bomb_updateammo(player pl) { #ifdef SSQC - Weapons_UpdateAmmo(pl, -1, -1, -1); + Weapons_UpdateAmmo(pl, pl.a_ammo1, pl.a_ammo2, pl.a_ammo3); #endif } string w_c4bomb_wmodel(void) { - return "models/w_c4bomb.mdl"; + return "models/w_c4.mdl"; } string w_c4bomb_pmodel(void) { - return "models/p_c4bomb.mdl"; + return "models/p_c4.mdl"; } string @@ -65,42 +84,63 @@ w_c4bomb_deathmsg(void) void w_c4bomb_draw(void) +{ + Weapons_SetModel("models/v_c4.mdl"); + Weapons_ViewAnimation(C4_DRAW); +} + +void +w_c4bomb_release(void) { player pl = (player)self; -#ifdef CSQC - Weapons_SetModel("models/v_c4bomb.mdl"); - Weapons_ViewAnimation(C4BOMB_DRAW); + + if (pl.a_ammo1 == C4S_DROPPING) { + if (pl.w_idle_next <= 0.0f) { + pl.a_ammo1 = C4S_DONE; +#ifdef SSQC + Weapons_RemoveItem(pl, WEAPON_C4BOMB); #endif + } + return; + } + + /* reset animation */ + if (pl.a_ammo1 != C4S_NONE) { + Weapons_ViewAnimation(C4_IDLE); + } + pl.a_ammo1 = C4S_NONE; + pl.w_idle_next = 0.0f; + pl.flags &= ~FL_FROZEN; } void w_c4bomb_primary(void) { player pl = (player)self; + + pl.flags |= FL_FROZEN; - if (pl.w_attack_next > 0.0) { - return; - } - -#ifdef CSQC - View_SetMuzzleflash(MUZZLE_RIFLE); - Weapons_ViewPunchAngle([-2,0,0]); - - int r = (float)input_sequence % 3; - switch (r) { - case 0: - Weapons_ViewAnimation(C4BOMB_SHOOT1); - break; - case 1: - Weapons_ViewAnimation(C4BOMB_SHOOT2); - break; + switch (pl.a_ammo1) { + case C4S_NONE: + pl.a_ammo1 = C4S_ENTERINGCODE; + Weapons_ViewAnimation(C4_ENTERCODE); + pl.w_idle_next = 3.0f; + break; + case C4S_ENTERINGCODE: + if (pl.w_idle_next <= 0.0f) { + pl.a_ammo1 = C4S_DROPPING; + Weapons_ViewAnimation(C4_DROP); + pl.w_idle_next = 1.0f; + } + break; + case C4S_DROPPING: + w_c4bomb_release(); + break; default: - Weapons_ViewAnimation(C4BOMB_SHOOT3); break; } -#endif - pl.w_attack_next = 0.0955f; + pl.w_attack_next = 0.0f; } float @@ -113,7 +153,6 @@ void w_c4bomb_hud(void) { #ifdef CSQC - Cstrike_DrawCrosshair(); HUD_DrawAmmo2(); vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42]; drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [96/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE); @@ -163,7 +202,7 @@ weapon_t w_c4bomb = w_c4bomb_primary, __NULL__, __NULL__, - __NULL__, + w_c4bomb_release, w_c4bomb_hud, w_c4bomb_precache, __NULL__, diff --git a/src/shared/cstrike/w_deagle.c b/src/shared/cstrike/w_deagle.c index 23926cfa..4e65119d 100644 --- a/src/shared/cstrike/w_deagle.c +++ b/src/shared/cstrike/w_deagle.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_deagle.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Desert Eagle .50 AE Weapon + +- Buy Menu - +Price: $650 + +*/ + enum { DEAGLE_IDLE, DEAGLE_SHOOT1, diff --git a/src/shared/cstrike/w_elites.c b/src/shared/cstrike/w_elites.c index f7e94bca..24c219b0 100644 --- a/src/shared/cstrike/w_elites.c +++ b/src/shared/cstrike/w_elites.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_elite.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Dual Beretta 96G (Elites) Weapon + +- Buy Menu - +Price: $1000 + +*/ + enum { ELITES_IDLE, ELITES_IDLE_LEFTEMPTY, diff --git a/src/shared/cstrike/w_fiveseven.c b/src/shared/cstrike/w_fiveseven.c index 6b3adcea..5488b7e2 100644 --- a/src/shared/cstrike/w_fiveseven.c +++ b/src/shared/cstrike/w_fiveseven.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_fiveseven.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Five-SeveN Weapon + +- Buy Menu - +Price: $750 + +*/ + enum { FIVESEVEN_IDLE, FIVESEVEN_SHOOT1, diff --git a/src/shared/cstrike/w_flashbang.c b/src/shared/cstrike/w_flashbang.c index 4e390832..40b57884 100644 --- a/src/shared/cstrike/w_flashbang.c +++ b/src/shared/cstrike/w_flashbang.c @@ -14,6 +14,20 @@ * 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) +"model" "models/w_flashbang.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Concussion (Flashbang) Grenade Weapon + +When thrown, nearby players become blinded temporarily from the blast. + +- Buy Menu - +Price: $200 + +*/ + enum { FLASHBANG_IDLE, FLASHBANG_RELOAD, diff --git a/src/shared/cstrike/w_g3sg1.c b/src/shared/cstrike/w_g3sg1.c index 08e97375..ac01694b 100644 --- a/src/shared/cstrike/w_g3sg1.c +++ b/src/shared/cstrike/w_g3sg1.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_g3sg1.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Heckler & Koch G3/SG-1 Weapon + +- Buy Menu - +Price: $5000 + +*/ + enum { G3SG1_IDLE, G3SG1_SHOOT1, diff --git a/src/shared/cstrike/w_glock18.c b/src/shared/cstrike/w_glock18.c index ea311400..ebf07ace 100644 --- a/src/shared/cstrike/w_glock18.c +++ b/src/shared/cstrike/w_glock18.c @@ -14,6 +14,20 @@ * 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) +"model" "models/w_glock18.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Glock 18 Select Fire Weapon + +Default arsenal for Terrorists + +- Buy Menu - +Price: $400 + +*/ + enum { GLOCK_IDLE1, GLOCK_IDLE2, diff --git a/src/shared/cstrike/w_hegrenade.c b/src/shared/cstrike/w_hegrenade.c index 3b4ef8bb..ae164540 100644 --- a/src/shared/cstrike/w_hegrenade.c +++ b/src/shared/cstrike/w_hegrenade.c @@ -14,6 +14,20 @@ * 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) +"model" "models/w_hegrenade.mdl" + +COUNTER-STRIKE (1999) ENTITY + +HE (High Explosive) Grenade Weapon + +When thrown, explodes with a fairly deadly blast radius to players. + +- Buy Menu - +Price: $300 + +*/ + enum { HEGRENADE_IDLE, HEGRENADE_RELOAD, diff --git a/src/shared/cstrike/w_knife.c b/src/shared/cstrike/w_knife.c index 2c1c168a..3d8e148e 100644 --- a/src/shared/cstrike/w_knife.c +++ b/src/shared/cstrike/w_knife.c @@ -14,6 +14,17 @@ * 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) +"model" "models/w_knife.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Knife Weapon + +Default arsenal on both teams + +*/ + enum { KNIFE_IDLE, KNIFE_RELOAD, diff --git a/src/shared/cstrike/w_m3.c b/src/shared/cstrike/w_m3.c index 7fe5f07b..46939a63 100644 --- a/src/shared/cstrike/w_m3.c +++ b/src/shared/cstrike/w_m3.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_m3.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Benneli M3 Super90 Weapon + +- Buy Menu - +Price: $1700 + +*/ + enum { M3_IDLE, M3_SHOOT1, diff --git a/src/shared/cstrike/w_m4a1.c b/src/shared/cstrike/w_m4a1.c index e54c4c46..9f7317ba 100644 --- a/src/shared/cstrike/w_m4a1.c +++ b/src/shared/cstrike/w_m4a1.c @@ -14,6 +14,19 @@ * 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) +"model" "models/w_m4a1.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Colt M4A1 Carbine Weapon + +- Buy Menu - +Price: $3100 +Counter-Terrorists only weapon + +*/ + enum { M4A1_IDLE, M4A1_SHOOT1, diff --git a/src/shared/cstrike/w_mac10.c b/src/shared/cstrike/w_mac10.c index 0c74e40b..b69ed358 100644 --- a/src/shared/cstrike/w_mac10.c +++ b/src/shared/cstrike/w_mac10.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_mac10.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Ingram MAC-10 Weapon + +- Buy Menu - +Price: $1400 + +*/ + enum { MAC10_IDLE, MAC10_RELOAD, diff --git a/src/shared/cstrike/w_mp5.c b/src/shared/cstrike/w_mp5.c index 8b219907..b1aa1cb7 100644 --- a/src/shared/cstrike/w_mp5.c +++ b/src/shared/cstrike/w_mp5.c @@ -14,6 +14,18 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +/*QUAKED weapon_mp5 (0 0 1) (-16 -16 0) (16 16 32) +"model" "models/w_mp5.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Heckler & Koch MP5-Navy Weapon + +- Buy Menu - +Price: $1500 + +*/ + enum { MP5_IDLE, MP5_RELOAD, diff --git a/src/shared/cstrike/w_p228.c b/src/shared/cstrike/w_p228.c index 57e5ac43..d9c4927f 100644 --- a/src/shared/cstrike/w_p228.c +++ b/src/shared/cstrike/w_p228.c @@ -14,6 +14,18 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +/*QUAKED weapon_ (0 0 1) (-16 -16 0) (16 16 32) +"model" "models/w_p228.mdl" + +COUNTER-STRIKE (1999) ENTITY + +SIG P228 Weapon + +- Buy Menu - +Price: $600 + +*/ + enum { P228_IDLE, P228_SHOOT1, diff --git a/src/shared/cstrike/w_p90.c b/src/shared/cstrike/w_p90.c index a2cdd105..aa59ffdd 100644 --- a/src/shared/cstrike/w_p90.c +++ b/src/shared/cstrike/w_p90.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_p90.mdl" + +COUNTER-STRIKE (1999) ENTITY + +FN P90 Weapon + +- Buy Menu - +Price: $2350 + +*/ + enum { P90_IDLE, P90_RELOAD, diff --git a/src/shared/cstrike/w_para.c b/src/shared/cstrike/w_para.c index 412c0b5f..bc843851 100644 --- a/src/shared/cstrike/w_para.c +++ b/src/shared/cstrike/w_para.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_m249.mdl" + +COUNTER-STRIKE (1999) ENTITY + +FN M249 Para Weapon + +- Buy Menu - +Price: $5750 + +*/ + enum { PARA_IDLE, PARA_SHOOT1, diff --git a/src/shared/cstrike/w_scout.c b/src/shared/cstrike/w_scout.c index be570032..9a81cfad 100644 --- a/src/shared/cstrike/w_scout.c +++ b/src/shared/cstrike/w_scout.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_scout.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Steyr Scout Weapon + +- Buy Menu - +Price: $1250 + +*/ + enum { SCOUT_IDLE, SCOUT_SHOOT1, diff --git a/src/shared/cstrike/w_sg550.c b/src/shared/cstrike/w_sg550.c index 92ae914f..3619b76a 100644 --- a/src/shared/cstrike/w_sg550.c +++ b/src/shared/cstrike/w_sg550.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_sg550.mdl" + +COUNTER-STRIKE (1999) ENTITY + +SIG SG 550 Weapon + +- Buy Menu - +Price: $4200 + +*/ + enum { SG550_IDLE, SG550_SHOOT1, diff --git a/src/shared/cstrike/w_sg552.c b/src/shared/cstrike/w_sg552.c index e62f6a0d..10942f1c 100644 --- a/src/shared/cstrike/w_sg552.c +++ b/src/shared/cstrike/w_sg552.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_sg552.mdl" + +COUNTER-STRIKE (1999) ENTITY + +SIG SG 552 Commando Weapon + +- Buy Menu - +Price: $3500 + +*/ + enum { SG552_IDLE, SG552_RELOAD, @@ -145,10 +157,30 @@ w_sg552_primary(void) break; } - pl.w_attack_next = 0.0825f; + 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(void) +{ + player pl = (player)self; + 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(void) { @@ -192,7 +224,12 @@ void w_sg552_hud(void) { #ifdef CSQC - Cstrike_DrawCrosshair(); + player pl = (player)self; + 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]; @@ -241,7 +278,7 @@ weapon_t w_sg552 = w_sg552_draw, __NULL__, w_sg552_primary, - __NULL__, + w_sg552_secondary, w_sg552_reload, w_cstrike_weaponrelease, w_sg552_hud, diff --git a/src/shared/cstrike/w_smokegrenade.c b/src/shared/cstrike/w_smokegrenade.c index fbd78047..af44fd30 100644 --- a/src/shared/cstrike/w_smokegrenade.c +++ b/src/shared/cstrike/w_smokegrenade.c @@ -14,6 +14,20 @@ * 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) +"model" "models/w_smokegrenade.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Smoke Grenade Weapon + +When thrown, the explosion casts view-blocking smoke in that radius. + +- Buy Menu - +Price: $300 + +*/ + enum { SMOKEGRENADE_IDLE, SMOKEGRENADE_RELOAD, diff --git a/src/shared/cstrike/w_tmp.c b/src/shared/cstrike/w_tmp.c index 4d8fb618..84b1be6f 100644 --- a/src/shared/cstrike/w_tmp.c +++ b/src/shared/cstrike/w_tmp.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_tmp.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Steyr Tactical Weapon + +- Buy Menu - +Price: $1250 + +*/ + enum { TMP_IDLE, TMP_RELOAD, diff --git a/src/shared/cstrike/w_ump45.c b/src/shared/cstrike/w_ump45.c index 0da8149c..20be1116 100644 --- a/src/shared/cstrike/w_ump45.c +++ b/src/shared/cstrike/w_ump45.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_ump45.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Heckler & Koch UMP .45 ACP Weapon + +- Buy Menu - +Price: $1700 + +*/ + enum { UMP45_IDLE, UMP45_RELOAD, diff --git a/src/shared/cstrike/w_usp45.c b/src/shared/cstrike/w_usp45.c index c523bd64..211fcb4d 100644 --- a/src/shared/cstrike/w_usp45.c +++ b/src/shared/cstrike/w_usp45.c @@ -14,6 +14,20 @@ * 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) +"model" "models/w_usp45.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Heckler & Koch USP .45 Tactical Weapon + +Default arsenal for Counter-Terrorists + +- Buy Menu - +Price: $500 + +*/ + enum { USP45_IDLE, USP45_SHOOT1, diff --git a/src/shared/cstrike/w_xm1014.c b/src/shared/cstrike/w_xm1014.c index 25c062fa..ff407b5f 100644 --- a/src/shared/cstrike/w_xm1014.c +++ b/src/shared/cstrike/w_xm1014.c @@ -14,6 +14,18 @@ * 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) +"model" "models/w_xm1014.mdl" + +COUNTER-STRIKE (1999) ENTITY + +Benneli XM1014 Weapon + +- Buy Menu - +Price: $3000 + +*/ + enum { XM1014_IDLE, XM1014_SHOOT1, diff --git a/src/shared/cstrike/weapons_cstrike.c b/src/shared/cstrike/weapons_cstrike.c index 5acf788f..d22e427b 100644 --- a/src/shared/cstrike/weapons_cstrike.c +++ b/src/shared/cstrike/weapons_cstrike.c @@ -44,11 +44,21 @@ Cstrike_ShotMultiplierAdd(player pl, int shots) float Cstrike_CalculateAccuracy(player pl, float divisor) { + float m = 1.0f; + + if (!(pl.flags & FL_ONGROUND)) { + m = 2.0f; + } else if (pl.flags & FL_CROUCHING) { + m = 0.5f; + } else if (vlen(pl.velocity) > 120) { + m = 1.5f; + } + if (divisor == -1) { /* snipers shoot way less accurate overall. */ - return (pl.viewzoom < 1.0f) ? 0.0f : 0.05; + return (pl.viewzoom < 1.0f) ? (0.0f) : (0.05 * m); } else { - return (pl.cs_shotmultiplier / divisor); + return (pl.cs_shotmultiplier / divisor) * m; } }