]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tf_w_pistol.c
- Added TrueAim(tm)
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / tf_w_pistol.c
1 void() pistol_ready_01;\r
2 void() pistol_fire1_01;\r
3 void() pistol_fire2_01;\r
4 void() pistol_deselect_01;\r
5 void() pistol_select_01;\r
6 \r
7 float() pistol_check =\r
8 {\r
9         if (self.ammo_shells >= 1)\r
10                 return TRUE;\r
11         return FALSE;\r
12 };\r
13 \r
14 void(float req) w_pistol =\r
15 {\r
16         if (self.next_pistol_fire > time)\r
17                 return;\r
18         if (req == WR_IDLE)\r
19                 pistol_ready_01();\r
20         else if (req == WR_FIRE1)\r
21                 weapon_prepareattack(pistol_check, pistol_check, pistol_fire1_01, cvar("g_balance_pistol_refire"));\r
22         else if (req == WR_FIRE2)\r
23                 stuffcmd(self, "reload\n");\r
24         else if (req == WR_RAISE)\r
25                 pistol_select_01();\r
26         else if (req == WR_UPDATECOUNTS)\r
27                 self.currentammo = self.ammo_shells;\r
28         else if (req == WR_DROP)\r
29                 pistol_deselect_01();\r
30         else if (req == WR_SETUP)\r
31                 weapon_setup(WEP_PISTOL, "w_soldpistol.zym", IT_SHELLS);\r
32         else if (req == WR_CHECKAMMO)\r
33                 weapon_hasammo = pistol_check();\r
34 };\r
35 \r
36 void W_Pistol_Attack (void)\r
37 {\r
38         local vector org;\r
39         float   sc;\r
40         float   bullets;\r
41         float   d;\r
42         float   spread;\r
43 \r
44         local vector end;\r
45         local vector trueaim;\r
46         org = self.origin + self.view_ofs;\r
47         end = self.origin + self.view_ofs + v_forward * 4096;\r
48         traceline(org,end,TRUE,self);\r
49         \r
50         trueaim = trace_endpos;\r
51 \r
52         sound (self, CHAN_WEAPON, "weapons/pistol_fire.wav", 1, ATTN_NORM);\r
53         bullets = cvar("g_balance_pistol_bullets");\r
54 \r
55         d = cvar("g_balance_pistol_damage");\r
56 \r
57         org = self.origin + self.view_ofs + (v_right * 1) - (v_up * 1) + (v_forward * 25);\r
58         spread = cvar("g_balance_pistol_spread");\r
59         for (sc = 0;sc < bullets;sc = sc + 1)\r
60 //              fireBullet (org, v_forward, spread, d, IT_PISTOL, sc < 3);\r
61                 fireBullet (org, normalize(trueaim - org), spread, d, WEP_PISTOL, sc < 3);\r
62         if (cvar("g_use_ammunition"))\r
63                 self.ammo_shells = self.ammo_shells - 1;\r
64 \r
65 /*              local entity e;\r
66                 e = spawn();\r
67                 e.owner = self;\r
68                 e.movetype = MOVETYPE_FLY;\r
69                 e.solid = SOLID_NOT;\r
70                 e.think = SUB_Remove;\r
71                 e.nextthink = time + vlen(trace_endpos - self.origin) / 6000;\r
72                 e.velocity = v_forward * 1000;\r
73                 e.angles = vectoangles (v_forward);\r
74                 e.scale = .3;\r
75 //              soonmodel (e, "models/tracer.mdl", .1);\r
76                 setmodel (e, "models/tracer.mdl");\r
77                 setsize (e, '0 0 0', '0 0 0');\r
78                 setorigin (e, org);\r
79                 e.effects = e.effects | EF_ADDITIVE;*/\r
80 \r
81 \r
82         // casing code\r
83         if (cvar("g_casings") >= 1)\r
84         {\r
85                 org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 10);\r
86                 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);\r
87         }\r
88 \r
89         org = self.origin + self.view_ofs + (v_right * 6) - (v_up * 8) + (v_forward * 20);\r
90         //W_Smoke(org, v_forward, 12);\r
91         //te_smallflash(org);\r
92 \r
93         self.punchangle_x = -1;\r
94 \r
95         self.clip_pistol = self.clip_pistol - 1;\r
96         if (self.clip_pistol <= 0)\r
97         {\r
98                 DoReload (1, CLIP_MAX_PISTOL);  // weapon type 1 is pistol\r
99         }\r
100 }\r
101 // weapon frames\r
102 \r
103 void()  pistol_ready_01 =       {weapon_thinkf(WFRAME_IDLE, 0.1, pistol_ready_01); self.weaponentity.state = WS_READY;};\r
104 void()  pistol_select_01 =      {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
105 void()  pistol_deselect_01 =    {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
106 void()  pistol_fire1_01 =\r
107 {\r
108         self.pistol_fired = 1;\r
109         weapon_doattack(pistol_check, pistol_check, W_Pistol_Attack);\r
110         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_pistol_refire2"), pistol_ready_01);\r
111 };\r
112 void()  pistol_fire2_03 =\r
113 {\r
114         weapon_doattack(pistol_check, pistol_check, W_Pistol_Attack);\r
115         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_pistol_refire2"), pistol_ready_01);\r
116 }\r
117 void()  pistol_fire2_02 =\r
118 {\r
119         weapon_doattack(pistol_check, pistol_check, W_Pistol_Attack);\r
120         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_pistol_refire2"), pistol_fire2_03);\r
121 }\r
122 void()  pistol_fire2_01 =\r
123 {\r
124         weapon_doattack(pistol_check, pistol_check, W_Pistol_Attack);\r
125         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_pistol_refire2"), pistol_fire2_02);\r
126 }