]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_rocketlauncher.c
Added a Game C folder
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / w_rocketlauncher.c
1 void() rlauncher_ready_01;\r
2 void() rlauncher_fire1_01;\r
3 void() rlauncher_deselect_01;\r
4 void() rlauncher_select_01;\r
5 \r
6 float() rlauncher_check =\r
7 {\r
8         if (self.ammo_rockets >= 3)\r
9                 return TRUE;\r
10         return FALSE;\r
11 };\r
12 \r
13 void(float req) w_rlauncher =\r
14 {\r
15         if (req == WR_IDLE)\r
16                 rlauncher_ready_01();\r
17         else if (req == WR_FIRE1)\r
18                 weapon_prepareattack(rlauncher_check, rlauncher_check, rlauncher_fire1_01, cvar("g_balance_rocketlauncher_refire"));\r
19         else if (req == WR_RAISE)\r
20                 rlauncher_select_01();\r
21         else if (req == WR_UPDATECOUNTS)\r
22                 self.currentammo = floor(self.ammo_rockets / 3);\r
23         else if (req == WR_DROP)\r
24                 rlauncher_deselect_01();\r
25         else if (req == WR_SETUP)\r
26                 weapon_setup(WEP_ROCKET_LAUNCHER, "w_rl.zym", IT_ROCKETS);\r
27         else if (req == WR_CHECKAMMO)\r
28                 weapon_hasammo = rlauncher_check();\r
29 };\r
30 \r
31 \r
32 void W_Rocket_Explode (void)\r
33 {\r
34         vector  org2;\r
35         org2 = findbetterlocation (self.origin);\r
36         te_explosion (org2);\r
37         effect (org2, "models/sprites/rocketexplosion.spr32", 0, 20, 40);\r
38         sound (self, CHAN_BODY, "weapons/rocket_impact.wav", 1, ATTN_NORM);\r
39 \r
40         self.event_damage = SUB_Null;\r
41         RadiusDamage (self, self.owner, cvar("g_balance_rocketlauncher_damage"), cvar("g_balance_rocketlauncher_edgedamage"), cvar("g_balance_rocketlauncher_radius"), world, cvar("g_balance_rocketlauncher_force"), WEP_ROCKET_LAUNCHER);\r
42 \r
43         remove (self);\r
44 }\r
45 \r
46 void W_Rocket_Think (void)\r
47 {\r
48         self.nextthink = time;\r
49         if (time > self.cnt)\r
50         {\r
51                 W_Rocket_Explode ();\r
52                 return;\r
53         }\r
54         if (self.owner)\r
55         {\r
56                 if (self.owner.deadflag)\r
57                         self.owner = self;\r
58                 else if (self.owner.wpn == WEP_ROCKET_LAUNCHER && self.owner.button3)\r
59                         W_Rocket_Explode ();\r
60         }\r
61 }\r
62 \r
63 void W_Rocket_Touch (void)\r
64 {\r
65         if (pointcontents (self.origin) == CONTENT_SKY)\r
66         {\r
67                 remove (self);\r
68                 return;\r
69         }\r
70         else\r
71                 W_Rocket_Explode ();\r
72 }\r
73 \r
74 void W_Rocket_Damage (entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)\r
75 {\r
76         self.health = self.health - damage;\r
77         if (self.health <= 0)\r
78                 W_Rocket_Explode();\r
79 }\r
80 \r
81 void W_Rocket_Attack (void)\r
82 {\r
83         local entity missile;\r
84         local entity flash;\r
85         local vector org;\r
86         sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", 1, ATTN_NORM);\r
87         if (cvar("g_rocketarena") == 0)\r
88                 self.ammo_rockets = self.ammo_rockets - 3;\r
89         self.punchangle_x = -4;\r
90         org = self.origin + self.view_ofs + v_forward * 15 + v_right * 3 + v_up * -11;\r
91         te_smallflash(org);\r
92 \r
93         missile = spawn ();\r
94         missile.owner = self;\r
95         missile.classname = "missile";\r
96 \r
97         missile.takedamage = DAMAGE_YES;\r
98         missile.damageforcescale = 4;\r
99         missile.health = 30;\r
100         missile.event_damage = W_Rocket_Damage;\r
101 \r
102         missile.movetype = MOVETYPE_FLY;\r
103         missile.solid = SOLID_BBOX;\r
104         setmodel (missile, "models/rocket.md3");\r
105         setsize (missile, '0 0 0', '0 0 0');\r
106 \r
107         setorigin (missile, org);\r
108         missile.velocity = v_forward * cvar("g_balance_rocketlauncher_speed");\r
109         missile.angles = vectoangles (missile.velocity);\r
110 \r
111         missile.touch = W_Rocket_Touch;\r
112         missile.think = W_Rocket_Think;\r
113         missile.nextthink = time;\r
114         missile.cnt = time + 9;\r
115         sound (missile, CHAN_BODY, "weapons/rocket_fly.wav", 0.4, ATTN_NORM);\r
116 \r
117         flash = spawn ();\r
118         setorigin (flash, org);\r
119         setmodel (flash, "models/flash.md3");\r
120         flash.velocity = v_forward * 20;\r
121         flash.angles = vectoangles (flash.velocity);\r
122         SUB_SetFade (flash, time, 0.4);\r
123         flash.effects = flash.effects | EF_ADDITIVE | EF_FULLBRIGHT;\r
124         self.clip_rockets = self.clip_rockets - 1;\r
125         if (self.clip_rockets == 0)\r
126         {\r
127                 DoReload (3, 4);        // weapon type 3 is RL, and reload 4 rockets.\r
128         }\r
129 }\r
130 \r
131 // weapon frames\r
132 \r
133 void()  rlauncher_ready_01 =    {weapon_thinkf(WFRAME_IDLE, 0.1, rlauncher_ready_01); self.weaponentity.state = WS_READY;};\r
134 void()  rlauncher_select_01 =   {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
135 void()  rlauncher_deselect_01 = {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
136 void()  rlauncher_fire1_01 =\r
137 {\r
138         weapon_doattack(rlauncher_check, rlauncher_check, W_Rocket_Attack);\r
139         weapon_thinkf(WFRAME_FIRE1, 0.3, rlauncher_ready_01);\r
140 };\r
141 \r