]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_crylink.c
Added a Game C folder
[divverent/nexuiz.git] / 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 \r
58         sound (self, CHAN_WEAPON, "weapons/crylink.wav", 1, ATTN_NORM);\r
59         self.ammo_cells = self.ammo_cells - 1;\r
60         self.punchangle_x = -2;\r
61         org = self.origin + self.view_ofs + v_forward * 10 + v_right * 5 + v_up * -14;\r
62         te_smallflash(org);\r
63 \r
64         while (counter < 5)\r
65         {\r
66                 proj = spawn ();\r
67                 proj.owner = self;\r
68                 proj.classname = "spike";\r
69 \r
70                 proj.movetype = MOVETYPE_BOUNCE;\r
71                 proj.solid = SOLID_BBOX;\r
72                 proj.gravity = 0.001;\r
73 \r
74                 setmodel (proj, "models/plasmatrail.mdl");\r
75                 setsize (proj, '0 0 0', '0 0 0');\r
76                 setorigin (proj, org);\r
77 \r
78                 if (self.button3)\r
79                         proj.velocity = (v_forward + (counter / 2 - 1) * v_right * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed");\r
80                 else\r
81                         proj.velocity = (v_forward + (counter / 5) * randomvec() * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed");\r
82                 proj.touch = W_Crylink_Touch;\r
83                 proj.think = SUB_Remove;\r
84                 proj.nextthink = time + 9;\r
85 \r
86                 proj.angles = vectoangles (proj.velocity);\r
87 \r
88                 //proj.glow_size = 20;\r
89 \r
90                 proj.effects = proj.effects | EF_FULLBRIGHT;\r
91                 //proj.effects = proj.effects | EF_ADDITIVE;\r
92                 proj.effects = proj.effects | EF_LOWPRECISION;\r
93                 counter = counter + 1;\r
94         }\r
95 \r
96         self.clip_crylink -= 1;\r
97         if (self.clip_crylink <= 0)\r
98         {\r
99                 DoReload (2, CLIP_MAX_CRYLINK); // Crylink is weapon 2, reloads for max clip of weapon.\r
100         }\r
101 }\r
102 \r
103 \r
104 // weapon frames\r
105 void()  crylink_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, crylink_ready_01); self.weaponentity.state = WS_READY;};\r
106 void()  crylink_select_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
107 void()  crylink_deselect_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
108 void()  crylink_fire1_01 =\r
109 {\r
110         weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack);\r
111         weapon_thinkf(WFRAME_FIRE1, 0.15, crylink_ready_01);\r
112 };\r
113 \r