]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_grenadelauncher.c
now menu qc respects g_campaign_name
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / w_grenadelauncher.c
1 void() glauncher_ready_01;\r
2 void() glauncher_fire1_01;\r
3 void() glauncher_deselect_01;\r
4 void() glauncher_select_01;\r
5 \r
6 float() glauncher_check =\r
7 {\r
8         if (self.ammo_rockets >= 2)\r
9                 return TRUE;\r
10         return FALSE;\r
11 };\r
12 \r
13 void(float req) w_glauncher =\r
14 {\r
15         if (req == WR_IDLE)\r
16                 glauncher_ready_01();\r
17         else if (req == WR_FIRE1 || req == WR_FIRE2)\r
18                 weapon_prepareattack(glauncher_check, glauncher_check, glauncher_fire1_01, cvar("g_balance_grenadelauncher_refire"));\r
19         else if (req == WR_RAISE)\r
20                 glauncher_select_01();\r
21         else if (req == WR_UPDATECOUNTS)\r
22                 self.currentammo = floor(self.ammo_rockets / 2);\r
23         else if (req == WR_DROP)\r
24                 glauncher_deselect_01();\r
25         else if (req == WR_SETUP)\r
26                 weapon_setup(WEP_GRENADE_LAUNCHER, "w_gl.zym", IT_ROCKETS);\r
27         else if (req == WR_CHECKAMMO)\r
28                 weapon_hasammo = glauncher_check();\r
29 };\r
30 \r
31 void W_Grenade_Explode (void)\r
32 {\r
33         vector  org2;\r
34         org2 = findbetterlocation (self.origin);\r
35         te_explosion (org2);\r
36         effect (org2, "models/sprites/grenadeexplosion.spr32", 0, 20, 30);\r
37         sound (self, CHAN_BODY, "weapons/grenade_impact.wav", 1, ATTN_NORM);\r
38 \r
39         self.event_damage = SUB_Null;\r
40         RadiusDamage (self, self.owner, cvar("g_balance_grenadelauncher_damage"), cvar("g_balance_grenadelauncher_edgedamage"), cvar("g_balance_grenadelauncher_radius"), world, cvar("g_balance_grenadelauncher_force"), WEP_GRENADE_LAUNCHER);\r
41 \r
42         remove (self);\r
43 }\r
44 \r
45 void W_Grenade_Touch (void)\r
46 {\r
47         if (other.classname == "player" || other.classname == "corpse")\r
48                 W_Grenade_Explode ();\r
49         else\r
50                 sound (self, CHAN_IMPACT, "weapons/grenade_bounce.wav", 1, ATTN_NORM);\r
51 }\r
52 \r
53 void W_Grenade_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
54 {\r
55         self.health = self.health - damage;\r
56         if (self.health <= 0)\r
57                 W_Grenade_Explode();\r
58 }\r
59 \r
60 void W_Grenade_Attack (void)\r
61 {\r
62         local entity gren;\r
63         local vector org;\r
64 \r
65         sound (self, CHAN_WEAPON, "weapons/grenade_fire.wav", 1, ATTN_NORM);\r
66         self.punchangle_x = -4;\r
67         self.ammo_rockets = self.ammo_rockets - 2;\r
68         org = self.origin + self.view_ofs + v_forward * 15 + v_right * 5 + v_up * -12;\r
69 \r
70         gren = spawn ();\r
71         gren.owner = self;\r
72         gren.classname = "grenade";\r
73         gren.movetype = MOVETYPE_BOUNCE;\r
74         gren.solid = SOLID_BBOX;\r
75         setmodel(gren, "models/grenademodel.md3");\r
76         setsize(gren, '-6 -6 -3', '6 6 3');\r
77         setorigin(gren, org);\r
78 \r
79         if (self.button3)\r
80         {\r
81                 gren.nextthink = time + 2.5;\r
82                 gren.think = W_Grenade_Explode;\r
83                 gren.touch = W_Grenade_Touch;\r
84                 gren.takedamage = DAMAGE_YES;\r
85                 gren.health = 10;\r
86                 gren.damageforcescale = 4;\r
87                 gren.event_damage = W_Grenade_Damage;\r
88                 gren.velocity = v_forward * cvar("g_balance_grenadelauncher_speed2") + v_up * cvar("g_balance_grenadelauncher_speed2_up");\r
89                 gren.avelocity = '100 150 100';\r
90         }\r
91         else\r
92         {\r
93                 gren.nextthink = time + 30;\r
94                 gren.think = W_Grenade_Explode;\r
95                 gren.touch = W_Grenade_Explode;\r
96                 gren.velocity = v_forward * cvar("g_balance_grenadelauncher_speed") + v_up * cvar("g_balance_grenadelauncher_speed_up");\r
97                 gren.avelocity_x = random () * -500 - 500;\r
98         }\r
99 \r
100         gren.angles = vectoangles (gren.velocity);\r
101 }\r
102 \r
103 // weapon frames\r
104 \r
105 void()  glauncher_ready_01 =    {weapon_thinkf(WFRAME_IDLE, 0.1, glauncher_ready_01); self.weaponentity.state = WS_READY;};\r
106 void()  glauncher_select_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
107 void()  glauncher_deselect_01 = {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
108 void()  glauncher_fire1_01 =\r
109 {\r
110         weapon_doattack(glauncher_check, glauncher_check, W_Grenade_Attack);\r
111         weapon_thinkf(WFRAME_FIRE1, 0.3, glauncher_ready_01);\r
112 };