]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tf_w_railgun.c
-Fixed Engineer bug where holding down +use key near a building would sprint spam...
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / tf_w_railgun.c
1 void() railgun_ready_01;\r
2 void() railgun_fire1_01;\r
3 void() railgun_deselect_01;\r
4 void() railgun_select_01;\r
5 \r
6 float() railgun_check =\r
7 {\r
8         if (self.ammo_shells >= 5)\r
9                 return TRUE;\r
10         return FALSE;\r
11 };\r
12 \r
13 void(float req) w_railgun =\r
14 {\r
15         if (req == WR_IDLE)\r
16                 railgun_ready_01();\r
17         else if (req == WR_FIRE1)\r
18                 weapon_prepareattack(railgun_check, railgun_check, railgun_fire1_01, .5/*cvar("g_balance_nex_refire")*/);\r
19         else if (req == WR_RAISE)\r
20                 railgun_select_01();\r
21         else if (req == WR_UPDATECOUNTS)\r
22                 self.currentammo = floor(self.ammo_shells/* / 5*/);\r
23         else if (req == WR_DROP)\r
24                 railgun_deselect_01();\r
25         else if (req == WR_SETUP)\r
26                 weapon_setup(WEP_RAILGUN, "w_railgun.zym", IT_SHELLS);\r
27         else if (req == WR_CHECKAMMO)\r
28                 weapon_hasammo = railgun_check();\r
29 };\r
30 \r
31 \r
32 void W_RailGun_Attack (void)\r
33 {\r
34         local vector org;\r
35         local vector end;\r
36         local entity flash;\r
37 \r
38         sound (self, CHAN_WEAPON, "weapons/RailGunfire.wav", 1, ATTN_NORM);\r
39         self.punchangle_x = -5;\r
40         org = self.origin + self.view_ofs + v_forward * 5 + v_right * 14 + v_up * -7;\r
41         end = self.origin + self.view_ofs + v_forward * 4096;\r
42 \r
43 //      FireRailgunBullet (org, end, cvar("g_balance_railgun_damage"), WEP_RAILGUN);\r
44         FireRailgunBullet (org, end, 35, WEP_RAILGUN);          //temp -- i want to add area damage\r
45 \r
46         // trace as if shot started inside gun\r
47         traceline (org, end, TRUE, self);\r
48         // show as if shot started outside of gun\r
49         org = self.origin + self.view_ofs + v_forward * 28 + v_right * 14 + v_up * -7;\r
50         // muzzleflash light\r
51         te_smallflash (org);\r
52         // beam effect\r
53         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
54         WriteByte (MSG_BROADCAST, 76);\r
55         WriteCoord (MSG_BROADCAST, org_x);\r
56         WriteCoord (MSG_BROADCAST, org_y);\r
57         WriteCoord (MSG_BROADCAST, org_z);\r
58         WriteCoord (MSG_BROADCAST, trace_endpos_x);\r
59         WriteCoord (MSG_BROADCAST, trace_endpos_y);\r
60         WriteCoord (MSG_BROADCAST, trace_endpos_z);\r
61         WriteCoord (MSG_BROADCAST, 0);\r
62         WriteCoord (MSG_BROADCAST, 0);\r
63         WriteCoord (MSG_BROADCAST, 0);\r
64         // flash and burn the wall\r
65         te_plasmaburn (trace_endpos);\r
66         /*\r
67         // flame effect at impact\r
68         dir = trace_plane_normal * 100;\r
69         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
70         WriteByte (MSG_BROADCAST, TE_FLAMEJET);\r
71         WriteCoord (MSG_BROADCAST, trace_endpos_x);\r
72         WriteCoord (MSG_BROADCAST, trace_endpos_y);\r
73         WriteCoord (MSG_BROADCAST, trace_endpos_z);\r
74         WriteCoord (MSG_BROADCAST, dir_x);\r
75         WriteCoord (MSG_BROADCAST, dir_y);\r
76         WriteCoord (MSG_BROADCAST, dir_z);\r
77         WriteByte (MSG_BROADCAST, 255);\r
78         */\r
79         // play a sound\r
80         PointSound (trace_endpos, "weapons/RailGunimpact.wav", 1, ATTN_NORM);\r
81 \r
82         if (cvar("g_instagib") == 0)\r
83 //              self.ammo_cells = self.ammo_cells - 5;\r
84                 self.ammo_shells = self.ammo_shells - 5;\r
85 \r
86         flash = spawn ();\r
87         org = self.origin + self.view_ofs + v_forward * 33 + v_right * 14 + v_up * -7;\r
88         setorigin (flash, org);\r
89         setmodel (flash, "models/nexflash.md3");\r
90         flash.velocity = v_forward * 20;\r
91         flash.angles = vectoangles (flash.velocity);\r
92         SUB_SetFade (flash, time, 0.4);\r
93         flash.effects = flash.effects | EF_ADDITIVE | EF_FULLBRIGHT;\r
94 }\r
95 \r
96 // weapon frames\r
97 void()  railgun_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, railgun_ready_01); self.weaponentity.state = WS_READY;};\r
98 void()  railgun_select_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
99 void()  railgun_deselect_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
100 void()  railgun_fire1_01 =\r
101 {\r
102         weapon_doattack(railgun_check, railgun_check, W_RailGun_Attack);\r
103 //      weapon_thinkf(WFRAME_FIRE1, 0.3, railgun_ready_01);\r
104         weapon_thinkf(WFRAME_FIRE1, 0.9, railgun_ready_01);\r
105 };\r