]> icculus.org git repositories - divverent/nexuiz.git/blob - qcsrc/gamec/w_nex.c
Updating
[divverent/nexuiz.git] / qcsrc / gamec / w_nex.c
1 void() nex_ready_01;
2 void() nex_fire1_01;
3 void() nex_fire2_01;
4 void() nex_fire3_01;
5 void() nex_deselect_01;
6 void() nex_select_01;
7
8 float() nex_check = 
9 {
10         if (self.ammo_cells > 0) 
11                 return TRUE; 
12         return FALSE;
13 };
14
15 void(float req) w_nex =
16 {
17         if (req == WR_IDLE)
18                 nex_ready_01();
19         else if (req == WR_FIRE1)
20                 weapon_prepareattack(nex_check, nex_check, nex_fire1_01, 1);
21         else if (req == WR_FIRE2)
22                 weapon_prepareattack(nex_check, nex_check, nex_fire2_01, 1);
23         else if (req == WR_FIRE3)
24                 weapon_prepareattack(nex_check, nex_check, nex_fire3_01, 1);
25         else if (req == WR_RAISE)
26                 nex_select_01();
27         else if (req == WR_UPDATECOUNTS)
28                 self.currentammo = self.ammo_cells;
29         else if (req == WR_DROP)
30                 nex_deselect_01();
31         else if (req == WR_SETUP)
32                 weapon_setup(WEP_NEX, "w_nex.zym", IT_CELLS);
33         else if (req == WR_CHECKAMMO)
34                 weapon_hasammo = nex_check();
35 };               
36
37
38 void W_Nex_Attack (void)
39 {
40         vector  org;
41         vector  dir;
42         entity  explosion;
43
44         sound (self, CHAN_WEAPON, "weapons/nexfire.wav", 1, ATTN_NORM);
45         self.punchangle_x = -4;
46         makevectors(self.v_angle);
47         org = self.origin + self.view_ofs + v_forward * 18 + v_right * 8 + v_up * -5;
48         te_smallflash(org);
49
50         if (game & GAME_INSTAGIB)
51                 FireRailgunBullet (org, self.origin + self.view_ofs + v_forward * 4096, 800, IT_NEX);
52         else
53                 FireRailgunBullet (org, self.origin + self.view_ofs + v_forward * 4096, 100, IT_NEX);
54
55         te_plasmaburn (trace_endpos);
56
57         if (trace_fraction < 1.0)
58         {
59                 dir = trace_plane_normal * 100;
60                 WriteByte (MSG_BROADCAST, SVC_TEMPENTITY);
61                 WriteByte (MSG_BROADCAST, TE_FLAMEJET);
62                 WriteCoord (MSG_BROADCAST, trace_endpos_x);
63                 WriteCoord (MSG_BROADCAST, trace_endpos_y);
64                 WriteCoord (MSG_BROADCAST, trace_endpos_z);
65                 WriteCoord (MSG_BROADCAST, dir_x);
66                 WriteCoord (MSG_BROADCAST, dir_y);
67                 WriteCoord (MSG_BROADCAST, dir_z);
68                 WriteByte (MSG_BROADCAST, 255);
69
70                 explosion = spawn ();
71                 setorigin (explosion, trace_endpos);
72                 RadiusDamage (explosion, self, 10, 0, 50, world, 300, IT_ROCKET_LAUNCHER);
73                 remove (explosion);
74
75                 PointSound (trace_endpos, "weapons/neximpact.wav", 1, ATTN_NORM);
76         }
77
78         self.attack_finished = time + 1;
79
80         if (!(game & GAME_INSTAGIB))
81                 self.ammo_cells = self.ammo_cells - 1;
82 }
83
84 void W_Nex_Attack2 (void)
85 {
86         makevectors(self.v_angle);
87 }
88
89 // weapon frames 
90 void()  nex_ready_01 =  {weapon_thinkf(WFRAME_IDLE, 0.1, nex_ready_01); self.weaponentity.state = WS_READY;};
91 void()  nex_select_01 = {weapon_thinkf(-1, 0.3, w_ready); weapon_boblayer1(16, '0 0 0');};
92 void()  nex_deselect_01 =       {weapon_thinkf(-1, 0.3, w_clear); weapon_boblayer1(16, '0 20 -40');};
93 void()  nex_fire1_01 =  
94 {
95         weapon_doattack(nex_check, nex_check, W_Nex_Attack);
96         weapon_thinkf(WFRAME_FIRE1, 0.3, nex_ready_01);
97 };
98 void()  nex_fire2_01 =  
99 {
100         weapon_doattack(nex_check, nex_check, W_Nex_Attack);
101         weapon_thinkf(WFRAME_FIRE2, 0.5, nex_ready_01);
102 };
103 void()  nex_fire3_01 =  
104 {
105         weapon_doattack(nex_check, nex_check, W_Nex_Attack);
106         weapon_thinkf(WFRAME_FIRE2, 0.5, nex_ready_01);
107 };
108
109