]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_nex.c
bumps for morphed's teleporter model
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / w_nex.c
1 void() nex_ready_01;\r
2 void() nex_fire1_01;\r
3 void() nex_deselect_01;\r
4 void() nex_select_01;\r
5 \r
6 float() nex_check =\r
7 {\r
8         if (self.ammo_cells >= 5)\r
9                 return TRUE;\r
10         return FALSE;\r
11 };\r
12 \r
13 void(float req) w_nex =\r
14 {\r
15         if (req == WR_IDLE)\r
16                 nex_ready_01();\r
17         else if (req == WR_FIRE1)\r
18                 weapon_prepareattack(nex_check, nex_check, nex_fire1_01, cvar("g_balance_nex_refire"));\r
19         else if (req == WR_RAISE)\r
20                 nex_select_01();\r
21         else if (req == WR_UPDATECOUNTS)\r
22                 self.currentammo = floor(self.ammo_cells / 5);\r
23         else if (req == WR_DROP)\r
24                 nex_deselect_01();\r
25         else if (req == WR_SETUP)\r
26                 weapon_setup(WEP_NEX, "w_nex.zym", IT_CELLS);\r
27         else if (req == WR_CHECKAMMO)\r
28                 weapon_hasammo = nex_check();\r
29 };\r
30 \r
31 \r
32 void W_Nex_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/nexfire.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_nex_damage"), WEP_NEX);\r
44 \r
45         // trace as if shot started inside gun\r
46         traceline (org, end, TRUE, self);\r
47         // show as if shot started outside of gun\r
48         org = self.origin + self.view_ofs + v_forward * 28 + v_right * 14 + v_up * -7;\r
49         // muzzleflash light\r
50         te_smallflash (org);\r
51         // beam effect\r
52         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
53         WriteByte (MSG_BROADCAST, 76);\r
54         WriteCoord (MSG_BROADCAST, org_x);\r
55         WriteCoord (MSG_BROADCAST, org_y);\r
56         WriteCoord (MSG_BROADCAST, org_z);\r
57         WriteCoord (MSG_BROADCAST, trace_endpos_x);\r
58         WriteCoord (MSG_BROADCAST, trace_endpos_y);\r
59         WriteCoord (MSG_BROADCAST, trace_endpos_z);\r
60         WriteCoord (MSG_BROADCAST, 0);\r
61         WriteCoord (MSG_BROADCAST, 0);\r
62         WriteCoord (MSG_BROADCAST, 0);\r
63         // flash and burn the wall\r
64         te_plasmaburn (trace_endpos);\r
65         /*\r
66         // flame effect at impact\r
67         dir = trace_plane_normal * 100;\r
68         WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);\r
69         WriteByte (MSG_BROADCAST, TE_FLAMEJET);\r
70         WriteCoord (MSG_BROADCAST, trace_endpos_x);\r
71         WriteCoord (MSG_BROADCAST, trace_endpos_y);\r
72         WriteCoord (MSG_BROADCAST, trace_endpos_z);\r
73         WriteCoord (MSG_BROADCAST, dir_x);\r
74         WriteCoord (MSG_BROADCAST, dir_y);\r
75         WriteCoord (MSG_BROADCAST, dir_z);\r
76         WriteByte (MSG_BROADCAST, 255);\r
77         */\r
78         // play a sound\r
79         PointSound (trace_endpos, "weapons/neximpact.wav", 1, ATTN_NORM);\r
80 \r
81         if (cvar("g_instagib") == 0)\r
82                 self.ammo_cells = self.ammo_cells - 5;\r
83 \r
84         flash = spawn ();\r
85         org = self.origin + self.view_ofs + v_forward * 33 + v_right * 14 + v_up * -7;\r
86         setorigin (flash, org);\r
87         setmodel (flash, "models/nexflash.md3");\r
88         flash.velocity = v_forward * 20;\r
89         flash.angles = vectoangles (flash.velocity);\r
90         SUB_SetFade (flash, time, 0.4);\r
91         flash.effects = flash.effects | EF_ADDITIVE | EF_FULLBRIGHT;\r
92 }\r
93 \r
94 // weapon frames\r
95 void()  nex_ready_01 =  {weapon_thinkf(WFRAME_IDLE, 0.1, nex_ready_01); self.weaponentity.state = WS_READY;};\r
96 void()  nex_select_01 = {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
97 void()  nex_deselect_01 =       {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
98 void()  nex_fire1_01 =\r
99 {\r
100         weapon_doattack(nex_check, nex_check, W_Nex_Attack);\r
101         weapon_thinkf(WFRAME_FIRE1, 0.3, nex_ready_01);\r
102 };\r
103 \r