Cstrike: Finished most of the essential gun logic.

This commit is contained in:
Marco Cawthorne 2020-04-07 02:47:21 +02:00
parent 9d13451186
commit cf136dbd6c
58 changed files with 1712 additions and 673 deletions

View File

@ -7,13 +7,11 @@ weapon_ak47.fire
weapon_aug.fire
{
sample weapons/aug-1.wav
sample weapons/aug-2.wav
}
weapon_awp.fire
{
sample weapons/awp-1.wav
sample weapons/awp-2.wav
sample weapons/awp1.wav
}
weapon_c4bomb.disarm
@ -44,14 +42,13 @@ weapon_deagle.fire
weapon_elites.fire
{
sample weapons/elites-1.wav
sample weapons/elites-2.wav
sample weapons/elite_fire.wav
sample weapons/elite_fire.wav
}
weapon_fiveseven.fire
{
sample weapons/fiveseven-1.wav
sample weapons/fiveseven-2.wav
}
weapon_flashbang.explode
@ -62,13 +59,16 @@ weapon_flashbang.explode
weapon_g3sg1.fire
{
sample weapons/g3sg1-1.wav
sample weapons/g3sg1-2.wav
}
weapon_glock.fire
weapon_glock18.fire
{
sample weapons/glock18-2.wav
}
weapon_glock18.burstfire
{
sample weapons/glock18-1.wav
sample weapons/glock18-2.wav
}
weapon_grenade.bounce
@ -182,7 +182,7 @@ weapon_usp45.fire
sample weapons/usp_unsil-1.wav
}
weapon_usp45.silencer
weapon_usp45.silenced
{
sample weapons/usp1.wav
sample weapons/usp2.wav
@ -192,3 +192,8 @@ weapon_xm1014.fire
{
sample weapons/xm1014-1.wav
}
weapon_xm1014.insertshell
{
sample weapons/m3_insertshell.wav
}

View File

@ -0,0 +1,80 @@
/*
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
*
* 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.
*/
#define CS_CROSS_COLOR [0,1,0]
#define CS_CROSS_ALPHA 1.0f
void
Cstrike_DrawCrosshair(void)
{
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;
if (!(pl.flags & FL_ONGROUND)) {
distance = distance * 2.0f;
} else if (pl.flags & FL_CROUCHING) { /* crouching... */
distance = distance * 0.5f;
} else if (vlen(pl.velocity) > 120) { /* running, not walking */
distance = distance * 1.5f;
}
/* amount of shots that we've shot does affect our accuracy */
if (pl.cs_shotmultiplier > pl.cs_old_shotmultiplier) {
pl.cs_crosshairdistance = min(15, pl.cs_crosshairdistance + delta);
} else if (pl.cs_crosshairdistance > distance) {
pl.cs_crosshairdistance -= (pl.cs_crosshairdistance * clframetime);
}
pl.cs_old_shotmultiplier = pl.cs_shotmultiplier;
if (pl.cs_crosshairdistance < distance) {
pl.cs_crosshairdistance = distance;
}
cross_dist = ceil(pl.cs_crosshairdistance);
line_length = max(1, ((cross_dist - distance) / 2) + 5);
/* line setup */
vector vert1, vert2, hori1, hori2;
vert1 = vert2 = hori1 = hori2 = g_hudmins + (g_hudres / 2);
/* vertical Lines */
vert1[1] -= (cross_dist + line_length);
vert2[1] += cross_dist + 1;
/* horizontal Lines */
hori1[0] -= (cross_dist + line_length);
hori2[0] += cross_dist + 1;
drawfill(vert1, [1, line_length], CS_CROSS_COLOR, CS_CROSS_ALPHA, DRAWFLAG_ADDITIVE);
drawfill(vert2, [1, line_length], CS_CROSS_COLOR, CS_CROSS_ALPHA, DRAWFLAG_ADDITIVE);
drawfill(hori1, [line_length, 1], CS_CROSS_COLOR, CS_CROSS_ALPHA, DRAWFLAG_ADDITIVE);
drawfill(hori2, [line_length, 1], CS_CROSS_COLOR, CS_CROSS_ALPHA, DRAWFLAG_ADDITIVE);
}
/* AUG zoom uses this. so does the spectator cam */
void
Cstrike_DrawSimpleCrosshair(void)
{
static vector cross_pos;
cross_pos = g_hudmins + (g_hudres / 2) + [-12,-12];
drawsubpic(cross_pos, [24,24], "sprites/crosshairs.spr_0.tga", [0.1875,0], [0.1875, 0.1875], [1,1,1], 1, DRAWFLAG_NORMAL);
}

View File

@ -13,3 +13,5 @@
* IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
* OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
void Cstrike_DrawCrosshair(void);

View File

@ -371,7 +371,7 @@ HUD_Draw(void)
HUD_DrawFlashlight();
Damage_Draw();
drawpic([128,128], HUD_NUMS, [256,256], [1,1,1], 1.0f);
//drawpic([128,128], HUD_NUMS, [256,256], [1,1,1], 1.0f);
}
/* specatator main entry */

117
src/client/cstrike/player.c Normal file
View File

@ -0,0 +1,117 @@
/*
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
*
* 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.
*/
void
Player_ReadEntity(float new)
{
float fl;
player pl = (player)self;
if (new == TRUE) {
spawnfunc_player();
pl.classname = "player";
pl.solid = SOLID_SLIDEBOX;
pl.drawmask = MASK_ENGINE;
pl.customphysics = Empty;
setsize(pl, VEC_HULL_MIN, VEC_HULL_MAX);
} else {
int i;
//FIXME: splitscreen
if (pl.entnum == player_localentnum) {
//FIXME: splitscreen
pSeat = &seats[0];
for (i = pl.sequence+1; i <= servercommandframe; i++) {
if (!getinputstate(i)) {
break; //erk?... too old?
}
input_sequence = i;
QPhysics_Run(pl);
}
/* any differences in things that are read below are now
* officially from prediction misses. */
}
}
pl.sequence = servercommandframe;
fl = readfloat();
/* HACK: we need to make this more reliable */
if (fl == UPDATE_ALL) {
/* we respawned */
pl.gravity = __NULL__;
}
if (fl & PLAYER_MODELINDEX)
pl.modelindex = readshort();
if (fl & PLAYER_ORIGIN) {
pl.origin[0] = readcoord();
pl.origin[1] = readcoord();
}
if (fl & PLAYER_ORIGIN_Z)
pl.origin[2] = readcoord();
if (fl & PLAYER_ANGLES_X)
pl.pitch = readfloat();
if (fl & PLAYER_ANGLES_Y)
pl.angles[1] = readfloat();
if (fl & PLAYER_ANGLES_Z)
pl.angles[2] = readfloat();
if (fl & PLAYER_VELOCITY) {
pl.velocity[0] = readcoord();
pl.velocity[1] = readcoord();
}
if (fl & PLAYER_VELOCITY_Z)
pl.velocity[2] = readcoord();
if (fl & PLAYER_FLAGS)
pl.flags = readfloat();
if (fl & PLAYER_WEAPON)
pl.activeweapon = readbyte();
if (fl & PLAYER_ITEMS)
pl.g_items = (__variant)readfloat();
if (fl & PLAYER_HEALTH)
pl.health = readbyte();
if (fl & PLAYER_ARMOR)
pl.armor = readbyte();
if (fl & PLAYER_MOVETYPE)
pl.movetype = readbyte();
if (fl & PLAYER_VIEWOFS)
pl.view_ofs[2] = readfloat();
if (fl & PLAYER_BASEFRAME)
pl.baseframe = readbyte();
if (fl & PLAYER_FRAME) {
pl.frame = readbyte();
pl.frame1time = 0.0f;
pl.frame2time = 0.0f;
}
if (fl & PLAYER_AMMO1)
pl.a_ammo1 = readbyte();
if (fl & PLAYER_AMMO2)
pl.a_ammo2 = readbyte();
if (fl & PLAYER_AMMO3)
pl.a_ammo3 = readbyte();
if (fl & PLAYER_CSSHOT)
pl.cs_shotmultiplier = readbyte();
if (fl & PLAYER_CSSHOTTIME)
pl.cs_shottime = readfloat();
setorigin(pl, pl.origin);
}

View File

@ -0,0 +1,45 @@
/*
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
*
* 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.
*/
/*
=================
Predict_PreFrame
We're part way through parsing new player data.
Propagate our pmove state to whatever the current frame before its stomped on
(so any non-networked state updates locally).
=================
*/
void GamePredict_PreFrame(player pl)
{
pl.net_cs_shotmultiplier = pl.cs_shotmultiplier;
pl.net_cs_shottime = pl.cs_shottime;
}
/*
=================
Predict_PostFrame
We're part way through parsing new player data.
Rewind our pmove state back to before we started predicting.
(to give consistent state instead of accumulating errors)
=================
*/
void GamePredict_PostFrame(player pl)
{
pl.cs_shotmultiplier = pl.net_cs_shotmultiplier;
pl.cs_shottime = pl.net_cs_shottime;
}

View File

@ -36,15 +36,17 @@
../voice.c
../../shared/valve/animations.h
../../shared/valve/animations.c
../../shared/valve/player.cpp
../../shared/cstrike/player.cpp
../player.c
../../shared/pmove.c
predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c
../../shared/spraylogo.cpp
../npc.c
../../shared/cstrike/items.h
../../shared/cstrike/weapons_cstrike.c
../../shared/valve/weapon_common.h
../../shared/cstrike/weapons.h
../../shared/cstrike/w_ak47.c
@ -76,7 +78,7 @@
../../shared/cstrike/w_smokegrenade.c
../../shared/cstrike/weapons.c
../../shared/valve/weapon_common.c
../valve/player.c
../cstrike/player.c
entities.c
../entities.c
../fx_lensflare.c
@ -94,6 +96,7 @@ entities.c
../cstrike/vgui_chooseteam.cpp
hud.h
crosshair.c
hud.c
hud_weaponselect.c
../valve/scoreboard.c

View File

