1 #insert scripts\shared\shared.gsh;
2 #insert scripts\shared\version.gsh;
3 #insert scripts\shared\ai\archetype_damage_effects.gsh;
5 #insert scripts\shared\archetype_shared\archetype_shared.gsh;
7 #using scripts\shared\clientfield_shared;
8 #using scripts\shared\array_shared;
9 #using scripts\shared\audio_shared;
10 #using scripts\shared\util_shared;
11 #using scripts\shared\math_shared;
14 #precache( "client_fx", "fire/fx_fire_ai_human_arm_left_loop" );
15 #precache( "client_fx", "fire/fx_fire_ai_human_arm_left_os" );
16 #precache( "client_fx", "fire/fx_fire_ai_human_arm_right_loop" );
17 #precache( "client_fx", "fire/fx_fire_ai_human_arm_right_os" );
18 #precache( "client_fx", "fire/fx_fire_ai_human_hip_left_loop" );
19 #precache( "client_fx", "fire/fx_fire_ai_human_hip_left_os" );
20 #precache( "client_fx", "fire/fx_fire_ai_human_hip_right_loop" );
21 #precache( "client_fx", "fire/fx_fire_ai_human_hip_right_os" );
22 #precache( "client_fx", "fire/fx_fire_ai_human_leg_left_loop" );
23 #precache( "client_fx", "fire/fx_fire_ai_human_leg_left_os" );
24 #precache( "client_fx", "fire/fx_fire_ai_human_leg_right_loop" );
25 #precache( "client_fx", "fire/fx_fire_ai_human_leg_right_os" );
26 #precache( "client_fx", "fire/fx_fire_ai_human_torso_loop" );
27 #precache( "client_fx", "fire/fx_fire_ai_human_torso_os" );
28 #precache( "client_fx", "fire/fx_fire_ai_human_head_loop" );
29 #precache( "client_fx", "fire/fx_fire_ai_human_head_os" );
31 #precache( "client_fx", "fire/fx_fire_ai_robot_arm_left_loop" );
32 #precache( "client_fx", "fire/fx_fire_ai_robot_arm_left_os" );
33 #precache( "client_fx", "fire/fx_fire_ai_robot_arm_right_loop" );
34 #precache( "client_fx", "fire/fx_fire_ai_robot_arm_right_os" );
35 #precache( "client_fx", "fire/fx_fire_ai_robot_head_loop" );
36 #precache( "client_fx", "fire/fx_fire_ai_robot_head_os" );
37 #precache( "client_fx", "fire/fx_fire_ai_robot_leg_left_loop" );
38 #precache( "client_fx", "fire/fx_fire_ai_robot_leg_left_os" );
39 #precache( "client_fx", "fire/fx_fire_ai_robot_leg_right_loop" );
40 #precache( "client_fx", "fire/fx_fire_ai_robot_leg_right_os" );
41 #precache( "client_fx", "fire/fx_fire_ai_robot_torso_loop" );
42 #precache( "client_fx", "fire/fx_fire_ai_robot_torso_os" );
44 #precache( "client_fx", "smoke/fx_smk_ai_human_arm_left_os" );
45 #precache( "client_fx", "smoke/fx_smk_ai_human_arm_right_os" );
46 #precache( "client_fx", "smoke/fx_smk_ai_human_head_os" );
47 #precache( "client_fx", "smoke/fx_smk_ai_human_hip_left_os" );
48 #precache( "client_fx", "smoke/fx_smk_ai_human_hip_right_os" );
49 #precache( "client_fx", "smoke/fx_smk_ai_human_leg_left_os" );
50 #precache( "client_fx", "smoke/fx_smk_ai_human_leg_right_os" );
51 #precache( "client_fx", "smoke/fx_smk_ai_human_torso_os" );
52 #precache( "client_fx", "smoke/fx_smk_ai_human_waist_os" );
76 level._effect[
"fire_human_j_elbow_le_loop"] =
"fire/fx_fire_ai_human_arm_left_loop";
77 level._effect[
"fire_human_j_elbow_ri_loop"] =
"fire/fx_fire_ai_human_arm_right_loop";
78 level._effect[
"fire_human_j_shoulder_le_loop"] =
"fire/fx_fire_ai_human_arm_left_loop";
79 level._effect[
"fire_human_j_shoulder_ri_loop"] =
"fire/fx_fire_ai_human_arm_right_loop";
80 level._effect[
"fire_human_j_spine4_loop"] =
"fire/fx_fire_ai_human_torso_loop";
81 level._effect[
"fire_human_j_hip_le_loop"] =
"fire/fx_fire_ai_human_hip_left_loop";
82 level._effect[
"fire_human_j_hip_ri_loop"] =
"fire/fx_fire_ai_human_hip_right_loop";
83 level._effect[
"fire_human_j_knee_le_loop"] =
"fire/fx_fire_ai_human_leg_left_loop";
84 level._effect[
"fire_human_j_knee_ri_loop"] =
"fire/fx_fire_ai_human_leg_right_loop";
85 level._effect[
"fire_human_j_head_loop"] =
"fire/fx_fire_ai_human_head_loop";
87 level._effect[
"fire_human_j_elbow_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
88 level._effect[
"fire_human_j_elbow_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
89 level._effect[
"fire_human_j_shoulder_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
90 level._effect[
"fire_human_j_shoulder_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
91 level._effect[
"fire_human_j_spine4_os"] =
"fire/fx_fire_ai_human_torso_os";
92 level._effect[
"fire_human_j_hip_le_os"] =
"fire/fx_fire_ai_human_hip_left_os";
93 level._effect[
"fire_human_j_hip_ri_os"] =
"fire/fx_fire_ai_human_hip_right_os";
94 level._effect[
"fire_human_j_knee_le_os"] =
"fire/fx_fire_ai_human_leg_left_os";
95 level._effect[
"fire_human_j_knee_ri_os"] =
"fire/fx_fire_ai_human_leg_right_os";
96 level._effect[
"fire_human_j_head_os"] =
"fire/fx_fire_ai_human_head_os";
98 level._effect[
"fire_human_riotshield_j_elbow_le_loop"] =
"fire/fx_fire_ai_human_arm_left_loop";
99 level._effect[
"fire_human_riotshield_j_elbow_ri_loop"] =
"fire/fx_fire_ai_human_arm_right_loop";
100 level._effect[
"fire_human_riotshield_j_shoulder_le_loop"] =
"fire/fx_fire_ai_human_arm_left_loop";
101 level._effect[
"fire_human_riotshield_j_shoulder_ri_loop"] =
"fire/fx_fire_ai_human_arm_right_loop";
102 level._effect[
"fire_human_riotshield_j_spine4_loop"] =
"fire/fx_fire_ai_human_torso_loop";
103 level._effect[
"fire_human_riotshield_j_hip_le_loop"] =
"fire/fx_fire_ai_human_hip_left_loop";
104 level._effect[
"fire_human_riotshield_j_hip_ri_loop"] =
"fire/fx_fire_ai_human_hip_right_loop";
105 level._effect[
"fire_human_riotshield_j_knee_le_loop"] =
"fire/fx_fire_ai_human_leg_left_loop";
106 level._effect[
"fire_human_riotshield_j_knee_ri_loop"] =
"fire/fx_fire_ai_human_leg_right_loop";
107 level._effect[
"fire_human_riotshield_j_head_loop"] =
"fire/fx_fire_ai_human_head_loop";
109 level._effect[
"fire_human_riotshield_j_elbow_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
110 level._effect[
"fire_human_riotshield_j_elbow_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
111 level._effect[
"fire_human_riotshield_j_shoulder_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
112 level._effect[
"fire_human_riotshield_j_shoulder_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
113 level._effect[
"fire_human_riotshield_j_spine4_os"] =
"fire/fx_fire_ai_human_torso_os";
114 level._effect[
"fire_human_riotshield_j_hip_le_os"] =
"fire/fx_fire_ai_human_hip_left_os";
115 level._effect[
"fire_human_riotshield_j_hip_ri_os"] =
"fire/fx_fire_ai_human_hip_right_os";
116 level._effect[
"fire_human_riotshield_j_knee_le_os"] =
"fire/fx_fire_ai_human_leg_left_os";
117 level._effect[
"fire_human_riotshield_j_knee_ri_os"] =
"fire/fx_fire_ai_human_leg_right_os";
118 level._effect[
"fire_human_riotshield_j_head_os"] =
"fire/fx_fire_ai_human_head_os";
121 level._effect[
"fire_warlord_j_elbow_le_loop"] =
"fire/fx_fire_ai_human_arm_left_loop";
122 level._effect[
"fire_warlord_j_elbow_ri_loop"] =
"fire/fx_fire_ai_human_arm_right_loop";
123 level._effect[
"fire_warlord_j_shoulder_le_loop"] =
"fire/fx_fire_ai_human_arm_left_loop";
124 level._effect[
"fire_warlord_j_shoulder_ri_loop"] =
"fire/fx_fire_ai_human_arm_right_loop";
125 level._effect[
"fire_warlord_j_spine4_loop"] =
"fire/fx_fire_ai_human_torso_loop";
126 level._effect[
"fire_warlord_j_hip_le_loop"] =
"fire/fx_fire_ai_human_hip_left_loop";
127 level._effect[
"fire_warlord_j_hip_ri_loop"] =
"fire/fx_fire_ai_human_hip_right_loop";
128 level._effect[
"fire_warlord_j_knee_le_loop"] =
"fire/fx_fire_ai_human_leg_left_loop";
129 level._effect[
"fire_warlord_j_knee_ri_loop"] =
"fire/fx_fire_ai_human_leg_right_loop";
130 level._effect[
"fire_warlord_j_head_loop"] =
"fire/fx_fire_ai_human_head_loop";
132 level._effect[
"fire_warlord_j_elbow_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
133 level._effect[
"fire_warlord_j_elbow_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
134 level._effect[
"fire_warlord_j_shoulder_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
135 level._effect[
"fire_warlord_j_shoulder_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
136 level._effect[
"fire_warlord_j_spine4_os"] =
"fire/fx_fire_ai_human_torso_os";
137 level._effect[
"fire_warlord_j_hip_le_os"] =
"fire/fx_fire_ai_human_hip_left_os";
138 level._effect[
"fire_warlord_j_hip_ri_os"] =
"fire/fx_fire_ai_human_hip_right_os";
139 level._effect[
"fire_warlord_j_knee_le_os"] =
"fire/fx_fire_ai_human_leg_left_os";
140 level._effect[
"fire_warlord_j_knee_ri_os"] =
"fire/fx_fire_ai_human_leg_right_os";
141 level._effect[
"fire_warlord_j_head_os"] =
"fire/fx_fire_ai_human_head_os";
145 level._effect[
"fire_zombie_j_elbow_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
146 level._effect[
"fire_zombie_j_elbow_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
147 level._effect[
"fire_zombie_j_shoulder_le_os"] =
"fire/fx_fire_ai_human_arm_left_os";
148 level._effect[
"fire_zombie_j_shoulder_ri_os"] =
"fire/fx_fire_ai_human_arm_right_os";
149 level._effect[
"fire_zombie_j_spine4_os"] =
"fire/fx_fire_ai_human_torso_os";
150 level._effect[
"fire_zombie_j_hip_le_os"] =
"fire/fx_fire_ai_human_hip_left_os";
151 level._effect[
"fire_zombie_j_hip_ri_os"] =
"fire/fx_fire_ai_human_hip_right_os";
152 level._effect[
"fire_zombie_j_knee_le_os"] =
"fire/fx_fire_ai_human_leg_left_os";
153 level._effect[
"fire_zombie_j_knee_ri_os"] =
"fire/fx_fire_ai_human_leg_right_os";
154 level._effect[
"fire_zombie_j_head_os"] =
"fire/fx_fire_ai_human_head_os";
157 level._effect[
"smolder_human_j_elbow_le_os"] =
"smoke/fx_smk_ai_human_arm_left_os";
158 level._effect[
"smolder_human_j_elbow_ri_os"] =
"smoke/fx_smk_ai_human_arm_right_os";
159 level._effect[
"smolder_human_j_shoulder_le_os"] =
"smoke/fx_smk_ai_human_arm_left_os";
160 level._effect[
"smolder_human_j_shoulder_ri_os"] =
"smoke/fx_smk_ai_human_arm_right_os";
161 level._effect[
"smolder_human_j_spine4_os"] =
"smoke/fx_smk_ai_human_torso_os";
162 level._effect[
"smolder_human_j_hip_le_os"] =
"smoke/fx_smk_ai_human_hip_left_os";
163 level._effect[
"smolder_human_j_hip_ri_os"] =
"smoke/fx_smk_ai_human_hip_right_os";
164 level._effect[
"smolder_human_j_knee_le_os"] =
"smoke/fx_smk_ai_human_leg_left_os";
165 level._effect[
"smolder_human_j_knee_ri_os"] =
"smoke/fx_smk_ai_human_leg_right_os";
166 level._effect[
"smolder_human_j_head_os"] =
"smoke/fx_smk_ai_human_head_os";
170 level._effect[
"fire_robot_j_elbow_le_rot_loop"] =
"fire/fx_fire_ai_robot_arm_left_loop";
171 level._effect[
"fire_robot_j_elbow_ri_rot_loop"] =
"fire/fx_fire_ai_robot_arm_right_loop";
172 level._effect[
"fire_robot_j_shoulder_le_rot_loop"] =
"fire/fx_fire_ai_robot_arm_left_loop";
173 level._effect[
"fire_robot_j_shoulder_ri_rot_loop"] =
"fire/fx_fire_ai_robot_arm_right_loop";
174 level._effect[
"fire_robot_j_spine4_loop"] =
"fire/fx_fire_ai_robot_torso_loop";
175 level._effect[
"fire_robot_j_knee_le_loop"] =
"fire/fx_fire_ai_robot_leg_left_loop";
176 level._effect[
"fire_robot_j_knee_ri_loop"] =
"fire/fx_fire_ai_robot_leg_right_loop";
177 level._effect[
"fire_robot_j_head_loop"] =
"fire/fx_fire_ai_robot_head_loop";
178 level._effect[
"fire_robot_j_elbow_le_rot_os"] =
"fire/fx_fire_ai_robot_arm_left_os";
179 level._effect[
"fire_robot_j_elbow_ri_rot_os"] =
"fire/fx_fire_ai_robot_arm_right_os";
180 level._effect[
"fire_robot_j_shoulder_le_rot_os"] =
"fire/fx_fire_ai_robot_arm_left_os";
181 level._effect[
"fire_robot_j_shoulder_ri_rot_os"] =
"fire/fx_fire_ai_robot_arm_right_os";
182 level._effect[
"fire_robot_j_spine4_os"] =
"fire/fx_fire_ai_robot_torso_os";
183 level._effect[
"fire_robot_j_knee_le_os"] =
"fire/fx_fire_ai_robot_leg_left_os";
184 level._effect[
"fire_robot_j_knee_ri_os"] =
"fire/fx_fire_ai_robot_leg_right_os";
185 level._effect[
"fire_robot_j_head_os"] =
"fire/fx_fire_ai_robot_head_os";
190 function private _burnTag(localClientNum, tag, postfix)
192 if(isDefined(
self) &&
self HasDObj(localClientNum) )
194 fx_to_play = undefined;
196 fxname =
"fire_"+
self.archetype+
"_"+tag+postfix;
198 if( isdefined(level._effect[fxname]))
200 fx_to_play = level._effect[fxname];
203 if( isdefined(
self._effect ) && isdefined(
self._effect[fxname]))
205 fx_to_play =
self._effect[fxname];
208 if( isDefined( fx_to_play ))
210 fx = PlayFXOnTag(localClientNum, fx_to_play,
self, tag);
214 SetFXIgnorePause( localClientNum, fx,
true );
222 function private _burnStage(localClientNum, tagArray, shouldWait )
227 self endon(
"entityshutdown");
229 tags = array::randomize(tagArray);
231 for(i=1;i<tags.size;i++)
233 if ( tags[i] ==
"null" )
237 self.activeFX[
self.activeFX.size] =
self _burnTag(localClientNum, tags[i],(shouldWait?
"_loop":
"_os") );
240 wait RandomFloatRange(0.1,.3);
245 wait RandomFloatRange(0,1);
247 if ( isDefined(
self) )
248 self notify(
"burn_stage_finished");
253 self endon(
"entityshutdown");
255 self.burn_loop_sound_handle =
self playloopsound(
"chr_burn_npc_loop1", .2);
259 if (
self.archetype ==
"robot" )
261 boneModifier =
"_rot";
277 stage1BurnTags =
array(
"j_elbow_le"+boneModifier,
"j_elbow_ri"+boneModifier,
"null");
278 stage2BurnTags =
array(
"j_shoulder_le"+boneModifier,
"j_shoulder_ri"+boneModifier,
"null");
279 stage3BurnTags =
array(
"j_spine4",
"null");
280 stage4BurnTags =
array(
"j_hip_le",
"j_hip_ri",
"j_head",
"null");
281 stage5BurnTags =
array(
"j_knee_le",
"j_knee_ri",
"null");
288 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage1BurnTags,
true);
289 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 0.20 );
290 self waittill(
"burn_stage_finished");
291 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage2BurnTags,
true);
292 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 0.40 );
293 self waittill(
"burn_stage_finished");
294 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage3BurnTags,
true);
295 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 0.60 );
296 self waittill(
"burn_stage_finished");
297 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage4BurnTags,
true);
298 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 0.80 );
299 self waittill(
"burn_stage_finished");
300 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage5BurnTags,
true);
301 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 1.00 );
310 if( isdefined(
self.burn_loop_sound_handle ) )
312 self stoploopsound(
self.burn_loop_sound_handle );
319 self endon(
"entityshutdown");
324 if (
self.archetype ==
"robot" )
326 boneModifier =
"_rot";
330 stage1BurnTags =
array(
"j_elbow_le"+boneModifier,
"j_elbow_ri"+boneModifier);
331 stage2BurnTags =
array(
"j_shoulder_le"+boneModifier,
"j_shoulder_ri"+boneModifier);
332 stage3BurnTags =
array(
"j_spine4",
"j_spinelower",
"null");
333 stage4BurnTags =
array(
"j_hip_le",
"j_hip_ri",
"j_head");
334 stage5BurnTags =
array(
"j_knee_le",
"j_knee_ri");
336 self.burn_loop_sound_handle =
self playloopsound(
"chr_burn_npc_loop1", .2);
342 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage1BurnTags,
false);
343 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage2BurnTags,
false);
344 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage3BurnTags,
false);
345 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage4BurnTags,
false);
346 self.activeFX[
self.activeFX.size] =
self thread
_burnStage(localClientNum, stage5BurnTags,
false);
352 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 1.0 );
358 foreach(fx
in self.activeFX)
360 StopFx(localClientNum,fx);
362 self notify(
"stopBurningSounds" );
372 self endon(
"entityshutdown");
375 if (
self.archetype ==
"robot" )
377 boneModifier =
"_rot";
382 tags =
array(
"j_elbow_le"+boneModifier,
"j_elbow_ri"+boneModifier,
"j_shoulder_le",
"j_shoulder_ri",
"j_spine4",
"j_hip_le",
"j_hip_ri",
"j_knee_le",
"j_knee_ri",
"j_head");
383 num = RandomIntRange(6,10);
386 fxToPlay[fxToPlay.size] = tags[RandomInt(tags.size)];
389 foreach(tag
in fxToPlay)
391 fx =
"smolder_"+
self.archetype+tag+
"_os";
392 if(isDefined(level._effect[fx]))
394 activeFX[activeFX.size] = playfxontag(localClientNum,level._effect[fx],
self,tag);
395 wait RandomFloatRange(0.1,1);
401 foreach(fx
in activeFX)
403 StopFx(localClientNum,fx);
414 if (isDefined(
self.activeFX))
416 self StopAllLoopSounds(1);
418 foreach(fx
in self.activeFX)
420 StopFx(localClientNum,fx);
429 self thread
_burnCorpse(localClientNum, burningDuration);
441 function actor_char(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
453 self MapShaderConstant( localClientNum, 0,
"scriptVector0", 0);
456 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask * 1.0 );
461 #define CHAR_RAMP_TIME 2
464 self endon(
"entityshutdown");
466 if(!isDefined(
self.curCharLevel))
467 self.curCharLevel = 0;
473 if(!isDefined(
self.charsteps))
475 assert(isDefined(charDesired));
477 delta = charDesired -
self.curCharLevel;
478 self.charinc = delta/
self.charsteps;
480 while(
self.charsteps)
482 self.curCharLevel =
math::clamp(
self.curCharLevel+
self.charinc,0,1);
483 self MapShaderConstant( localClientNum, 0,
"scriptVector0", matureMask *
self.curCharLevel );