]> icculus.org git repositories - divverent/nexuiz.git/blob - qcsrc/gamec/w_crylink.c
Added crylink trails
[divverent/nexuiz.git] / qcsrc / gamec / w_crylink.c
1 void() crylink_ready_01;
2 void() crylink_fire1_01;
3 void() crylink_fire2_01;
4 void() crylink_deselect_01;
5 void() crylink_select_01;
6
7 .float gravity;
8
9 float() crylink_check =
10 {
11         if (self.ammo_cells >= 1)
12                 return TRUE;
13         return FALSE;
14 };
15
16 void(float req) w_crylink =
17 {
18         if (req == WR_IDLE)
19                 crylink_ready_01();
20         else if (req == WR_FIRE1)
21                 weapon_prepareattack(crylink_check, crylink_check, crylink_fire1_01, 0.2);
22         else if (req == WR_FIRE2)
23                 weapon_prepareattack(crylink_check, crylink_check, crylink_fire2_01, 0.2);
24         else if (req == WR_RAISE)
25                 crylink_select_01();
26         else if (req == WR_UPDATECOUNTS)
27                 self.currentammo = self.ammo_cells;
28         else if (req == WR_DROP)
29                 crylink_deselect_01();
30         else if (req == WR_SETUP)
31                 weapon_setup(WEP_CRYLINK, "w_crylink.zym", IT_CELLS);
32         else if (req == WR_CHECKAMMO)
33                 weapon_hasammo = crylink_check();
34 };
35
36
37 void W_Crylink_Touch (void)
38 {
39         self.event_damage = nullfunction;
40         //te_smallflash(self.origin);
41         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"), IT_CRYLINK);
42         self.touch = nullfunction;
43         self.norespawn = TRUE;
44         setmodel (self, "models/plasma.mdl");
45         self.gravity = 1;
46         self.glow_size = 0;
47         self.glow_color = 0;
48         self.think = SUB_Remove;
49         SUB_SetFade(self, time);
50         //remove (self);
51 }
52
53 void W_Crylink_Attack (void) //(float postion)
54 {
55         float counter;
56
57         sound (self, CHAN_WEAPON, "weapons/crylink.wav", 1, ATTN_NORM);
58         self.attack_finished = time + cvar("g_balance_crylink_refire");
59         self.ammo_cells = self.ammo_cells - 1;
60
61         while (counter < 7)
62         {
63                 entity  proj;
64
65                 makevectors(self.v_angle);
66                 proj = spawn ();
67                 proj.owner = self;
68                 proj.classname = "spike";
69
70                 proj.movetype = MOVETYPE_BOUNCE;
71                 proj.solid = SOLID_BBOX;
72                 proj.gravity = 0.001;
73
74                 setmodel (proj, "models/plasmatrail.mdl");
75                 setsize (proj, '0 0 0', '0 0 0');
76                 setorigin (proj, self.origin + self.view_ofs + v_forward * 10 + v_right * 5 + v_up * -14);
77
78                 proj.velocity = (v_forward + (counter / 7) * randomvec() * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed");
79                 proj.touch = W_Crylink_Touch;
80                 proj.think = SUB_Remove;
81                 proj.nextthink = time + 9;
82
83                 proj.angles = vectoangles (proj.velocity);
84
85                 proj.glow_color = 10;
86                 proj.glow_size = 20;
87
88                 proj.effects = proj.effects | EF_ADDITIVE;
89                 proj.effects = proj.effects | EF_LOWPRECISION;
90                 counter = counter + 1;
91         }
92 }
93
94 void W_Crylink_Attack2 (void)
95 {
96         float counter;
97
98         sound (self, CHAN_WEAPON, "weapons/crylink.wav", 1, ATTN_NORM);
99         self.attack_finished = time + cvar("g_balance_crylink_refire");
100         self.ammo_cells = self.ammo_cells - 1;
101
102         while (counter < 5)
103         {
104                 entity  proj;
105
106                 makevectors(self.v_angle);
107                 proj = spawn ();
108                 proj.owner = self;
109                 proj.classname = "spike";
110
111                 proj.movetype = MOVETYPE_BOUNCE;
112                 proj.solid = SOLID_BBOX;
113                 proj.gravity = 0.001;
114
115                 setmodel (proj, "models/plasmatrail.mdl");
116                 setsize (proj, '0 0 0', '0 0 0');
117                 setorigin (proj, self.origin + self.view_ofs + v_forward * 10 + v_right * 5 + v_up * -14);
118
119                 proj.velocity = (v_forward + (counter / 2 - 1) * v_right * cvar("g_balance_crylink_spread")) * cvar("g_balance_crylink_speed");
120                 proj.touch = W_Crylink_Touch;
121                 proj.think = SUB_Remove;
122                 proj.nextthink = time + 9;
123
124                 proj.angles = vectoangles (proj.velocity);
125
126                 proj.glow_color = 10;
127                 proj.glow_size = 20;
128
129                 proj.effects = proj.effects | EF_ADDITIVE;
130                 proj.effects = proj.effects | EF_LOWPRECISION;
131                 counter = counter + 1;
132         }
133 }
134
135
136 // weapon frames
137 void()  crylink_ready_01 =      {weapon_thinkf(WFRAME_IDLE, 0.1, crylink_ready_01); self.weaponentity.state = WS_READY;};
138 void()  crylink_select_01 =     {weapon_thinkf(-1, PLAYER_WEAPONSELECTION_DELAY, w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};
139 void()  crylink_deselect_01 =   {weapon_thinkf(-1, PLAYER_WEAPONSELECTION_DELAY, w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};
140 void()  crylink_fire1_01 =
141 {
142         weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack);
143         weapon_thinkf(WFRAME_FIRE1, 0.15, crylink_ready_01);
144 };
145 void()  crylink_fire2_01 =
146 {
147         weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack2);
148         weapon_thinkf(WFRAME_FIRE1, 0.15, crylink_ready_01);
149 };
150 void()  crylink_fire3_01 =
151 {
152         weapon_doattack(crylink_check, crylink_check, W_Crylink_Attack);
153         weapon_thinkf(WFRAME_FIRE1, 0.15, crylink_ready_01);
154 };
155