]> icculus.org git repositories - divverent/nexuiz.git/blob - attic/TeamNexuiz/game/gamec/w_crylink.c
moved navnodeedit & TeamNexuiz to attic
[divverent/nexuiz.git] / attic / TeamNexuiz / game / gamec / w_crylink.c
1 void() crylink_ready_01;\r
2 void() crylink_fire1_01;\r
3 void() crylink_deselect_01;\r
4 void() crylink_select_01;\r
5 \r
6 .float gravity;\r
7 \r
8 float() crylink_check =\r
9 {\r
10         if (self.ammo_cells >= 1)\r
11                 return TRUE;\r
12         return FALSE;\r
13 };\r
14 \r
15 void(float req) w_crylink =\r
16 {\r
17         if (req == WR_IDLE)\r
18                 crylink_ready_01();\r
19         else if (req == WR_FIRE1 || req == WR_FIRE2)\r
20                 weapon_prepareattack(crylink_check, crylink_check, crylink_fire1_01, cvar("g_balance_crylink_refire"));\r
21         else if (req == WR_RAISE)\r
22                 crylink_select_01();\r
23         else if (req == WR_UPDATECOUNTS)\r
24                 self.currentammo = self.ammo_cells;\r
25         else if (req == WR_DROP)\r
26                 crylink_deselect_01();\r
27         else if (req == WR_SETUP)\r
28                 weapon_setup(WEP_CRYLINK, "w_crylink.zym", IT_CELLS);\r
29         else if (req == WR_CHECKAMMO)\r
30                 weapon_hasammo = crylink_check();\r
31 };\r
32 \r
33 \r
34 void W_Crylink_Touch (void)\r
35 {\r
36         self.event_damage = SUB_Null;\r
37         //te_smallflash(self.origin);\r
38         RadiusDamage (self, self.owner, cvar("g_balance_crylink_damage"), cvar("g_balance_crylink_edgedamage"), cvar("g_balance_crylink_radius"), world, cvar("g_balance_crylink_force"), WEP_CRYLINK);\r
39         self.touch = SUB_Null;\r
40         setmodel (self, "models/plasma.mdl");\r
41         setsize (self, '0 0 0', '0 0 0');\r
42         self.gravity = 1;\r
43         self.glow_size = 0;\r
44         self.glow_color = 0;\r
45         self.think = SUB_Remove;\r
46         //self.movetype = MOVETYPE_NONE;\r
47         self.effects = EF_LOWPRECISION;\r
48         SUB_SetFade(self, time, 1);\r
49         //remove (self);\r
50 }\r
51 \r
52 void W_Crylink_Attack (void)\r
53 {\r
54         local float counter;\r
55         local vector org;\r
56         local entity proj;\r
57         local vector end;\r
58 \r
59         local vector trueaim;\r
60         org = self.origin + self.view_ofs;\r
61         end = self.origin + self.view_ofs + v_forward * 4096;\r
62         traceline(org,end,TRUE,self);\r
63         \r
64         trueaim = trace_endpos;\r
65 \r
66         sound (self, CHAN_WEAPON, "weapons/crylink.ogg", 1, ATTN_NORM);\r
67         if (cvar("g_use_ammunition"))\r
68                 self.ammo_cells = self.ammo_cells - 1;\r
69         self.punchangle_x = -2;\r
70         org = self.origin + self.view_ofs + v_forward * 10 + v_right * 5 + v_up * -14;\r
71         te_smallflash(org);\r
72 \r
73         while (counter < 5)\r
74         {\r
75                 proj = spawn ();\r
76                 proj.owner = self;\r
77                 proj.classname = "spike";\r
78 \r
79                 proj.movetype = MOVETYPE_BOUNCE;\r
80                 proj.solid = SOLID_BBOX;\r
81                 proj.gravity = 0.001;\r
82 \r
83                 setmodel (proj, "models/plasmatrail.mdl");\r
84                 setsize (proj, '0 0 0', '0 0 0');\r
85                 setorigin (proj, org);\r
86 \r
87                 if (self.button3)\r
88                         proj.velocity = (normalize(trueaim - org) + (counter / 2 - 1) * v_right * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed");\r
89                 else\r
90                         proj.velocity = (normalize(trueaim - org) + (counter / 5) * randomvec() * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed");\r
91                 proj.touch = W_Crylink_Touch;\r
92                 proj.think = SUB_Remove;\r
93                 proj.nextthink = time + 9;\r
94 \r
95                 proj.angles = vectoangles (proj.velocity);\r
96 \r
97                 //proj.glow_size = 20;\r
98 \r
99                 proj.effects = proj.effects | EF_FULLBRIGHT;\r
100                 //proj.effects = proj.effects | EF_ADDITIVE;\r
101                 proj.effects = proj.effects | EF_LOWPRECISION;\r
102                 counter = counter + 1;\r
103         }\r
104 \r
105         self.clip_crylink -= 1;\r
106         if (self.clip_crylink <= 0)\r
107         {\r
108                 DoReload (2, CLIP_MAX_CRYLINK); // Crylink is weapon 2, reloads for max clip of weapon.\r
109         }\r
110 }\r
111 \r
112 \r
113 // weapon frames\r
114 void()  crylink_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, crylink_ready_01); self.weaponentity.state = WS_READY;};\r
115 void()  crylink_select_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
116 void()  crylink_deselect_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
117 void()  crylink_fire1_01 =\r
118 {\r
119         weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack);\r
120         weapon_thinkf(WFRAME_FIRE1, 0.15, crylink_ready_01);\r
121 };\r
122 \r