]> icculus.org git repositories - divverent/nexuiz.git/blob - TeamNexuiz/game/gamec/w_namek.c
bumps for morphed's teleporter model
[divverent/nexuiz.git] / TeamNexuiz / game / gamec / w_namek.c
1 void() namek_ready_01;\r
2 void() namek_fire1_01;\r
3 void() namek_fire2_01;\r
4 void() namek_deselect_01;\r
5 void() namek_select_01;\r
6 \r
7 float() namek_check =\r
8 {\r
9         if (self.ammo_nails > 2)\r
10                 return TRUE;\r
11         return FALSE;\r
12 };\r
13 \r
14 void(float req) w_namek =\r
15 {\r
16         if (req == WR_IDLE)\r
17                 namek_ready_01();\r
18         else if (req == WR_FIRE1)\r
19                 weapon_prepareattack(namek_check, namek_check, namek_fire1_01, cvar("g_balance_namek_refire"));\r
20         else if (req == WR_FIRE2)\r
21                 weapon_prepareattack(namek_check, namek_check, namek_fire2_01, cvar("g_balance_namek_refire2"));\r
22         else if (req == WR_RAISE)\r
23                 namek_select_01();\r
24         else if (req == WR_UPDATECOUNTS)\r
25                 self.currentammo = floor(self.ammo_nails / 2);\r
26         else if (req == WR_DROP)\r
27                 namek_deselect_01();\r
28         else if (req == WR_SETUP)\r
29                 weapon_setup(WEP_NAMEK, "w_namek.zym", IT_CELLS);\r
30         else if (req == WR_CHECKAMMO)\r
31                 weapon_hasammo = namek_check();\r
32 };\r
33 \r
34 void W_Namek_Touch (void)\r
35 {\r
36         if (other == self.owner)\r
37                 return;\r
38         else if (pointcontents (self.origin) == CONTENT_SKY)\r
39         {\r
40                 remove (self);\r
41                 return;\r
42         }\r
43 \r
44         te_spark(self.origin, normalize(self.velocity) * -70 - '0 0 100', 30);\r
45 \r
46         if(other.takedamage)\r
47                 Damage (other, self, self.owner, self.dmg, WEP_NAMEK, self.origin, normalize(self.velocity) * cvar("g_balance_namek_force"));\r
48 \r
49         remove (self);\r
50 }\r
51 \r
52 void FireNamekBullet(vector org, vector vel, float damage, float brange)\r
53 {\r
54         entity proj;\r
55         float livetime;\r
56 \r
57         livetime = brange / vlen(vel);\r
58 \r
59         //bprint(ftos(livetime), ": ", ftos(brange), ", ", ftos(vlen(vel)), "\n");\r
60 \r
61         proj = spawn ();\r
62         proj.classname = "spike";\r
63         proj.owner = self;\r
64         proj.effects = EF_ADDITIVE | EF_FULLBRIGHT;\r
65         proj.think = SUB_Remove;\r
66         proj.nextthink = time + livetime;\r
67         proj.solid = SOLID_BBOX;\r
68         proj.movetype = MOVETYPE_FLY;\r
69         proj.dmg = damage;\r
70         setorigin(proj, org);\r
71 \r
72         proj.velocity = vel;\r
73         proj.angles = vectoangles(proj.velocity);\r
74         proj.touch = W_Namek_Touch;\r
75         setmodel(proj, "models/weapons/namekb.mdl");\r
76         setsize(proj, '0 0 0', '0 0 0');\r
77 }\r
78 \r
79 void W_Namek_Attack()\r
80 {\r
81         vector org, dir;\r
82         float spread, brange, brange2;\r
83 \r
84         sound (self, CHAN_WEAPON, "weapons/namek_fire.wav", 1, ATTN_NORM);\r
85 \r
86         self.punchangle_x = -2;\r
87 \r
88         self.ammo_nails = self.ammo_nails - 2;\r
89 \r
90         org = self.origin + self.view_ofs + v_forward * 10 + v_right * 15 + v_up * -14;\r
91 \r
92         spread = cvar("g_balance_namek_spread");\r
93         dir_x = v_forward_x + crandom()*spread;\r
94         dir_y = v_forward_y + crandom()*spread;\r
95         dir_z = v_forward_z + crandom()*spread;\r
96         dir = normalize(dir);\r
97 \r
98         brange = cvar("g_balance_namek_range_min");\r
99         brange2 = cvar("g_balance_namek_range_max") - brange;\r
100         brange = brange + random()*brange2;\r
101 \r
102         FireNamekBullet(org, dir * cvar("g_balance_namek_speed"), cvar("g_balance_namek_damage"), brange);\r
103 }\r
104 \r
105 void W_Namek_Attack2()\r
106 {\r
107         vector org;\r
108         float brange;\r
109 \r
110         sound (self, CHAN_WEAPON, "weapons/namek_fire.wav", 1, ATTN_NORM);\r
111 \r
112         self.punchangle_x = -2;\r
113 \r
114         self.ammo_nails = self.ammo_nails - 2;\r
115 \r
116         org = self.origin + self.view_ofs + v_forward * 15 + v_right * 10 + v_up * -14;\r
117         brange = cvar("g_balance_namek_range2");\r
118 \r
119         FireNamekBullet(org + '0 0 1', v_forward * cvar("g_balance_namek_speed2"), cvar("g_balance_namek_damage2"), brange);\r
120         FireNamekBullet(org - '0 0 2', v_forward * cvar("g_balance_namek_speed2"), cvar("g_balance_namek_damage2"), brange);\r
121 }\r
122 \r
123 // weapon frames\r
124 \r
125 void()  namek_ready_01 =        {weapon_thinkf(WFRAME_IDLE, 0.1, namek_ready_01); self.weaponentity.state = WS_READY;};\r
126 void()  namek_select_01 =       {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_ready); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, '0 0 0');};\r
127 void()  namek_deselect_01 =     {weapon_thinkf(-1, cvar("g_balance_weaponswitchdelay"), w_clear); weapon_boblayer1(PLAYER_WEAPONSELECTION_SPEED, PLAYER_WEAPONSELECTION_RANGE);};\r
128 void()  namek_fire1_01 =\r
129 {\r
130         weapon_doattack(namek_check, namek_check, W_Namek_Attack);\r
131         weapon_thinkf(WFRAME_FIRE1, cvar("g_balance_namek_refire") - 0.05, namek_ready_01);\r
132 };\r
133 void()  namek_fire2_01 =\r
134 {\r
135         weapon_doattack(namek_check, namek_check, W_Namek_Attack2);\r
136         weapon_thinkf(WFRAME_FIRE2, cvar("g_balance_namek_refire2") - 0.05, namek_ready_01);\r
137 };\r
138 \r