@ -19,6 +19,7 @@ CSQC_Init(float apilevel, string enginename, float engineversion)
{
pSeat = &seats[0];
registercommand("dev_sentence");
registercommand("fx_lenspos");
registercommand("titles_test");
registercommand("vox_test");
@ -604,6 +605,17 @@ CSQC_ConsoleCommand(string sCMD)
tokenize(sCMD);
switch (argv(0)) {
case "dev_sentence":
static CBaseEntity foo;
if (!foo) {
foo = spawn(CBaseEntity);
foo.drawmask = MASK_ENGINE;
setmodel(foo, "models/headcrab.mdl");
}
setorigin(foo, getproperty(VF_ORIGIN));
foo.Sentence(argv(1));
break;
case "vote":
if (argv(1) == "yes") {
sendevent("VoteY", "");

View File

@ -34,6 +34,7 @@
../../shared/gearbox/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -34,6 +34,7 @@
../../shared/hunger/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -35,6 +35,7 @@
../../shared/valve/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -38,6 +38,8 @@ void Predict_PreFrame(player pl)
pl.net_ammo2 = pl.a_ammo2;
pl.net_ammo3 = pl.a_ammo3;
pl.net_weapontime = pl.weapontime;
GamePredict_PreFrame(pl);
//self.netpmove_flags = self.pmove_flags;
@ -45,8 +47,18 @@ void Predict_PreFrame(player pl)
/*for (; self.pmove_frame <= servercommandframe; self.pmove_frame++) {
float flSuccess = getinputstate(self.pmove_frame);*/
for ( int i = pl.sequence + 1; i <= clientcommandframe; i++ ) {
if (!getinputstate(i)) {
break; //erk?... too old?
float flSuccess = getinputstate( i );
if (flSuccess == FALSE) {
continue;
}
if (i==clientcommandframe){
CSQC_Input_Frame();
}
// Partial frames are the worst
if (input_timelength == 0) {
break;
}
input_sequence = i;
QPhysics_Run(pl);
@ -71,16 +83,15 @@ void Predict_PostFrame(player pl)
pl.teleport_time = pl.net_teleport_time;
pl.viewzoom = pl.net_viewzoom;
pl.punchangle = pl.net_punchangle;
//pl.hook.origin = pl.net_hookpos;
pl.w_attack_next = pl.net_w_attack_next;
pl.w_idle_next = pl.net_w_idle_next;
pl.a_ammo1 = pl.net_ammo1;
pl.a_ammo2 = pl.net_ammo2;
pl.a_ammo3 = pl.net_ammo3;
pl.weapontime = pl.net_weapontime;
GamePredict_PostFrame(pl);
//self.pmove_flags = self.netpmove_flags;
setorigin(pl, pl.origin);
//self.pmove_frame = servercommandframe + 1;

View File

@ -42,6 +42,7 @@ decore.cpp
../../shared/rewolf/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -38,6 +38,7 @@
../../shared/scihunt/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -44,20 +44,6 @@ typedef struct
int g_sentences_count;
#endif
string g_sentences_path;
void
Sentences_Path(string word)
{
int c = tokenizebyseparator(word, "/");
if (c > 1) {
g_sentences_path = sprintf("%s/", argv(0));
} else {
g_sentences_path = "";
}
}
void
Sentences_Init(void)
{
@ -90,9 +76,6 @@ Sentences_Init(void)
/* starts of at 0, for every line increases */
int x = g_sentences_count;
/* default path is vox */
g_sentences_path = "vox/";
/* allocate memory and increase count */
#ifdef DYNAMIC_SENTENCES
g_sentences = memrealloc(g_sentences,
@ -109,13 +92,10 @@ Sentences_Init(void)
if (i==0) {
g_sentences[x].m_strID = strcat("!", argv(0));
} else {
/* check whether or not our keyword contains a path */
Sentences_Path(argv(i));
if (i == 1) {
g_sentences[x].m_strSamples = sprintf("%s%s", g_sentences_path, argv(i));
g_sentences[x].m_strSamples = sprintf("%s", argv(i));
} else {
g_sentences[x].m_strSamples = sprintf("%s %s%s", g_sentences[x].m_strSamples, g_sentences_path, argv(i));
g_sentences[x].m_strSamples = sprintf("%s %s", g_sentences[x].m_strSamples, argv(i));
}
}
}

View File

@ -41,6 +41,7 @@ init.c
../../shared/valve/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -0,0 +1,23 @@
/*
* Copyright (c) 2016-2019 Marco Hladik <marco@icculus.org>
*
* 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.
*/
void GamePredict_PreFrame(player pl)
{
}
void GamePredict_PostFrame(player pl)
{
}

View File

@ -39,6 +39,7 @@
../../shared/valve/player.cpp
../player.c
../../shared/pmove.c
../valve/predict.c
../predict.c
../../shared/decals.c
../../shared/effects.c

View File

@ -139,7 +139,16 @@ CBaseEntity::ProcessWordQue(void)
return;
}
sound(this, CHAN_VOICE, m_pSentenceQue[m_iSentencePos].m_strSnd, 1.0, ATTN_NORM, 100, SOUNDFLAG_FOLLOW);
/* hack to get vox working. */
string sndpath;
int c = tokenizebyseparator(m_pSentenceQue[m_iSentencePos].m_strSnd, "/");
if (c > 1) {
sndpath = argv(0);
} else {
sndpath = "vox";
}
sound(this, CHAN_VOICE, sprintf("%s/%s", sndpath, argv(1)), 1.0, ATTN_NORM, 100, SOUNDFLAG_FOLLOW);
dprint(sprintf("^2CBaseEntity::^3ProcessWordQue^7: Speaking %s\n", m_pSentenceQue[m_iSentencePos].m_strSnd));
m_iSentencePos++;

View File

@ -182,12 +182,16 @@ void customgame_btnactivate_start(void)
games_set(nextgame);
#if 0
localcmd(sprintf("fs_changegame %s.fmf\n", games[nextgame].gamedir));
#else
/* some games/mods inherit other directories */
if (games[nextgame].fallback_dir) {
localcmd(sprintf("gamedir \"%s;%s\"\n", games[nextgame].fallback_dir, games[nextgame].gamedir));
} else {
localcmd(sprintf("gamedir \"%s\"\n", games[nextgame].gamedir));
}
#endif
localcmd("stopmusic\nsnd_restart\nwait\nvid_reload\nmenu_restart\nmenu_customgame\n");
cvar_init();

View File

@ -135,6 +135,12 @@ Game_PlayerPostThink(player pl)
if (pl.old_a_ammo3 != pl.a_ammo3) {
pl.SendFlags |= PLAYER_AMMO3;
}
if (pl.old_cs_shotmultiplier != pl.cs_shotmultiplier) {
pl.SendFlags |= PLAYER_CSSHOT;
}
if (pl.old_cs_shottime != pl.cs_shottime) {
pl.SendFlags |= PLAYER_CSSHOTTIME;
}
pl.old_modelindex = pl.modelindex;
pl.old_origin = pl.origin;
@ -152,6 +158,8 @@ Game_PlayerPostThink(player pl)
pl.old_a_ammo1 = pl.a_ammo1;
pl.old_a_ammo2 = pl.a_ammo2;
pl.old_a_ammo3 = pl.a_ammo3;
pl.old_cs_shotmultiplier = pl.cs_shotmultiplier;
pl.old_cs_shottime = pl.cs_shottime;
}
void

View File

@ -192,6 +192,12 @@ float Player_SendEntity(entity ePEnt, float fChanged)
if (fChanged & PLAYER_AMMO3) {
WriteByte(MSG_ENTITY, pl.a_ammo3);
}
if (fChanged & PLAYER_CSSHOT) {
WriteByte(MSG_ENTITY, pl.cs_shotmultiplier);
}
if (fChanged & PLAYER_CSSHOTTIME) {
WriteFloat(MSG_ENTITY, pl.cs_shottime);
}
return TRUE;
}

View File

@ -32,6 +32,7 @@
../valve/spectator.c
../../shared/cstrike/items.h
../../shared/cstrike/weapons_cstrike.c
../../shared/valve/weapon_common.h
../../shared/cstrike/weapons.h
../../shared/cstrike/w_ak47.c

View File

@ -67,6 +67,9 @@ class player:CBaseEntity
int g3sg1_mag;
int sg550_mag;
int para_mag;
int cs_shotmultiplier;
float cs_shottime;
#ifdef CSQC
/* External model */
@ -77,6 +80,11 @@ class player:CBaseEntity
float pitch;
float lastweapon;
int cs_cross_mindist;
int cs_cross_deltadist;
int cs_old_shotmultiplier;
float cs_crosshairdistance;
/* Prediction */
vector net_origin;
vector net_velocity;
@ -87,9 +95,12 @@ class player:CBaseEntity
float net_teleport_time;
float net_weapontime;
float net_viewzoom;
vector net_punchangle;
int net_ammo1;
int net_ammo2;
int net_ammo3;
int net_cs_shotmultiplier;
float net_cs_shottime;
int sequence;
virtual void() gun_offset;
@ -125,5 +136,8 @@ class player:CBaseEntity
int old_a_ammo1;
int old_a_ammo2;
int old_a_ammo3;
int old_cs_shotmultiplier;
float old_cs_shottime;
#endif
};

View File

@ -82,9 +82,13 @@ w_ak47_pickup(int new)
void
w_ak47_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_ak47.mdl");
Weapons_ViewAnimation(AK47_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 4;
pl.cs_cross_deltadist = 4;
#endif
}
@ -101,8 +105,30 @@ w_ak47_primary(void)
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.ak47_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 36, [accuracy,accuracy], WEAPON_AK47);
pl.ak47_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_ak47.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,25 +143,9 @@ w_ak47_primary(void)
Weapons_ViewAnimation(AK47_SHOOT3);
break;
}
#else
if (!pl.ak47_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 36, [0.35,0,1.25], WEAPON_AK47);
pl.ak47_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_ak47.fire");
#endif
pl.w_attack_next = 0.0955f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -165,9 +175,10 @@ w_ak47_reload(void)
Weapons_ReloadWeapon(pl, player::ak47_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.ak47_mag, pl.ammo_762mm, -1);
#endif
Weapons_ViewAnimation(AK47_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 2.4f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -180,11 +191,11 @@ void
w_ak47_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [72/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -231,7 +242,7 @@ weapon_t w_ak47 =
.primary = w_ak47_primary,
.secondary = __NULL__,
.reload = w_ak47_reload,
.release = __NULL__,
.release = w_cstrike_weaponrelease,
.crosshair = w_ak47_hud,
.precache = w_ak47_precache,
.pickup = w_ak47_pickup,

View File

@ -82,9 +82,13 @@ w_aug_pickup(int new)
void
w_aug_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_aug.mdl");
Weapons_ViewAnimation(AUG_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 3;
pl.cs_cross_deltadist = 3;
#endif
}
@ -101,8 +105,30 @@ w_aug_primary(void)
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.aug_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 215);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
pl.aug_mag--;
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 32, [accuracy,accuracy], WEAPON_AUG);
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_aug.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +143,9 @@ w_aug_primary(void)
Weapons_ViewAnimation(AUG_SHOOT3);
break;
}
#else
if (!pl.aug_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 32, [0.01,0,01], WEAPON_AUG);
pl.aug_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_aug.fire");
#endif
pl.w_attack_next = 0.0825f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -164,9 +175,10 @@ w_aug_reload(void)
Weapons_ReloadWeapon(pl, player::aug_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.aug_mag, pl.ammo_762mm, -1);
#endif
Weapons_ViewAnimation(AUG_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.3f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +191,11 @@ void
w_aug_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [72/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +242,7 @@ weapon_t w_aug =
w_aug_primary,
__NULL__,
w_aug_reload,
__NULL__,
w_cstrike_weaponrelease,
w_aug_hud,
w_aug_precache,
w_aug_pickup,

View File

@ -16,11 +16,11 @@
enum {
AWP_IDLE,
AWP_RELOAD,
AWP_DRAW,
AWP_SHOOT1,
AWP_SHOOT2,
AWP_SHOOT3
AWP_SHOOT3,
AWP_RELOAD,
AWP_DRAW
};
void
@ -38,7 +38,7 @@ void
w_awp_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.awp_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.awp_mag, pl.ammo_338mag, -1);
#endif
}
@ -69,8 +69,8 @@ w_awp_pickup(int new)
if (new) {
pl.awp_mag = 10;
} else {
if (pl.ammo_762mm < 20) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 10, 20);
if (pl.ammo_338mag < 20) {
pl.ammo_338mag = bound(0, pl.ammo_338mag + 10, 20);
} else {
return FALSE;
}
@ -82,9 +82,13 @@ w_awp_pickup(int new)
void
w_awp_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_awp.mdl");
Weapons_ViewAnimation(AWP_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 3;
#endif
}
@ -101,8 +105,30 @@ w_awp_primary(void)
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.awp_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, -1);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
pl.awp_mag--;
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 115, [accuracy,accuracy], WEAPON_AWP);
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_awp.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +143,9 @@ w_awp_primary(void)
Weapons_ViewAnimation(AWP_SHOOT3);
break;
}
#else
if (!pl.awp_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 115, [0.01,0,01], WEAPON_AWP);
pl.awp_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_awp.fire");
#endif
pl.w_attack_next = 1.2f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +168,17 @@ w_awp_reload(void)
if (pl.awp_mag >= 10) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_338mag) {
return;
}
Weapons_ReloadWeapon(pl, player::awp_mag, player::ammo_762mm, 10);
Weapons_UpdateAmmo(pl, pl.awp_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::awp_mag, player::ammo_338mag, 10);
Weapons_UpdateAmmo(pl, pl.awp_mag, pl.ammo_338mag, -1);
#endif
Weapons_ViewAnimation(AWP_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 2.9f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +191,11 @@ void
w_awp_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [24/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +242,7 @@ weapon_t w_awp =
w_awp_primary,
__NULL__,
w_awp_reload,
__NULL__,
w_cstrike_weaponrelease,
w_awp_hud,
w_awp_precache,
w_awp_pickup,

View File

@ -66,6 +66,7 @@ w_c4bomb_deathmsg(void)
void
w_c4bomb_draw(void)
{
player pl = (player)self;
#ifdef CSQC
Weapons_SetModel("models/v_c4bomb.mdl");
Weapons_ViewAnimation(C4BOMB_DRAW);
@ -108,6 +109,17 @@ w_c4bomb_aimanim(void)
return self.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND;
}
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);
#endif
}
void
w_c4bomb_hudpic(int selected, vector pos, float a)
{
@ -152,7 +164,7 @@ weapon_t w_c4bomb =
__NULL__,
__NULL__,
__NULL__,
__NULL__,
w_c4bomb_hud,
w_c4bomb_precache,
__NULL__,
w_c4bomb_updateammo,

View File

@ -16,11 +16,11 @@
enum {
DEAGLE_IDLE,
DEAGLE_RELOAD,
DEAGLE_DRAW,
DEAGLE_SHOOT1,
DEAGLE_SHOOT2,
DEAGLE_SHOOT3
DEAGLE_SHOOT_EMPTY,
DEAGLE_RELOAD,
DEAGLE_DRAW
};
void
@ -82,8 +82,14 @@ w_deagle_pickup(int new)
void
w_deagle_draw(void)
{
player pl = (player)self;
Weapons_SetModel("models/v_deagle.mdl");
Weapons_ViewAnimation(DEAGLE_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 3;
#endif
}
void
@ -95,34 +101,30 @@ w_deagle_primary(void)
return;
}
#ifdef CSQC
if (!pl.a_ammo1) {
if (pl.flags & FL_SEMI_TOGGLED) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(DEAGLE_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(DEAGLE_SHOOT2);
break;
default:
Weapons_ViewAnimation(DEAGLE_SHOOT3);
break;
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.deagle_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 54, [0.01,0,01], WEAPON_DEAGLE);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
pl.deagle_mag--;
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 54, [accuracy,accuracy], WEAPON_DEAGLE);
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
@ -132,7 +134,25 @@ w_deagle_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_deagle.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(DEAGLE_SHOOT_EMPTY);
} else {
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(DEAGLE_SHOOT1);
break;
default:
Weapons_ViewAnimation(DEAGLE_SHOOT2);
break;
}
}
pl.flags |= FL_SEMI_TOGGLED;
pl.w_attack_next = 0.15f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -164,7 +184,8 @@ w_deagle_reload(void)
#endif
Weapons_ViewAnimation(DEAGLE_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 2.1f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -177,10 +198,11 @@ void
w_deagle_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [24/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -227,7 +249,7 @@ weapon_t w_deagle =
w_deagle_primary,
__NULL__,
w_deagle_reload,
__NULL__,
w_cstrike_weaponrelease,
w_deagle_hud,
w_deagle_precache,
w_deagle_pickup,

View File

@ -16,29 +16,38 @@
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,
ELITES_SHOOT1,
ELITES_SHOOT2,
ELITES_SHOOT3
ELITES_DRAW
};
void
w_elites_precache(void)
{
#ifdef SSQC
Sound_Precache("weapon_elites.fire");
#endif
precache_model("models/v_elites.mdl");
precache_model("models/w_elites.mdl");
precache_model("models/p_elites.mdl");
precache_model("models/v_elite.mdl");
precache_model("models/w_elite.mdl");
precache_model("models/p_elite.mdl");
}
void
w_elites_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.elites_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.elites_mag, pl.ammo_9mm, -1);
#endif
}
@ -69,8 +78,8 @@ w_elites_pickup(int new)
if (new) {
pl.elites_mag = 30;
} else {
if (pl.ammo_762mm < 90) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, 90);
if (pl.ammo_9mm < 90) {
pl.ammo_9mm = bound(0, pl.ammo_9mm + 30, 90);
} else {
return FALSE;
}
@ -82,9 +91,13 @@ w_elites_pickup(int new)
void
w_elites_draw(void)
{
#ifdef CSQC
Weapons_SetModel("models/v_elites.mdl");
player pl = (player)self;
Weapons_SetModel("models/v_elite.mdl");
Weapons_ViewAnimation(ELITES_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 4;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,33 +110,28 @@ w_elites_primary(void)
return;
}
#ifdef CSQC
if (!pl.a_ammo1) {
if (pl.flags & FL_SEMI_TOGGLED) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(ELITES_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(ELITES_SHOOT2);
break;
default:
Weapons_ViewAnimation(ELITES_SHOOT3);
break;
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.elites_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 45, [0.01,0,01], WEAPON_ELITES);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 45, [accuracy,accuracy], WEAPON_ELITES);
pl.elites_mag--;
if (self.flags & FL_CROUCHING)
@ -134,7 +142,60 @@ w_elites_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_elites.fire");
#endif
pl.a_ammo3 = 1 - pl.a_ammo3;
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 5;
if (pl.a_ammo3) {
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(ELITES_SHOOT_LEFTLAST);
} else {
switch (r) {
case 0:
Weapons_ViewAnimation(ELITES_SHOOT_LEFT1);
break;
case 1:
Weapons_ViewAnimation(ELITES_SHOOT_LEFT2);
break;
case 2:
Weapons_ViewAnimation(ELITES_SHOOT_LEFT3);
break;
case 3:
Weapons_ViewAnimation(ELITES_SHOOT_LEFT4);
break;
default:
Weapons_ViewAnimation(ELITES_SHOOT_LEFT1);
break;
}
}
} else {
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(ELITES_SHOOT_RIGHTLAST);
} else {
switch (r) {
case 0:
Weapons_ViewAnimation(ELITES_SHOOT_RIGHT1);
break;
case 1:
Weapons_ViewAnimation(ELITES_SHOOT_RIGHT2);
break;
case 2:
Weapons_ViewAnimation(ELITES_SHOOT_RIGHT3);
break;
case 3:
Weapons_ViewAnimation(ELITES_SHOOT_RIGHT4);
break;
default:
Weapons_ViewAnimation(ELITES_SHOOT_RIGHT1);
break;
}
}
}
pl.flags |= FL_SEMI_TOGGLED;
pl.w_attack_next = 0.15f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +218,17 @@ w_elites_reload(void)
if (pl.elites_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_9mm) {
return;
}
Weapons_ReloadWeapon(pl, player::elites_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.elites_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::elites_mag, player::ammo_9mm, 30);
Weapons_UpdateAmmo(pl, pl.elites_mag, pl.ammo_9mm, -1);
#endif
Weapons_ViewAnimation(ELITES_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 4.6f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +241,11 @@ void
w_elites_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [48/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +292,7 @@ weapon_t w_elites =
w_elites_primary,
__NULL__,
w_elites_reload,
__NULL__,
w_cstrike_weaponrelease,
w_elites_hud,
w_elites_precache,
w_elites_pickup,

View File

@ -16,11 +16,11 @@
enum {
FIVESEVEN_IDLE,
FIVESEVEN_RELOAD,
FIVESEVEN_DRAW,
FIVESEVEN_SHOOT1,
FIVESEVEN_SHOOT2,
FIVESEVEN_SHOOT3
FIVESEVEN_SHOOT_EMPTY,
FIVESEVEN_RELOAD,
FIVESEVEN_DRAW
};
void
@ -38,7 +38,7 @@ void
w_fiveseven_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.fiveseven_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.fiveseven_mag, pl.ammo_57mm, -1);
#endif
}
@ -69,8 +69,8 @@ w_fiveseven_pickup(int new)
if (new) {
pl.fiveseven_mag = 20;
} else {
if (pl.ammo_762mm < 40) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 20, 40);
if (pl.ammo_57mm < 40) {
pl.ammo_57mm = bound(0, pl.ammo_57mm + 20, 40);
} else {
return FALSE;
}
@ -82,9 +82,13 @@ w_fiveseven_pickup(int new)
void
w_fiveseven_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_fiveseven.mdl");
Weapons_ViewAnimation(FIVESEVEN_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,33 +101,28 @@ w_fiveseven_primary(void)
return;
}
#ifdef CSQC
if (!pl.a_ammo1) {
if (pl.flags & FL_SEMI_TOGGLED) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(FIVESEVEN_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(FIVESEVEN_SHOOT2);
break;
default:
Weapons_ViewAnimation(FIVESEVEN_SHOOT3);
break;
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.fiveseven_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 25, [0.01,0,01], WEAPON_FIVESEVEN);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 25, [accuracy,accuracy], WEAPON_FIVESEVEN);
pl.fiveseven_mag--;
if (self.flags & FL_CROUCHING)
@ -134,7 +133,25 @@ w_fiveseven_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_fiveseven.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(FIVESEVEN_SHOOT_EMPTY);
} else {
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(FIVESEVEN_SHOOT1);
break;
default:
Weapons_ViewAnimation(FIVESEVEN_SHOOT2);
break;
}
}
pl.flags |= FL_SEMI_TOGGLED;
pl.w_attack_next = 0.15f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +174,17 @@ w_fiveseven_reload(void)
if (pl.fiveseven_mag >= 20) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_57mm) {
return;
}
Weapons_ReloadWeapon(pl, player::fiveseven_mag, player::ammo_762mm, 20);
Weapons_UpdateAmmo(pl, pl.fiveseven_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::fiveseven_mag, player::ammo_57mm, 20);
Weapons_UpdateAmmo(pl, pl.fiveseven_mag, pl.ammo_57mm, -1);
#endif
Weapons_ViewAnimation(FIVESEVEN_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.1f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +197,11 @@ void
w_fiveseven_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [120/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +248,7 @@ weapon_t w_fiveseven =
w_fiveseven_primary,
__NULL__,
w_fiveseven_reload,
__NULL__,
w_cstrike_weaponrelease,
w_fiveseven_hud,
w_fiveseven_precache,
w_fiveseven_pickup,

View File

@ -105,6 +105,17 @@ w_flashbang_aimanim(void)
return self.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND;
}
void
w_flashbang_hud(void)
{
#ifdef CSQC
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", [48/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
void
w_flashbang_hudpic(int selected, vector pos, float a)
{
@ -149,7 +160,7 @@ weapon_t w_flashbang =
__NULL__,
__NULL__,
__NULL__,
__NULL__,
w_flashbang_hud,
w_flashbang_precache,
__NULL__,
w_flashbang_updateammo,

View File

@ -16,11 +16,10 @@
enum {
G3SG1_IDLE,
G3SG1_RELOAD,
G3SG1_DRAW,
G3SG1_SHOOT1,
G3SG1_SHOOT2,
G3SG1_SHOOT3
G3SG1_RELOAD,
G3SG1_DRAW
};
void
@ -82,9 +81,13 @@ w_g3sg1_pickup(int new)
void
w_g3sg1_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_g3sg1.mdl");
Weapons_ViewAnimation(G3SG1_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 6;
pl.cs_cross_deltadist = 4;
#endif
}
@ -101,29 +104,20 @@ w_g3sg1_primary(void)
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(G3SG1_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(G3SG1_SHOOT2);
break;
default:
Weapons_ViewAnimation(G3SG1_SHOOT3);
break;
}
#else
if (!pl.g3sg1_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 80, [0.01,0,01], WEAPON_G3SG1);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 80, [accuracy,accuracy], WEAPON_G3SG1);
pl.g3sg1_mag--;
if (self.flags & FL_CROUCHING)
@ -134,7 +128,20 @@ w_g3sg1_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_g3sg1.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(SCOUT_SHOOT1);
break;
default:
Weapons_ViewAnimation(SCOUT_SHOOT2);
break;
}
pl.w_attack_next = 0.25f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -166,7 +173,8 @@ w_g3sg1_reload(void)
#endif
Weapons_ViewAnimation(G3SG1_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 4.6f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +187,11 @@ void
w_g3sg1_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [72/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +238,7 @@ weapon_t w_g3sg1 =
w_g3sg1_primary,
__NULL__,
w_g3sg1_reload,
__NULL__,
w_cstrike_weaponrelease,
w_g3sg1_hud,
w_g3sg1_precache,
w_g3sg1_pickup,

View File

@ -15,12 +15,19 @@
*/
enum {
GLOCK18_IDLE,
GLOCK18_RELOAD,
GLOCK18_DRAW,
GLOCK18_SHOOT1,
GLOCK18_SHOOT2,
GLOCK18_SHOOT3
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
@ -28,6 +35,7 @@ w_glock18_precache(void)
{
#ifdef SSQC
Sound_Precache("weapon_glock18.fire");
Sound_Precache("weapon_glock18.burstfire");
#endif
precache_model("models/v_glock18.mdl");
precache_model("models/w_glock18.mdl");
@ -38,7 +46,7 @@ void
w_glock18_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.glock18_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.glock18_mag, pl.ammo_9mm, -1);
#endif
}
@ -69,8 +77,8 @@ w_glock18_pickup(int new)
if (new) {
pl.glock18_mag = 20;
} else {
if (pl.ammo_762mm < 40) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 20, 40);
if (pl.ammo_9mm < 40) {
pl.ammo_9mm = bound(0, pl.ammo_9mm + 20, 40);
} else {
return FALSE;
}
@ -82,9 +90,21 @@ w_glock18_pickup(int new)
void
w_glock18_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_glock18.mdl");
Weapons_ViewAnimation(GLOCK18_DRAW);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(GLOCK_DRAW1);
break;
default:
Weapons_ViewAnimation(GLOCK_DRAW2);
break;
}
#ifdef CSQC
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,33 +117,28 @@ w_glock18_primary(void)
return;
}
#ifdef CSQC
if (!pl.a_ammo1) {
if (pl.flags & FL_SEMI_TOGGLED) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(GLOCK18_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(GLOCK18_SHOOT2);
break;
default:
Weapons_ViewAnimation(GLOCK18_SHOOT3);
break;
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.glock18_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 25, [0.01,0,01], WEAPON_GLOCK18);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 25, [accuracy,accuracy], WEAPON_GLOCK18);
pl.glock18_mag--;
if (self.flags & FL_CROUCHING)
@ -131,10 +146,59 @@ w_glock18_primary(void)
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_glock18.fire");
if (pl.a_ammo3) {
Sound_Play(pl, CHAN_WEAPON, "weapon_glock18.burstfire");
} else {
Sound_Play(pl, CHAN_WEAPON, "weapon_glock18.fire");
}
#endif
Weapons_ViewPunchAngle([-2,0,0]);
if (pl.a_ammo3) {
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(GLOCK_SHOOT_BURST1);
break;
default:
Weapons_ViewAnimation(GLOCK_SHOOT_BURST2);
break;
}
pl.w_attack_next = 0.5f;
} else {
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(GLOCK_SHOOT_EMPTY);
} else {
Weapons_ViewAnimation(GLOCK_SHOOT);
}
pl.w_attack_next = 0.15f;
}
pl.flags |= FL_SEMI_TOGGLED;
pl.w_idle_next = pl.w_attack_next;
}
void
w_glock18_secondary(void)
{
player pl = (player)self;
if (pl.w_attack_next > 0) {
return;
}
/* toggle burst-fire */
pl.a_ammo3 = 1 - pl.a_ammo3;
#ifdef CSQC
if (pl.a_ammo3) {
CSQC_Parse_CenterPrint("Switched to Burst-Fire mode");
} else {
CSQC_Parse_CenterPrint("Switched to Semi-Automatic mode");
}
#endif
pl.w_attack_next = 0.15f;
pl.w_attack_next = 1.0f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +221,26 @@ w_glock18_reload(void)
if (pl.glock18_mag >= 20) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_9mm) {
return;
}
Weapons_ReloadWeapon(pl, player::glock18_mag, player::ammo_762mm, 20);
Weapons_UpdateAmmo(pl, pl.glock18_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::glock18_mag, player::ammo_9mm, 20);
Weapons_UpdateAmmo(pl, pl.glock18_mag, pl.ammo_9mm, -1);
#endif
Weapons_ViewAnimation(GLOCK18_RELOAD);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(GLOCK_RELOAD1);
break;
default:
Weapons_ViewAnimation(GLOCK_RELOAD2);
break;
}
pl.w_attack_next = 2.1f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +253,11 @@ void
w_glock18_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [48/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -228,9 +302,9 @@ weapon_t w_glock18 =
w_glock18_draw,
__NULL__,
w_glock18_primary,
__NULL__,
w_glock18_secondary,
w_glock18_reload,
__NULL__,
w_cstrike_weaponrelease,
w_glock18_hud,
w_glock18_precache,
w_glock18_pickup,

View File

@ -102,6 +102,17 @@ w_hegrenade_aimanim(void)
return w_flashbang_aimanim();
}
void
w_hegrenade_hud(void)
{
#ifdef CSQC
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", [72/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
void
w_hegrenade_hudpic(int selected, vector pos, float a)
{
@ -146,7 +157,7 @@ weapon_t w_hegrenade =
__NULL__,
__NULL__,
__NULL__,
__NULL__,
w_hegrenade_hud,
w_hegrenade_precache,
__NULL__,
w_hegrenade_updateammo,

View File

@ -16,11 +16,20 @@
enum {
M3_IDLE,
M3_RELOAD,
M3_DRAW,
M3_SHOOT1,
M3_SHOOT2,
M3_SHOOT3
M3_INSERT,
M3_RELOAD_END,
M3_RELOAD_START,
M3_DRAW
};
enum
{
M3S_IDLE,
M3S_RELOAD_START,
M3S_RELOAD,
M3S_RELOAD_END
};
void
@ -38,7 +47,7 @@ void
w_m3_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.m3_mag, pl.ammo_buckshot, -1);
Weapons_UpdateAmmo(pl, pl.m3_mag, pl.ammo_buckshot, pl.a_ammo3);
#endif
}
@ -82,9 +91,13 @@ w_m3_pickup(int new)
void
w_m3_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_m3.mdl");
Weapons_ViewAnimation(M3_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 6;
#endif
}
@ -101,29 +114,20 @@ w_m3_primary(void)
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(M3_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(M3_SHOOT2);
break;
default:
Weapons_ViewAnimation(M3_SHOOT3);
break;
}
#else
if (!pl.m3_mag) {
return;
}
#endif
TraceAttack_FireBullets(8, pl.origin + pl.view_ofs, 26, [0.01,0,01], WEAPON_M3);
Cstrike_ShotMultiplierAdd(pl, 9);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(9, pl.origin + pl.view_ofs, 26, [accuracy,accuracy], WEAPON_M3);
pl.m3_mag--;
if (self.flags & FL_CROUCHING)
@ -134,39 +138,88 @@ w_m3_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_m3.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(M3_SHOOT1);
break;
default:
Weapons_ViewAnimation(M3_SHOOT2);
break;
}
pl.w_attack_next = 1.0f;
pl.w_idle_next = pl.w_attack_next;
}
void
w_m3_reload(void)
{
player pl = (player)self;
if (pl.w_attack_next > 0.0) {
return;
}
#ifdef CSQC
if (pl.a_ammo1 >= 8) {
return;
}
if (!pl.a_ammo2) {
if (pl.a_ammo2 <= 0) {
return;
}
#else
if (pl.m3_mag >= 8) {
return;
}
if (!pl.ammo_buckshot) {
if (pl.ammo_buckshot <= 0) {
return;
}
#endif
if (pl.a_ammo3 > M3S_IDLE) {
return;
}
pl.a_ammo3 = M3S_RELOAD_START;
pl.w_idle_next = 0.0f;
}
void
w_m3_release(void)
{
player pl = (player)self;
w_cstrike_weaponrelease();
if (pl.w_idle_next > 0.0) {
return;
}
Weapons_ReloadWeapon(pl, player::m3_mag, player::ammo_buckshot, 8);
Weapons_UpdateAmmo(pl, pl.m3_mag, pl.ammo_buckshot, -1);
#endif
if (pl.a_ammo3 == M3S_RELOAD_START) {
Weapons_ViewAnimation(M3_RELOAD_START);
pl.a_ammo3 = M3S_RELOAD;
pl.w_idle_next = 0.65f;
} else if (pl.a_ammo3 == M3S_RELOAD) {
Weapons_ViewAnimation(M3_INSERT);
#ifdef CSQC
pl.a_ammo1++;
pl.a_ammo2--;
Weapons_ViewAnimation(M3_RELOAD);
pl.w_attack_next = 2.0f;
if (pl.a_ammo2 <= 0 || pl.a_ammo1 >= 8) {
pl.a_ammo3 = M3S_RELOAD_END;
}
#else
pl.m3_mag++;
pl.ammo_buckshot--;
w_m3_updateammo(pl);
if (pl.ammo_buckshot <= 0 || pl.m3_mag >= 8) {
pl.a_ammo3 = M3S_RELOAD_END;
}
#endif
pl.w_idle_next = 0.5f;
} else if (pl.a_ammo3 == M3S_RELOAD_END) {
Weapons_ViewAnimation(M3_RELOAD_END);
pl.a_ammo3 = M3S_IDLE;
pl.w_idle_next = 10.0f;
pl.w_attack_next = 0.5f;
}
}
float
@ -179,11 +232,11 @@ void
w_m3_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +283,7 @@ weapon_t w_m3 =
w_m3_primary,
__NULL__,
w_m3_reload,
__NULL__,
w_m3_release,
w_m3_hud,
w_m3_precache,
w_m3_pickup,

View File

@ -47,7 +47,7 @@ void
w_m4a1_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.m4a1_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.m4a1_mag, pl.ammo_556mm, -1);
#endif
}
@ -78,8 +78,8 @@ w_m4a1_pickup(int new)
if (new) {
pl.m4a1_mag = 30;
} else {
if (pl.ammo_762mm < 90) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, 90);
if (pl.ammo_556mm < AMMO_MAX_762MM) {
pl.ammo_556mm = bound(0, pl.ammo_556mm + 30, AMMO_MAX_762MM);
} else {
return FALSE;
}
@ -91,8 +91,20 @@ w_m4a1_pickup(int new)
void
w_m4a1_draw(void)
{
player pl = (player)self;
Weapons_SetModel("models/v_m4a1.mdl");
Weapons_ViewAnimation(M4A1_DRAW);
if (pl.a_ammo3 == 1) {
Weapons_ViewAnimation(M4A1_DRAW);
} else {
Weapons_ViewAnimation(M4A1_DRAWUNSIL);
}
#ifdef CSQC
pl.cs_cross_mindist = 4;
pl.cs_cross_deltadist = 3;
#endif
}
void
@ -115,6 +127,9 @@ w_m4a1_primary(void)
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 220);
/* actual firing */
#ifdef CSQC
if (pl.a_ammo3 == 1) {
@ -125,7 +140,6 @@ w_m4a1_primary(void)
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
#else
pl.m4a1_mag--;
@ -136,13 +150,14 @@ w_m4a1_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_m4a1.fire");
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 33, [0.1,0.1], WEAPON_M4A1);
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 33, [accuracy,accuracy], WEAPON_M4A1);
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
#endif
Weapons_ViewPunchAngle([-2,0,0]);
/* this stuff is predicted */
int r = (float)input_sequence % 3;
@ -174,7 +189,7 @@ w_m4a1_primary(void)
Weapons_ViewPunchAngle([-2,0,0]);
pl.w_attack_next = 0.0875f;
pl.w_idle_next = 5.0f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -220,15 +235,21 @@ w_m4a1_reload(void)
if (pl.m4a1_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_556mm) {
return;
}
Weapons_ReloadWeapon(pl, player::m4a1_mag, player::ammo_762mm, 30);
Weapons_ReloadWeapon(pl, player::m4a1_mag, player::ammo_556mm, 30);
#endif
Weapons_ViewAnimation(M4A1_RELOAD);
pl.w_attack_next = 2.0f;
if (pl.a_ammo3 == 1) {
Weapons_ViewAnimation(M4A1_RELOAD);
} else {
Weapons_ViewAnimation(M4A1_RELOADUNSIL);
}
pl.w_attack_next = 3.1f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -241,10 +262,11 @@ void
w_m4a1_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -253,6 +275,8 @@ w_m4a1_release(void)
{
player pl = (player)self;
w_cstrike_weaponrelease();
if (pl.w_idle_next > 0.0) {
return;
}

View File

@ -38,7 +38,7 @@ void
w_mac10_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.mac10_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.mac10_mag, pl.ammo_45acp, -1);
#endif
}
@ -69,8 +69,8 @@ w_mac10_pickup(int new)
if (new) {
pl.mac10_mag = 30;
} else {
if (pl.ammo_762mm < 90) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, 90);
if (pl.ammo_45acp < 90) {
pl.ammo_45acp = bound(0, pl.ammo_45acp + 30, 90);
} else {
return FALSE;
}
@ -82,9 +82,13 @@ w_mac10_pickup(int new)
void
w_mac10_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_mac10.mdl");
Weapons_ViewAnimation(MAC10_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 9;
pl.cs_cross_deltadist = 3;
#endif
}
@ -101,8 +105,30 @@ w_mac10_primary(void)
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.mac10_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 29, [accuracy,accuracy], WEAPON_MAC10);
pl.mac10_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_mac10.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +143,9 @@ w_mac10_primary(void)
Weapons_ViewAnimation(MAC10_SHOOT3);
break;
}
#else
if (!pl.mac10_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 29, [0.01,0,01], WEAPON_MAC10);
pl.mac10_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_mac10.fire");
#endif
pl.w_attack_next = 0.07f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +168,17 @@ w_mac10_reload(void)
if (pl.mac10_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_45acp) {
return;
}
Weapons_ReloadWeapon(pl, player::mac10_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.mac10_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::mac10_mag, player::ammo_45acp, 30);
Weapons_UpdateAmmo(pl, pl.mac10_mag, pl.ammo_45acp, -1);
#endif
Weapons_ViewAnimation(MAC10_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.2f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +191,11 @@ void
w_mac10_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [96/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +242,7 @@ weapon_t w_mac10 =
w_mac10_primary,
__NULL__,
w_mac10_reload,
__NULL__,
w_cstrike_weaponrelease,
w_mac10_hud,
w_mac10_precache,
w_mac10_pickup,

View File

@ -82,8 +82,14 @@ w_mp5_pickup(int new)
void
w_mp5_draw(void)
{
player pl = (player)self;
Weapons_SetModel("models/v_mp5.mdl");
Weapons_ViewAnimation(MP5_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 5;
pl.cs_cross_deltadist = 2;
#endif
}
void
@ -99,8 +105,34 @@ w_mp5_primary(void)
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.mp5_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 220);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
if (!pl.mp5_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 26, [accuracy,accuracy], WEAPON_MP5);
pl.mp5_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -115,24 +147,9 @@ w_mp5_primary(void)
Weapons_ViewAnimation(MP5_SHOOT3);
break;
}
#else
if (!pl.mp5_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 26, [0.01,0,01], WEAPON_MP5);
pl.mp5_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_mp5.fire");
#endif
pl.w_attack_next = 0.08f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -164,7 +181,8 @@ w_mp5_reload(void)
#endif
Weapons_ViewAnimation(MP5_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 2.6f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -177,10 +195,11 @@ void
w_mp5_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [48/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -227,7 +246,7 @@ weapon_t w_mp5 =
w_mp5_primary,
__NULL__,
w_mp5_reload,
__NULL__,
w_cstrike_weaponrelease,
w_mp5_hud,
w_mp5_precache,
w_mp5_pickup,

View File

@ -16,11 +16,12 @@
enum {
P228_IDLE,
P228_RELOAD,
P228_DRAW,
P228_SHOOT1,
P228_SHOOT2,
P228_SHOOT3
P228_SHOOT3,
P228_SHOOT_EMPTY,
P228_RELOAD,
P228_DRAW
};
void
@ -40,7 +41,7 @@ void
w_p228_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.p228_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.p228_mag, pl.ammo_357sig, -1);
#endif
}
@ -71,8 +72,8 @@ w_p228_pickup(int new)
if (new) {
pl.p228_mag = 13;
} else {
if (pl.ammo_762mm < 26) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 13, 26);
if (pl.ammo_357sig < 26) {
pl.ammo_357sig = bound(0, pl.ammo_357sig + 13, 26);
} else {
return FALSE;
}
@ -84,9 +85,13 @@ w_p228_pickup(int new)
void
w_p228_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_p228.mdl");
Weapons_ViewAnimation(P228_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 3;
#endif
}
@ -99,33 +104,29 @@ w_p228_primary(void)
return;
}
if (pl.flags & FL_SEMI_TOGGLED) {
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(P228_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(P228_SHOOT2);
break;
default:
Weapons_ViewAnimation(P228_SHOOT3);
break;
}
#else
if (!pl.p228_mag) {
if (!pl.p90_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 40, [0.01,0,01], WEAPON_P228);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 40, [accuracy,accuracy], WEAPON_P228);
pl.p228_mag--;
if (self.flags & FL_CROUCHING)
@ -136,7 +137,28 @@ w_p228_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_p228.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(P228_SHOOT_EMPTY);
} else {
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(P228_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(P228_SHOOT2);
break;
default:
Weapons_ViewAnimation(P228_SHOOT3);
break;
}
}
pl.flags |= FL_SEMI_TOGGLED;
pl.w_attack_next = 0.15f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -159,16 +181,17 @@ w_p228_reload(void)
if (pl.p228_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_357sig) {
return;
}
Weapons_ReloadWeapon(pl, player::p228_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.p228_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::p228_mag, player::ammo_357sig, 13);
Weapons_UpdateAmmo(pl, pl.p228_mag, pl.ammo_357sig, -1);
#endif
Weapons_ViewAnimation(P228_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 2.7f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -181,11 +204,11 @@ void
w_p228_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [120/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -232,7 +255,7 @@ weapon_t w_p228 =
w_p228_primary,
__NULL__,
w_p228_reload,
__NULL__,
w_cstrike_weaponrelease,
w_p228_hud,
w_p228_precache,
w_p228_pickup,

View File

@ -38,7 +38,7 @@ void
w_p90_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.p90_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.p90_mag, pl.ammo_57mm, -1);
#endif
}
@ -69,8 +69,8 @@ w_p90_pickup(int new)
if (new) {
pl.p90_mag = 50;
} else {
if (pl.ammo_762mm < 100) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 50, 100);
if (pl.ammo_57mm < 100) {
pl.ammo_57mm = bound(0, pl.ammo_57mm + 50, 100);
} else {
return FALSE;
}
@ -82,9 +82,13 @@ w_p90_pickup(int new)
void
w_p90_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_p90.mdl");
Weapons_ViewAnimation(P90_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 7;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,12 +101,34 @@ w_p90_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.p90_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 175);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 26, [accuracy,accuracy], WEAPON_P90);
pl.p90_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_p90.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +143,9 @@ w_p90_primary(void)
Weapons_ViewAnimation(P90_SHOOT3);
break;
}
#else
if (!pl.p90_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 26, [0.01,0,01], WEAPON_P90);
pl.p90_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_p90.fire");
#endif
pl.w_attack_next = 0.07f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +168,17 @@ w_p90_reload(void)
if (pl.p90_mag >= 50) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_57mm) {
return;
}
Weapons_ReloadWeapon(pl, player::p90_mag, player::ammo_762mm, 50);
Weapons_UpdateAmmo(pl, pl.p90_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::p90_mag, player::ammo_57mm, 50);
Weapons_UpdateAmmo(pl, pl.p90_mag, pl.ammo_57mm, -1);
#endif
Weapons_ViewAnimation(P90_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.3f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +191,11 @@ void
w_p90_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [120/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +242,7 @@ weapon_t w_p90 =
w_p90_primary,
__NULL__,
w_p90_reload,
__NULL__,
w_cstrike_weaponrelease,
w_p90_hud,
w_p90_precache,
w_p90_pickup,

View File

@ -16,11 +16,10 @@
enum {
PARA_IDLE,
PARA_RELOAD,
PARA_DRAW,
PARA_SHOOT1,
PARA_SHOOT2,
PARA_SHOOT3
PARA_RELOAD,
PARA_DRAW
};
void
@ -38,7 +37,7 @@ void
w_para_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.para_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.para_mag, pl.ammo_556mmbox, -1);
#endif
}
@ -69,8 +68,8 @@ w_para_pickup(int new)
if (new) {
pl.para_mag = 100;
} else {
if (pl.ammo_762mm < 200) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 100, 200);
if (pl.ammo_556mmbox < 200) {
pl.ammo_556mmbox = bound(0, pl.ammo_556mmbox + 100, 200);
} else {
return FALSE;
}
@ -82,9 +81,13 @@ w_para_pickup(int new)
void
w_para_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_m249.mdl");
Weapons_ViewAnimation(PARA_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 6;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,33 +100,25 @@ w_para_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(PARA_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(PARA_SHOOT2);
break;
default:
Weapons_ViewAnimation(PARA_SHOOT3);
break;
}
#else
if (!pl.para_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 35, [0.01,0,01], WEAPON_PARA);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 175);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 35, [accuracy,accuracy], WEAPON_PARA);
pl.para_mag--;
if (self.flags & FL_CROUCHING)
@ -134,7 +129,20 @@ w_para_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_para.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(SCOUT_SHOOT1);
break;
default:
Weapons_ViewAnimation(SCOUT_SHOOT2);
break;
}
pl.w_attack_next = 0.1f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +165,17 @@ w_para_reload(void)
if (pl.para_mag >= 100) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_556mmbox) {
return;
}
Weapons_ReloadWeapon(pl, player::para_mag, player::ammo_762mm, 100);
Weapons_UpdateAmmo(pl, pl.para_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::para_mag, player::ammo_556mmbox, 100);
Weapons_UpdateAmmo(pl, pl.para_mag, pl.ammo_556mmbox, -1);
#endif
Weapons_ViewAnimation(PARA_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.0f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +188,11 @@ void
w_para_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +239,7 @@ weapon_t w_para =
w_para_primary,
__NULL__,
w_para_reload,
__NULL__,
w_cstrike_weaponrelease,
w_para_hud,
w_para_precache,
w_para_pickup,

View File

@ -16,11 +16,10 @@
enum {
SCOUT_IDLE,
SCOUT_RELOAD,
SCOUT_DRAW,
SCOUT_SHOOT1,
SCOUT_SHOOT2,
SCOUT_SHOOT3
SCOUT_RELOAD,
SCOUT_DRAW
};
void
@ -82,9 +81,13 @@ w_scout_pickup(int new)
void
w_scout_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_scout.mdl");
Weapons_ViewAnimation(SCOUT_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 5;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,33 +100,25 @@ w_scout_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(SCOUT_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(SCOUT_SHOOT2);
break;
default:
Weapons_ViewAnimation(SCOUT_SHOOT3);
break;
}
#else
if (!pl.scout_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 75, [0.01,0,01], WEAPON_SCOUT);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 75, [accuracy,accuracy], WEAPON_SCOUT);
pl.scout_mag--;
if (self.flags & FL_CROUCHING)
@ -134,7 +129,20 @@ w_scout_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_scout.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(SCOUT_SHOOT1);
break;
default:
Weapons_ViewAnimation(SCOUT_SHOOT2);
break;
}
pl.w_attack_next = 1.25f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -167,6 +175,7 @@ w_scout_reload(void)
Weapons_ViewAnimation(SCOUT_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +188,11 @@ void
w_scout_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [72/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +239,7 @@ weapon_t w_scout =
w_scout_primary,
__NULL__,
w_scout_reload,
__NULL__,
w_cstrike_weaponrelease,
w_scout_hud,
w_scout_precache,
w_scout_pickup,

View File

@ -16,11 +16,10 @@
enum {
SG550_IDLE,
SG550_RELOAD,
SG550_DRAW,
SG550_SHOOT1,
SG550_SHOOT2,
SG550_SHOOT3
SG550_RELOAD,
SG550_DRAW,
};
void
@ -38,7 +37,7 @@ void
w_sg550_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.sg550_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.sg550_mag, pl.ammo_556mm, -1);
#endif
}
@ -69,8 +68,8 @@ w_sg550_pickup(int new)
if (new) {
pl.sg550_mag = 30;
} else {
if (pl.ammo_762mm < 90) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, 90);
if (pl.ammo_556mm < 90) {
pl.ammo_556mm = bound(0, pl.ammo_556mm + 30, 90);
} else {
return FALSE;
}
@ -82,9 +81,13 @@ w_sg550_pickup(int new)
void
w_sg550_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_sg550.mdl");
Weapons_ViewAnimation(SG550_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 5;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,33 +100,25 @@ w_sg550_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(SG550_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(SG550_SHOOT2);
break;
default:
Weapons_ViewAnimation(SG550_SHOOT3);
break;
}
#else
if (!pl.sg550_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 70, [0.01,0,01], WEAPON_SG550);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 70, [accuracy,accuracy], WEAPON_SG550);
pl.sg550_mag--;
if (self.flags & FL_CROUCHING)
@ -134,7 +129,20 @@ w_sg550_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_sg550.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 2;
switch (r) {
case 0:
Weapons_ViewAnimation(SCOUT_SHOOT1);
break;
default:
Weapons_ViewAnimation(SCOUT_SHOOT2);
break;
}
pl.w_attack_next = 0.25f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +165,17 @@ w_sg550_reload(void)
if (pl.sg550_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_556mm) {
return;
}
Weapons_ReloadWeapon(pl, player::sg550_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.sg550_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::sg550_mag, player::ammo_556mm, 30);
Weapons_UpdateAmmo(pl, pl.sg550_mag, pl.ammo_556mm, -1);
#endif
Weapons_ViewAnimation(SG550_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.8f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +188,11 @@ void
w_sg550_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +239,7 @@ weapon_t w_sg550 =
w_sg550_primary,
__NULL__,
w_sg550_reload,
__NULL__,
w_cstrike_weaponrelease,
w_sg550_hud,
w_sg550_precache,
w_sg550_pickup,

View File

@ -38,7 +38,7 @@ void
w_sg552_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.sg552_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.sg552_mag, pl.ammo_556mm, -1);
#endif
}
@ -69,8 +69,8 @@ w_sg552_pickup(int new)
if (new) {
pl.sg552_mag = 30;
} else {
if (pl.ammo_762mm < 90) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, 90);
if (pl.ammo_556mm < 90) {
pl.ammo_556mm = bound(0, pl.ammo_556mm + 30, 90);
} else {
return FALSE;
}
@ -82,9 +82,13 @@ w_sg552_pickup(int new)
void
w_sg552_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_sg552.mdl");
Weapons_ViewAnimation(SG552_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 5;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,12 +101,35 @@ w_sg552_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.sg552_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 220);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 33, [accuracy,accuracy], WEAPON_SG552);
pl.sg552_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_sg552.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +144,9 @@ w_sg552_primary(void)
Weapons_ViewAnimation(SG552_SHOOT3);
break;
}
#else
if (!pl.sg552_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 33, [0.01,0,01], WEAPON_SG552);
pl.sg552_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_sg552.fire");
#endif
pl.w_attack_next = 0.0825f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +169,17 @@ w_sg552_reload(void)
if (pl.sg552_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_556mm) {
return;
}
Weapons_ReloadWeapon(pl, player::sg552_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.sg552_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::sg552_mag, player::ammo_556mm, 30);
Weapons_UpdateAmmo(pl, pl.sg552_mag, pl.ammo_556mm, -1);
#endif
Weapons_ViewAnimation(SG552_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.2f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +192,11 @@ void
w_sg552_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +243,7 @@ weapon_t w_sg552 =
w_sg552_primary,
__NULL__,
w_sg552_reload,
__NULL__,
w_cstrike_weaponrelease,
w_sg552_hud,
w_sg552_precache,
w_sg552_pickup,

View File

@ -105,6 +105,16 @@ w_smokegrenade_aimanim(void)
return w_flashbang_aimanim();
}
void
w_smokegrenade_hud(void)
{
#ifdef CSQC
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", [144/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
void
w_smokegrenade_hudpic(int selected, vector pos, float a)
{
@ -149,7 +159,7 @@ weapon_t w_smokegrenade =
__NULL__,
__NULL__,
__NULL__,
__NULL__,
w_smokegrenade_hud,
w_smokegrenade_precache,
__NULL__,
w_smokegrenade_updateammo,

View File

@ -38,7 +38,7 @@ void
w_tmp_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.tmp_mag, pl.ammo_762mm, -1);
Weapons_UpdateAmmo(pl, pl.tmp_mag, pl.ammo_9mm, -1);
#endif
}
@ -69,8 +69,8 @@ w_tmp_pickup(int new)
if (new) {
pl.tmp_mag = 30;
} else {
if (pl.ammo_762mm < 90) {
pl.ammo_762mm = bound(0, pl.ammo_762mm + 30, 90);
if (pl.ammo_9mm < 90) {
pl.ammo_9mm = bound(0, pl.ammo_9mm + 30, 90);
} else {
return FALSE;
}
@ -82,9 +82,13 @@ w_tmp_pickup(int new)
void
w_tmp_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_tmp.mdl");
Weapons_ViewAnimation(TMP_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 7;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,12 +101,34 @@ w_tmp_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.tmp_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 26, [accuracy,accuracy], WEAPON_TMP);
pl.tmp_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_tmp.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +143,9 @@ w_tmp_primary(void)
Weapons_ViewAnimation(TMP_SHOOT3);
break;
}
#else
if (!pl.tmp_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 26, [0.01,0,01], WEAPON_TMP);
pl.tmp_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_tmp.fire");
#endif
pl.w_attack_next = 0.07f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -157,16 +168,17 @@ w_tmp_reload(void)
if (pl.tmp_mag >= 30) {
return;
}
if (!pl.ammo_762mm) {
if (!pl.ammo_9mm) {
return;
}
Weapons_ReloadWeapon(pl, player::tmp_mag, player::ammo_762mm, 30);
Weapons_UpdateAmmo(pl, pl.tmp_mag, pl.ammo_762mm, -1);
Weapons_ReloadWeapon(pl, player::tmp_mag, player::ammo_9mm, 30);
Weapons_UpdateAmmo(pl, pl.tmp_mag, pl.ammo_9mm, -1);
#endif
Weapons_ViewAnimation(TMP_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 2.1f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,11 +191,11 @@ void
w_tmp_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [48/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -230,7 +242,7 @@ weapon_t w_tmp =
w_tmp_primary,
__NULL__,
w_tmp_reload,
__NULL__,
w_cstrike_weaponrelease,
w_tmp_hud,
w_tmp_precache,
w_tmp_pickup,

View File

@ -82,9 +82,13 @@ w_ump45_pickup(int new)
void
w_ump45_draw(void)
{
#ifdef CSQC
player pl = (player)self;
Weapons_SetModel("models/v_ump45.mdl");
Weapons_ViewAnimation(UMP45_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 6;
pl.cs_cross_deltadist = 3;
#endif
}
@ -97,12 +101,35 @@ w_ump45_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.ump45_mag) {
return;
}
#endif
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 210);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 30, [accuracy,accuracy], WEAPON_UMP45);
pl.ump45_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_ump45.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
@ -117,24 +144,9 @@ w_ump45_primary(void)
Weapons_ViewAnimation(UMP45_SHOOT3);
break;
}
#else
if (!pl.ump45_mag) {
return;
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 30, [0.01,0,01], WEAPON_UMP45);
pl.ump45_mag--;
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_ump45.fire");
#endif
pl.w_attack_next = 0.105f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -166,7 +178,8 @@ w_ump45_reload(void)
#endif
Weapons_ViewAnimation(UMP45_RELOAD);
pl.w_attack_next = 2.0f;
pl.w_attack_next = 3.5f;
pl.w_idle_next = pl.w_attack_next;
}
float
@ -179,10 +192,11 @@ void
w_ump45_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [96/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -229,7 +243,7 @@ weapon_t w_ump45 =
w_ump45_primary,
__NULL__,
w_ump45_reload,
__NULL__,
w_cstrike_weaponrelease,
w_ump45_hud,
w_ump45_precache,
w_ump45_pickup,

View File

@ -16,11 +16,21 @@
enum {
USP45_IDLE,
USP45_RELOAD,
USP45_DRAW,
USP45_SHOOT1,
USP45_SHOOT2,
USP45_SHOOT3
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
@ -28,13 +38,11 @@ w_usp45_precache(void)
{
#ifdef SSQC
Sound_Precache("weapon_usp45.fire");
Sound_Precache("weapon_usp45.silencer");
Sound_Precache("weapon_usp45.silenced");
#endif
precache_model("models/v_usp45.mdl");
precache_model("models/w_usp45.mdl");
precache_model("models/p_usp45.mdl");
precache_sound("weapons/usp45-1.wav");
precache_sound("weapons/usp45-2.wav");
precache_model("models/v_usp.mdl");
precache_model("models/w_usp.mdl");
precache_model("models/p_usp.mdl");
}
void
@ -85,9 +93,18 @@ w_usp45_pickup(int new)
void
w_usp45_draw(void)
{
player pl = (player)self;
Weapons_SetModel("models/v_usp.mdl");
if (pl.a_ammo3 == 1) {
Weapons_ViewAnimation(USP45_DRAW);
} else {
Weapons_ViewAnimation(USP45_DRAWUNSIL);
}
#ifdef CSQC
Weapons_SetModel("models/v_usp45.mdl");
Weapons_ViewAnimation(USP45_DRAW);
pl.cs_cross_mindist = 8;
pl.cs_cross_deltadist = 3;
#endif
}
@ -100,44 +117,114 @@ w_usp45_primary(void)
return;
}
#ifdef CSQC
if (!pl.a_ammo1) {
if (pl.flags & FL_SEMI_TOGGLED) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(USP45_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(USP45_SHOOT2);
break;
default:
Weapons_ViewAnimation(USP45_SHOOT3);
break;
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
#else
if (!pl.usp45_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 34, [0.01,0,01], WEAPON_USP45);
Cstrike_ShotMultiplierAdd(pl, 1);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
/* actual firing */
#ifdef CSQC
if (pl.a_ammo3 == 1) {
View_SetMuzzleflash(0);
} else {
View_SetMuzzleflash(MUZZLE_SMALL);
}
pl.a_ammo1--;
#else
pl.usp45_mag--;
/* Different sounds without silencer */
if (pl.a_ammo3 == 1) {
Sound_Play(pl, CHAN_WEAPON, "weapon_usp45.silenced");
} else {
Sound_Play(pl, CHAN_WEAPON, "weapon_usp45.fire");
}
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 33, [accuracy,accuracy], WEAPON_USP45);
if (self.flags & FL_CROUCHING)
Animation_PlayerTopTemp(ANIM_SHOOT1HAND, 0.45f);
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
Sound_Play(pl, CHAN_WEAPON, "weapon_usp45.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
pl.w_attack_next = 0.15f;
/* this stuff is predicted */
int r = (float)input_sequence % 3;
if (pl.a_ammo3 == 1) {
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(USP45_SHOOTLAST);
} else {
switch (r) {
case 0:
Weapons_ViewAnimation(USP45_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(USP45_SHOOT2);
break;
default:
Weapons_ViewAnimation(USP45_SHOOT3);
break;
}
}
} else {
if (pl.a_ammo1 <= 0) {
Weapons_ViewAnimation(USP45_SHOOTLASTUNSIL);
} else {
switch (r) {
case 0:
Weapons_ViewAnimation(USP45_SHOOT1UNSIL);
break;
case 1:
Weapons_ViewAnimation(USP45_SHOOT2UNSIL);
break;
default:
Weapons_ViewAnimation(USP45_SHOOT3UNSIL);
break;
}
}
}
pl.flags |= FL_SEMI_TOGGLED;
pl.w_attack_next = 0.0875f;
pl.w_idle_next = pl.w_attack_next;
}
void
w_usp45_secondary(void)
{
player pl = (player)self;
if (pl.w_attack_next > 0) {
return;
}
/* toggle silencer */
pl.a_ammo3 = 1 - pl.a_ammo3;
/* play the animation */
if (pl.a_ammo3) {
Weapons_ViewAnimation(USP45_ADDSIL);
} else {
Weapons_ViewAnimation(USP45_DETACHSIL);
}
pl.w_attack_next = 2.0f;
pl.w_idle_next = pl.w_attack_next;
}
void
@ -168,8 +255,13 @@ w_usp45_reload(void)
Weapons_UpdateAmmo(pl, pl.usp45_mag, pl.ammo_45acp, -1);
#endif
Weapons_ViewAnimation(USP45_RELOAD);
pl.w_attack_next = 2.0f;
if (pl.a_ammo3 == 1) {
Weapons_ViewAnimation(USP45_RELOAD);
} else {
Weapons_ViewAnimation(USP45_RELOADUNSIL);
}
pl.w_attack_next = 2.5f;
}
float
@ -182,11 +274,11 @@ void
w_usp45_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [96/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -231,9 +323,9 @@ weapon_t w_usp45 =
w_usp45_draw,
__NULL__,
w_usp45_primary,
__NULL__,
w_usp45_secondary,
w_usp45_reload,
__NULL__,
w_cstrike_weaponrelease,
w_usp45_hud,
w_usp45_precache,
w_usp45_pickup,

View File

@ -16,11 +16,20 @@
enum {
XM1014_IDLE,
XM1014_RELOAD,
XM1014_DRAW,
XM1014_SHOOT1,
XM1014_SHOOT2,
XM1014_SHOOT3
XM1014_INSERT,
XM1014_RELOAD_END,
XM1014_RELOAD_START,
XM1014_DRAW
};
enum
{
XM1014S_IDLE,
XM1014S_RELOAD_START,
XM1014S_RELOAD,
XM1014S_RELOAD_END
};
void
@ -28,6 +37,7 @@ w_xm1014_precache(void)
{
#ifdef SSQC
Sound_Precache("weapon_xm1014.fire");
Sound_Precache("weapon_xm1014.insertshell");
#endif
precache_model("models/v_xm1014.mdl");
precache_model("models/w_xm1014.mdl");
@ -38,7 +48,7 @@ void
w_xm1014_updateammo(player pl)
{
#ifdef SSQC
Weapons_UpdateAmmo(pl, pl.xm1014_mag, pl.ammo_buckshot, -1);
Weapons_UpdateAmmo(pl, pl.xm1014_mag, pl.ammo_buckshot, pl.a_ammo3);
#endif
}
@ -82,8 +92,14 @@ w_xm1014_pickup(int new)
void
w_xm1014_draw(void)
{
player pl = (player)self;
Weapons_SetModel("models/v_xm1014.mdl");
Weapons_ViewAnimation(XM1014_DRAW);
#ifdef CSQC
pl.cs_cross_mindist = 9;
pl.cs_cross_deltadist = 4;
#endif
}
void
@ -95,33 +111,25 @@ w_xm1014_primary(void)
return;
}
/* ammo check */
#ifdef CSQC
if (!pl.a_ammo1) {
return;
}
View_SetMuzzleflash(MUZZLE_RIFLE);
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(XM1014_SHOOT1);
break;
case 1:
Weapons_ViewAnimation(XM1014_SHOOT2);
break;
default:
Weapons_ViewAnimation(XM1014_SHOOT3);
break;
}
#else
if (!pl.xm1014_mag) {
return;
}
#endif
TraceAttack_FireBullets(1, pl.origin + pl.view_ofs, 22, [0.01,0,01], WEAPON_XM1014);
Cstrike_ShotMultiplierAdd(pl, 6);
float accuracy = Cstrike_CalculateAccuracy(pl, 200);
#ifdef CSQC
pl.a_ammo1--;
View_SetMuzzleflash(MUZZLE_RIFLE);
#else
TraceAttack_FireBullets(6, pl.origin + pl.view_ofs, 22, [accuracy,accuracy], WEAPON_XM1014);
pl.xm1014_mag--;
if (self.flags & FL_CROUCHING)
@ -132,38 +140,89 @@ w_xm1014_primary(void)
Sound_Play(pl, CHAN_WEAPON, "weapon_xm1014.fire");
#endif
Weapons_ViewPunchAngle([-2,0,0]);
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(XM1014_SHOOT1);
break;
default:
Weapons_ViewAnimation(XM1014_SHOOT2);
break;
}
pl.w_attack_next = 0.25f;
pl.w_idle_next = pl.w_attack_next;
}
void
w_xm1014_reload(void)
{
player pl = (player)self;
if (pl.w_attack_next > 0.0) {
return;
}
#ifdef CSQC
if (pl.a_ammo1 >= 7) {
return;
}
if (!pl.a_ammo2) {
if (pl.a_ammo2 <= 0) {
return;
}
#else
if (pl.xm1014_mag >= 7) {
return;
}
if (!pl.ammo_buckshot) {
if (pl.ammo_buckshot <= 0) {
return;
}
#endif
if (pl.a_ammo3 > XM1014S_IDLE) {
return;
}
pl.a_ammo3 = XM1014S_RELOAD_START;
pl.w_idle_next = 0.0f;
}
void
w_xm1014_release(void)
{
player pl = (player)self;
w_cstrike_weaponrelease();
if (pl.w_idle_next > 0.0) {
return;
}
Weapons_ReloadWeapon(pl, player::xm1014_mag, player::ammo_buckshot, 7);
#endif
if (pl.a_ammo3 == XM1014S_RELOAD_START) {
Weapons_ViewAnimation(XM1014_RELOAD_START);
pl.a_ammo3 = XM1014S_RELOAD;
pl.w_idle_next = 0.65f;
} else if (pl.a_ammo3 == XM1014S_RELOAD) {
Weapons_ViewAnimation(XM1014_INSERT);
#ifdef CSQC
pl.a_ammo1++;
pl.a_ammo2--;
Weapons_ViewAnimation(XM1014_RELOAD);
pl.w_attack_next = 2.0f;
if (pl.a_ammo2 <= 0 || pl.a_ammo1 >= 7) {
pl.a_ammo3 = XM1014S_RELOAD_END;
}
#else
pl.xm1014_mag++;
pl.ammo_buckshot--;
w_xm1014_updateammo(pl);
Sound_Play(pl, CHAN_WEAPON, "weapon_xm1014.insertshell");
if (pl.ammo_buckshot <= 0 || pl.xm1014_mag >= 7) {
pl.a_ammo3 = XM1014S_RELOAD_END;
}
#endif
pl.w_idle_next = 0.5f;
} else if (pl.a_ammo3 == XM1014S_RELOAD_END) {
Weapons_ViewAnimation(XM1014_RELOAD_END);
pl.a_ammo3 = XM1014S_IDLE;
pl.w_idle_next = 10.0f;
pl.w_attack_next = 0.5f;
}
}
float
@ -176,11 +235,11 @@ void
w_xm1014_hud(void)
{
#ifdef CSQC
Cstrike_DrawCrosshair();
HUD_DrawAmmo1();
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", [0,72/128], [24/256, 24/128], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#endif
}
@ -227,7 +286,7 @@ weapon_t w_xm1014 =
w_xm1014_primary,
__NULL__,
w_xm1014_reload,
__NULL__,
w_xm1014_release,
w_xm1014_hud,
w_xm1014_precache,
w_xm1014_pickup,

View File

@ -48,12 +48,43 @@ enum
};
#define AMMO_MAX_50AE 35
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [24/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_762MM 90
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [72/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_556MM 90
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_556MMBOX 200
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_338MAG 30
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [24/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_9MM 150
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [48/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_BUCKSHOT 32
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_45ACP 100
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [96/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_357SIG 52
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [120/256,72/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
#define AMMO_MAX_57MM 100
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [120/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
// flashbang
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [48/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
// he
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [72/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
// smoke
// drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [144/256,96/256], [24/256, 24/256], g_hud_color, pSeat->ammo2_alpha, DRAWFLAG_ADDITIVE);
// c4
// 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);

View File

@ -0,0 +1,57 @@
/*
* Copyright (c) 2016-2020 Marco Hladik <marco@icculus.org>
*
* 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.
*/
/* called whenever a cstrike gun fires a successful shot */
void
Cstrike_ShotMultiplierAdd(player pl, int shots)
{
/* more than 12 is enough, you can barely hit the barn */
pl.cs_shotmultiplier = bound(0, pl.cs_shotmultiplier + shots, 12);
pl.cs_shottime = 0.2f;
pl.punchangle[0] = -2 * (pl.cs_shotmultiplier / 6);
pl.punchangle[1] = random(-1, 1);
}
/* generate an accuracy value that we'll pass onto TraceAttack */
float
Cstrike_CalculateAccuracy(player pl, float divisor)
{
if (divisor == -1) {
/* snipers shoot way less accurate overall. */
return (pl.viewzoom < 1.0f) ? 0.0f : 0.05;
} else {
return (pl.cs_shotmultiplier / divisor);
}
}
/* called whenever cstrike guns aren't firing */
void
Cstrike_ShotMultiplierUpdate(player pl)
{
if ((pl.cs_shotmultiplier > 0) && (pl.cs_shottime <= 0.0f)) {
pl.cs_shottime = pl.w_attack_next + 0.01;
pl.cs_shotmultiplier--;
}
pl.cs_shottime = max(0, pl.cs_shottime - input_timelength);
}
void
w_cstrike_weaponrelease(void)
{
player pl = (player)self;
Cstrike_ShotMultiplierUpdate(pl);
}

View File

@ -65,5 +65,7 @@ enumflags {
PLAYER_FRAME,
PLAYER_AMMO1,
PLAYER_AMMO2,
PLAYER_AMMO3
PLAYER_AMMO3,
PLAYER_CSSHOT,
PLAYER_CSSHOTTIME
};

View File

@ -134,7 +134,6 @@ void
w_medkit_release(void)
{
player pl = (player)self;
int r;
if (pl.w_idle_next > 0.0) {
return;

View File

@ -96,11 +96,7 @@ w_bradnailer_shootnail(void)
Effect_CreateSpark(self.origin, trace_plane_normal);
if (other.takedamage == DAMAGE_YES) {
Damage_Apply(other, self.owner, 15, WEAPON_BRADNAILER, DMG_GENERIC);
if (random() < 0.5) {
Weapons_PlaySound(self, CHAN_WEAPON, "weapons/brad_hit1.wav", 1, ATTN_NORM);
} else {
Weapons_PlaySound(self, CHAN_WEAPON, "weapons/brad_hit2.wav", 1, ATTN_NORM);
}
Sound_Play(self, CHAN_WEAPON, "weapon_bradnailer.hitbody");
} else {
Weapons_PlaySound(self, CHAN_WEAPON, "weapons/xbow_hit1.wav", 1, ATTN_NORM);
}
@ -125,7 +121,7 @@ w_bradnailer_shootnail(void)
else
Animation_PlayerTopTemp(ANIM_CR_SHOOT1HAND, 0.45f);
sound(pl, CHAN_WEAPON, "weapons/bradnailer.wav", 1, ATTN_NORM);
Sound_Play(pl, CHAN_WEAPON, "weapon_bradnailer.fire");
}
#endif
@ -196,7 +192,7 @@ w_bradnailer_release(void)
return;
}
int r = floor(random(0,3));
int r = (float)input_sequence % 3;
switch (r) {
case 0:
Weapons_ViewAnimation(BNAIL_IDLE1);

View File

@ -49,7 +49,7 @@ FXGauss::Draw(void)
src = m_vecStart;
makevectors(m_vecAngle);
vector endpos = src + v_forward * 1024;
endpos = src + v_forward * 1024;
traceline(src, endpos, FALSE, pl);
/* drawing the first bit */
@ -269,7 +269,7 @@ void w_gauss_primary(void)
FXGauss p = (FXGauss)pSeat->pWeaponFX;
p.m_iBeams = 0;
p.m_vecAngle = input_angles;
p.m_vecStart = pl.net_origin + pl.view_ofs;
p.m_vecStart = pl.origin + pl.view_ofs;
p.alpha = 1.0f;
pl.a_ammo2 -= 2;
Weapons_ViewPunchAngle([-2,0,0]);
@ -361,7 +361,7 @@ void w_gauss_release(void)
FXGauss p = (FXGauss)pSeat->pWeaponFX;
p.m_iBeams = 1;
p.m_vecAngle = input_angles;
p.m_vecStart = pl.net_origin + pl.view_ofs;
p.m_vecStart = pl.origin + pl.view_ofs;
p.alpha = 1.0f;
soundupdate(pl, CHAN_WEAPON, "", -1, ATTN_NORM, 0, 0, 0);
Weapons_ViewPunchAngle([-5,0,0]);

View File

@ -186,6 +186,7 @@ void w_shotgun_secondary(void)
pl.w_attack_next = 1.5f;
pl.w_idle_next = 2.5f;
}
void w_shotgun_reload(void)
{
player pl = (player)self;
@ -211,6 +212,7 @@ void w_shotgun_reload(void)
pl.a_ammo3 = SHOTTY_RELOAD_START;
pl.w_idle_next = 0.0f;
}
void w_shotgun_release(void)
{
player pl = (player)self;

View File

@ -123,6 +123,8 @@ void Weapons_Release(void)
if (g_weapons[i].release != __NULL__) {
g_weapons[i].release();
}
pl.flags &= ~FL_SEMI_TOGGLED;
}
void Weapons_DrawCrosshair(void)