]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/server/gamec/w_shotgun.c
fixed weapon firing animations to use check2 functions where appropriate
[divverent/nexuiz.git] / data / qcsrc / server / gamec / w_shotgun.c
1 void() shotgun_ready_01;
2 void() shotgun_fire1_01;
3 void() shotgun_fire2_01;
4 void() shotgun_deselect_01;
5 void() shotgun_select_01;
6
7 float() shotgun_check =
8 {
9         if (self.ammo_shells >= cvar("g_balance_shotgun_primary_ammo"))
10                 return TRUE;
11         return FALSE;
12 };
13
14 float() shotgun_check2 =
15 {
16         if (self.ammo_shells >= cvar("g_balance_shotgun_secondary_ammo"))
17                 return TRUE;
18         return FALSE;
19 };
20
21 void(float req) w_shotgun =
22 {
23         if (req == WR_IDLE)
24                 shotgun_ready_01();
25         else if (req == WR_FIRE1)
26                 weapon_prepareattack(shotgun_check, shotgun_check, shotgun_fire1_01, cvar("g_balance_shotgun_primary_refire"));
27         else if (req == WR_FIRE2)
28                 weapon_prepareattack(shotgun_check2, shotgun_check2, shotgun_fire2_01, cvar("g_balance_shotgun_secondary_refire"));
29         else if (req == WR_RAISE)
30                 shotgun_select_01();
31         else if (req == WR_UPDATECOUNTS)
32                 self.currentammo = self.ammo_shells;
33         else if (req == WR_DROP)
34                 shotgun_deselect_01();
35         else if (req == WR_SETUP)
36                 weapon_setup(WEP_SHOTGUN, "w_shotgun.zym", IT_SHELLS);
37         else if (req == WR_CHECKAMMO)
38                 weapon_hasammo = shotgun_check() + shotgun_check2();
39 };
40
41 void W_Shotgun_Attack (void)
42 {
43         local vector org;
44         float   sc;
45         float   bullets;
46         float   d;
47         float   spread;
48
49         local vector trueaim;
50         trueaim = W_TrueAim();
51
52         sound (self, CHAN_WEAPON, "weapons/shotgun_fire.ogg", 1, ATTN_NORM);
53         if (self.items & IT_STRENGTH) {
54                 sound (self, CHAN_AUTO, "weapons/strength_fire.ogg", 1, ATTN_NORM);
55         }
56
57         bullets = cvar("g_balance_shotgun_primary_bullets");
58         d = cvar("g_balance_shotgun_primary_damage");
59
60         org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 5);
61         spread = cvar("g_balance_shotgun_primary_spread");
62         for (sc = 0;sc < bullets;sc = sc + 1)
63                 fireBullet (org, normalize(trueaim - org), spread, d, IT_SHOTGUN, sc < 3);
64         if (cvar("g_use_ammunition"))
65                 self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_primary_ammo");
66
67         // casing code
68         if (cvar("g_casings") >= 1)
69         {
70                 org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 10);
71                 SpawnCasing (org, ((random () * 50 + 50) * v_right) - ((random () * 25 + 25) * v_forward) - ((random () * 5 + 10) * v_up), 2, v_forward,'0 250 0', 100, 1);
72         }
73
74         org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 20);
75         W_Smoke(org, v_forward, 12);
76         //te_smallflash(org);
77
78         self.punchangle_x = -5;
79 }
80
81 void W_Shotgun_Attack2 (void)
82 {
83         local vector org;
84         float   sc;
85         float   bullets;
86         float   d;
87         float   spread;
88
89         local vector trueaim;
90         trueaim = W_TrueAim();
91
92         sound (self, CHAN_WEAPON, "weapons/shotgun_fire.ogg", 1, ATTN_NORM);
93         if (self.items & IT_STRENGTH) {
94                 sound (self, CHAN_AUTO, "weapons/strength_fire.ogg", 1, ATTN_NORM);
95         }
96
97         bullets = cvar("g_balance_shotgun_secondary_bullets");
98         d = cvar("g_balance_shotgun_secondary_damage");
99
100         org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 5);
101         spread = cvar("g_balance_shotgun_secondary_spread");
102         for (sc = 0;sc < bullets;sc = sc + 1)
103                 fireBullet (org, normalize(trueaim - org), spread, d, IT_SHOTGUN, sc < 3);
104         if (cvar("g_use_ammunition"))
105                 self.ammo_shells = self.ammo_shells - cvar("g_balance_shotgun_secondary_ammo");
106
107         // casing code
108         if (cvar("g_casings") >= 1)
109         {
110                 org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 10);
111                 SpawnCasing (org, ((random () * 50 + 50) * v_right) - ((random () * 25 + 25) * v_forward) - ((random () * 5 + 10) * v_up), 2, v_forward,'0 250 0', 100, 1);
112         }
113
114         org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 20);
115         W_Smoke(org, v_forward, 12);
116         //te_smallflash(org);
117
118         self.punchangle_x = -5;
119 }
120
121 // weapon frames
122
123 void()  shotgun_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, shotgun_ready_01); self.weaponentity.state = WS_READY;};
124 void()  shotgun_select_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};
125 void()  shotgun_deselect_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};
126 void()  shotgun_fire1_01 =
127 {
128         weapon_doattack(shotgun_check, shotgun_check, W_Shotgun_Attack);
129         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_shotgun_primary_animtime"), shotgun_ready_01);
130 };
131 void()  shotgun_fire2_03 =
132 {
133         weapon_doattack(shotgun_check2, shotgun_check2, W_Shotgun_Attack2);
134         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_shotgun_secondary_animtime"), shotgun_ready_01);
135 }
136 void()  shotgun_fire2_02 =
137 {
138         weapon_doattack(shotgun_check2, shotgun_check2, W_Shotgun_Attack2);
139         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_shotgun_secondary_animtime"), shotgun_fire2_03);
140 }
141 void()  shotgun_fire2_01 =
142 {
143         weapon_doattack(shotgun_check2, shotgun_check2, W_Shotgun_Attack2);
144         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_shotgun_secondary_animtime"), shotgun_fire2_02);
145 }