]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/tf_w_railgun.c
Morphed's new Nex model
[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         org = self.origin + self.view_ofs + v_forward * 5 + v_right * 1 + v_up * -1;    // better accuracy\r
42         end = self.origin + self.view_ofs + v_forward * 4096;\r
43 \r
44 //      FireRailgunBullet (org, end, cvar("g_balance_railgun_damage"), WEP_RAILGUN);\r
45         FireRailgunBullet (org, end, 35, WEP_RAILGUN);          //temp till I add damage var\r
46 \r
47         // trace as if shot started inside gun\r
48         traceline (org, end, TRUE, self);\r
49         // show as if shot started outside of gun\r
50         org = self.origin + self.view_ofs + v_forward * 28 + v_right * 14 + v_up * -7;\r
51         // muzzleflash light\r
52         te_smallflash (org);\r
53         // beam effect\r
54         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
55         WriteByte (MSG_BROADCAST, 76);\r
56         WriteCoord (MSG_BROADCAST, org_x);\r
57         WriteCoord (MSG_BROADCAST, org_y);\r
58         WriteCoord (MSG_BROADCAST, org_z);\r
59         WriteCoord (MSG_BROADCAST, trace_endpos_x);\r
60         WriteCoord (MSG_BROADCAST, trace_endpos_y);\r
61         WriteCoord (MSG_BROADCAST, trace_endpos_z);\r
62         WriteCoord (MSG_BROADCAST, 0);\r
63         WriteCoord (MSG_BROADCAST, 0);\r
64         WriteCoord (MSG_BROADCAST, 0);\r
65         // flash and burn the wall\r
66         te_plasmaburn (trace_endpos);\r
67         /*\r
68         // flame effect at impact\r
69         dir = trace_plane_normal * 100;\r
70         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
71         WriteByte (MSG_BROADCAST, TE_FLAMEJET);\r
72         WriteCoord (MSG_BROADCAST, trace_endpos_x);\r
73         WriteCoord (MSG_BROADCAST, trace_endpos_y);\r
74         WriteCoord (MSG_BROADCAST, trace_endpos_z);\r
75         WriteCoord (MSG_BROADCAST, dir_x);\r
76         WriteCoord (MSG_BROADCAST, dir_y);\r
77         WriteCoord (MSG_BROADCAST, dir_z);\r
78         WriteByte (MSG_BROADCAST, 255);\r
79         */\r
80         // play a sound\r
81         PointSound (trace_endpos, "weapons/RailGunimpact.wav", 1, ATTN_NORM);\r
82 \r
83         if (cvar("g_instagib") == 0)\r
84 //              self.ammo_cells = self.ammo_cells - 5;\r
85                 self.ammo_shells = self.ammo_shells - 5;\r
86 \r
87         flash = spawn ();\r
88         org = self.origin + self.view_ofs + v_forward * 33 + v_right * 14 + v_up * -7;\r
89         setorigin (flash, org);\r
90         setmodel (flash, "models/nexflash.md3");\r
91         flash.velocity = v_forward * 20;\r
92         flash.angles = vectoangles (flash.velocity);\r
93         SUB_SetFade (flash, time, 0.4);\r
94         flash.effects = flash.effects | EF_ADDITIVE | EF_FULLBRIGHT;\r
95 }\r
96 \r
97 // weapon frames\r
98 void()  railgun_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, railgun_ready_01); self.weaponentity.state = WS_READY;};\r
99 void()  railgun_select_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
100 void()  railgun_deselect_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
101 void()  railgun_fire1_01 =\r
102 {\r
103         weapon_doattack(railgun_check, railgun_check, W_RailGun_Attack);\r
104 //      weapon_thinkf(WFRAME_FIRE1, 0.3, railgun_ready_01);\r
105         weapon_thinkf(WFRAME_FIRE1, 0.9, railgun_ready_01);\r
106 };\r