‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_zm_perk_random.csc
Go to the documentation of this file.
1 #using scripts\shared\util_shared;
2 
3 #using scripts\shared\array_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\flag_shared;
6 #using scripts\shared\scene_shared;
7 #using scripts\shared\system_shared;
8 #using scripts\shared\util_shared;
9 
10 #using scripts\zm\_zm_audio;
11 #using scripts\zm\_zm_score;
12 #using scripts\zm\_zm_utility;
13 
14 #insert scripts\shared\shared.gsh;
15 #insert scripts\shared\version.gsh;
16 #insert scripts\zm\_zm_perks.gsh;
17 #insert scripts\zm\_zm_perk_random.gsh;
18 
19 #precache( "client_fx", "dlc1/castle/fx_wonder_fizz_light_yellow" );
20 #precache( "client_fx", "dlc1/castle/fx_wonder_fizz_light_red" );
21 #precache( "client_fx", "dlc1/castle/fx_wonder_fizz_light_green" );
22 #precache( "client_fx", "zombie/fx_wonder_fizz_lightning_all" );
23 
24 #namespace zm_perk_random;
25 
26 ‪REGISTER_SYSTEM( "zm_perk_random", &‪__init__, undefined )
27 
28 //* #using_animtree( "zm_perk_random" );
29 
30 function ‪__init__()
31 {
32  ‪clientfield::register( "scriptmover", "perk_bottle_cycle_state", ‪VERSION_DLC1, 2, "int", &‪start_bottle_cycling, !‪CF_HOST_ONLY, !‪CF_CALLBACK_ZERO_ON_NEW_ENT );
33  ‪clientfield::register( "zbarrier", "set_client_light_state", ‪VERSION_DLC1, 2, "int", &‪set_light_state, !‪CF_HOST_ONLY, !‪CF_CALLBACK_ZERO_ON_NEW_ENT );
36 
37 
38  ‪clientfield::register( "scriptmover", "turn_active_perk_light_green", ‪VERSION_DLC1, 1, "int", &‪turn_on_active_light_green, !‪CF_HOST_ONLY, !‪CF_CALLBACK_ZERO_ON_NEW_ENT );
41  ‪clientfield::register( "scriptmover", "turn_active_perk_ball_light", ‪VERSION_DLC1, 1, "int", &‪turn_on_active_ball_light, !‪CF_HOST_ONLY, !‪CF_CALLBACK_ZERO_ON_NEW_ENT );
43 
44  level._effect[ "perk_machine_light_yellow" ] = "dlc1/castle/fx_wonder_fizz_light_yellow";
45  level._effect[ "perk_machine_light_red" ] = "dlc1/castle/fx_wonder_fizz_light_red";
46  level._effect[ "perk_machine_light_green" ] = "dlc1/castle/fx_wonder_fizz_light_green";
47 
48  level._effect[ "perk_machine_location" ] = "zombie/fx_wonder_fizz_lightning_all";
49 }
50 
51 function ‪init_animtree()
52 {
53  //* ScriptModelsUseAnimTree( #animtree );
54 }
55 
56 //this is here to make sure old theatre files don't break
57 function ‪turn_on_location_indicator( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
58 {
59 
60 }
61 
62 // indicator effect for when machine has the ancient sphere present
63 function ‪lightning_bolt_fx_toggle( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
64 {
65  if ( IsDemoPlaying() && GetDemoVersion() < 17 )
66  {
67  return;
68  }
69 
70  self notify( "lightning_bolt_fx_toggle" + localClientNum );
71  self endon( "lightning_bolt_fx_toggle" + localClientNum );
72 
73  player = GetLocalPlayer( localClientNum );
74  player endon( "entityshutdown" );
75 
76  ‪DEFAULT( self._location_indicator, [] );
77 
78  while ( true )
79  {
80  if ( ( newVal == 1 ) && !IsIGCActive( localClientNum ) )
81  {
82  if ( !isdefined( self._location_indicator[ localClientNum ] ) )
83  {
84  self._location_indicator[ localClientNum ] = PlayFX( localClientNum, level._effect[ "perk_machine_location" ], self.origin );
85  }
86  }
87  else if ( isdefined( self._location_indicator[ localClientNum ] ) )
88  {
89  StopFX( localClientNum, self._location_indicator[ localClientNum ] );
90  self._location_indicator[ localClientNum ] = undefined;
91  }
92 
93  wait 1;
94  }
95 }
96 
97 
98 // only need this to turn off shader effects when the zone is recaptured
99 function ‪zone_captured_cb( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
100 {
101  // default mapped_const to 0
102  if ( !isdefined( self.mapped_const ) )
103  {
104  self MapShaderConstant( localClientNum, 1, "ScriptVector0" );
105  self.mapped_const = true;
106  }
107 
108  if ( newVal == 1 )
109  {
110  }
111  else
112  {
113  // shader
114  self.artifact_glow_setting = ‪ARTIFACT_DIM;
115  self.machinery_glow_setting = ‪MACHINE_OFF;
116  self SetShaderConstant( localClientNum, 1, self.artifact_glow_setting, 0, self.machinery_glow_setting, 0 );
117  }
118 }
119 
120 function ‪perk_random_machine_rock_emissive(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
121 {
122  if (newVal == 1)
123  {
124  //thread off a function to blink emissive - it dies when new val called as 0
125  piece = self ZBarrierGetPiece( ‪ZM_PERK_RANDOM_BODY_IDLE_PIECE_INDEX );
126  piece.blinking = true;
127 
128  piece thread ‪rock_emissive_think(localClientNum);
129  }
130  else if (newVal == 0)
131  {
132  //end prev function
133  self.blinking = false;
134  }
135 }
136 
137 function ‪rock_emissive_think(localClientNum)
138 {
139  level endon("demo_jump"); // end when theater mode rewinds
140 
141  while (‪IS_TRUE(self.blinking))
142  {
143  self ‪rock_emissive_fade(localClientNum, 8, 0);
144  self ‪rock_emissive_fade(localClientNum, 0, 8);
145  }
146 }
147 
148 function ‪rock_emissive_fade(localClientNum, n_max_val, n_min_val)
149 {
150  const N_CONVERT_FROM_SECONDS = 1000;
151  const N_RAMP_DURATION = .5;
152 
153  n_start_time = GetTime();
154 
155  n_end_time = n_start_time + N_RAMP_DURATION * N_CONVERT_FROM_SECONDS;
156 
157  b_is_updating = true;
158  while(b_is_updating)
159  {
160  n_time = GetTime();
161 
162  if( n_time >= n_end_time )
163  {
164  n_shader_value = MapFloat( n_start_time, n_end_time, n_min_val, n_max_val, n_end_time );
165  b_is_updating = false;
166  }
167  else
168  {
169  n_shader_value = MapFloat( n_start_time, n_end_time, n_min_val, n_max_val, n_time );
170  }
171 
172  if ( isdefined(self) )
173  {
174  self MapShaderConstant( localClientNum, 0, "scriptVector2", n_shader_value, 0, 0 ); // 2 x
175  self MapShaderConstant( localClientNum, 0, "scriptVector0", 0, n_shader_value, 0 ); // 0 y
176  self MapShaderConstant( localClientNum, 0, "scriptVector0", 0, 0, n_shader_value ); // 0 y
177  }
178 
179  wait 0.01;
180  }
181 }
182 
183 function private ‪perk_random_machine_init( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
184 {
185  if ( IsDefined( self.perk_random_machine_fx ) )
186  {
187  return;
188  }
189 
190  if (!IsDefined(self))
191  return;
192 
193  self.perk_random_machine_fx = [];
194 
195  self.perk_random_machine_fx[ZM_PERK_RANDOM_STATUS_FX_TAG+‪ZM_PERK_RANDOM_BODY_ON_OFF_PIECE_INDEX] = [];
196  self.perk_random_machine_fx[ZM_PERK_RANDOM_STATUS_FX_TAG+‪ZM_PERK_RANDOM_BODY_AVAILABLE_PIECE_INDEX] = [];
197  self.perk_random_machine_fx[ZM_PERK_RANDOM_STATUS_FX_TAG+‪ZM_PERK_RANDOM_BODY_IDLE_PIECE_INDEX] = [];
198 
199 }
200 
201 // effects for when machine is powered
202 function ‪set_light_state( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
203 {
204  //loop over all three peices
206  foreach (n_piece_index in a_n_piece_indices)
207  {
208  //send piece index and get it in function
209  if ( newVal == ‪ZM_PERK_RANDOM_NO_LIGHT_BIT )
210  {
211  ‪perk_random_machine_play_fx(localClientNum, n_piece_index, ZM_PERK_RANDOM_STATUS_FX_TAG, undefined);
212  }
213  else if ( newVal == ‪ZM_PERK_RANDOM_RED_LIGHT_BIT )
214  {
215  //red light
216  ‪perk_random_machine_play_fx(localClientNum, n_piece_index, ZM_PERK_RANDOM_STATUS_FX_TAG, level._effect[ "perk_machine_light_red" ]);
217 
218  }
219  else if ( newVal == ‪ZM_PERK_RANDOM_GREEN_LIGHT_BIT )
220  {
221  //green light
222  ‪perk_random_machine_play_fx(localClientNum, n_piece_index, ZM_PERK_RANDOM_STATUS_FX_TAG, level._effect[ "perk_machine_light_green" ]);
223 
224  }
225  else if ( newVal == ‪ZM_PERK_RANDOM_YELLOW_LIGHT_BIT )
226  {
227  //yellow light
228  //perk_random_machine_play_fx(localClientNum, fx_piece, ZM_PERK_RANDOM_STATUS_FX_TAG, level._effect[ "perk_machine_light_yellow" ]);
229  }
230  }
231 }
232 
233 function private ‪perk_random_machine_play_fx( localClientNum, piece_index, tag, fx, deleteImmediate = true )
234 {
235  piece = self ZBarrierGetPiece( piece_index );
236 
237  if ( IsDefined( self.perk_random_machine_fx[tag+piece_index][localClientNum] ) )
238  {
239  DeleteFX( localClientNum, self.perk_random_machine_fx[tag+piece_index][localClientNum], deleteImmediate );
240  self.perk_random_machine_fx[tag+piece_index][localClientNum] = undefined;
241  }
242 
243  if ( IsDefined( fx ) )
244  {
245  self.perk_random_machine_fx[tag+piece_index][localClientNum] = PlayFXOnTag( localClientNum, fx, piece, tag );
246  }
247 }
248 
249 function ‪turn_on_active_light_green( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
250 {
251  if ( newVal == 1 )
252  {
253  //* self._active_glow_green = PlayFXOnTag( localClientNum, level._effect[ "perk_machine_light_green" ], self, "tag_origin" );
254  // shader
255  self.artifact_glow_setting = ‪ARTIFACT_DIM;
256  self.machinery_glow_setting = ‪MACHINE_AVAILABLE;
257  self SetShaderConstant( localClientNum, 1, self.artifact_glow_setting, 0, self.machinery_glow_setting, 0 );
258  }
259  else
260  {
261  //* StopFX( localClientNum, self._active_glow_green );
262  }
263 }
264 
265 // effects for when machine is powered and ball is present
266 function ‪turn_on_active_ball_light( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
267 {
268  if ( newVal == 1 )
269  {
270  //* self._ball_glow = PlayFXOnTag( localClientNum, level._effect[ "perk_machine_light" ], self, "j_ball" );
271 
272  // shader
273  self.artifact_glow_setting = ‪ARTIFACT_DIM;
274  self.machinery_glow_setting = ‪MACHINE_ACTIVATED;
275  self SetShaderConstant( localClientNum, 1, self.artifact_glow_setting, 0, self.machinery_glow_setting, 0 );
276  }
277  else
278  {
279  //* StopFX( localClientNum, self._ball_glow );
280  }
281 }
282 
283 // vortex for when machine is activated, start a thread that calls every 0.1 seconds
284 function ‪start_bottle_cycling( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
285 {
286  if ( newVal == 1 )
287  {
288  self thread ‪start_vortex_fx( localClientNum );
289  }
290  else
291  {
292  self thread ‪stop_vortex_fx( localClientNum );
293  }
294 }
295 
296 function ‪start_vortex_fx( localClientNum )
297 {
298  self endon( "activation_electricity_finished" );
299  self endon( "entityshutdown" );
300 
301  if ( !isdefined( self.glow_location ) )
302  {
303  self.glow_location = ‪spawn( localclientNum, self.origin, "script_model" );
304  self.glow_location.angles = self.angles;
305  self.glow_location setmodel( "tag_origin" );
306  }
307 
308  // progression of effects
309  self thread ‪fx_activation_electric_loop( localClientNum );
310  self thread ‪fx_artifact_pulse_thread( localClientNum );
311  //SOUND - Shawn J
312  //* playsound( localClientNum, "zmb_rand_perk_vortex_sparks", self.origin );
314 
315  self thread ‪fx_bottle_cycling( localClientNum );
316  //SOUND - Shawn J
317  //* soundloopemitter ( "zmb_rand_perk_vortex", self.origin );
318 }
319 
320 function ‪stop_vortex_fx( localClientNum )
321 {
322  self endon( "entityshutdown" );
323  // progression of effects - shutdown is in reverse
324  self notify( "bottle_cycling_finished" );
325  //SOUND - Shawn J
326  //* playsound( localClientNum, "zmb_rand_perk_vortex_sparks", self.origin );
328 
329  //SOUND - Shawn J
330  //* soundstoploopemitter ( "zmb_rand_perk_vortex", self.origin );
331 
332  if ( !IsDefined( self ) )
333  {
334  return;
335  }
336 
337  self notify( "activation_electricity_finished" );
338  if ( isdefined( self.glow_location ) )
339  {
340  self.glow_location delete();
341  }
342 
343  // shader
344  self.artifact_glow_setting = ‪ARTIFACT_DIM;
345  self.machinery_glow_setting = ‪MACHINE_AVAILABLE;
346  self SetShaderConstant( localClientNum, 1, self.artifact_glow_setting, 0, self.machinery_glow_setting, 0 );
347 }
348 
349 function ‪fx_artifact_pulse_thread( localClientNum )
350 {
351  self endon( "activation_electricity_finished" );
352  self endon( "entityshutdown" );
353 
354  // shader
355  while ( IsDefined( self ) )
356  {
357  const ARTIFACT_PULSE_TIMESCALE = 0.2;
358  const ARTIFACT_PULSE_BASELINE = 0.75; // max glow is 0, min is 1
359  shader_amount = ( Sin( getrealtime() * ARTIFACT_PULSE_TIMESCALE ) );
360  if ( shader_amount < 0 )
361  {
362  shader_amount *= -1;
363  }
364  shader_amount = ARTIFACT_PULSE_BASELINE - ( shader_amount * ARTIFACT_PULSE_BASELINE ); // max glow is 0, min is 1
365  self.artifact_glow_setting = shader_amount;
366  self.machinery_glow_setting = ‪MACHINE_ACTIVATED;
367  self SetShaderConstant( localClientNum, 1, self.artifact_glow_setting, 0, self.machinery_glow_setting, 0 );
368  wait 0.05;
369  }
370 }
371 
372 // this controls the activation electrical effect - loops every tenth of a second
373 function ‪fx_activation_electric_loop( localClientNum )
374 {
375  self endon( "activation_electricity_finished" );
376  self endon( "entityshutdown" );
377 
378  while ( true )
379  {
380  if ( IsDefined( self.glow_location ) )
381  {
382  //* PlayFXOnTag( localClientNum, level._effect[ "perk_machine_activation_electric_loop" ], self.glow_location, "tag_origin" );
383  }
384  wait 0.1;
385  }
386 }
387 
388 // this controls the portal effect - loops every tenth of a second
389 function ‪fx_bottle_cycling( localClientNum )
390 {
391  self endon( "bottle_cycling_finished" );
392 
393  while ( true )
394  {
395  if ( IsDefined( self.glow_location ) )
396  {
397  //* PlayFXOnTag( localClientNum, level._effect[ "bottle_glow" ], self.glow_location, "tag_origin" );
398  }
399  wait 0.1;
400  }
401 }
‪perk_random_machine_play_fx
‪function private perk_random_machine_play_fx(localClientNum, piece_index, tag, fx, deleteImmediate=true)
Definition: _zm_perk_random.csc:233
‪turn_on_active_light_green
‪function turn_on_active_light_green(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:249
‪MACHINE_OFF
‪#define MACHINE_OFF
Definition: _zm_perk_random.gsh:6
‪zone_captured_cb
‪function zone_captured_cb(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:99
‪ZM_PERK_RANDOM_GREEN_LIGHT_BIT
‪#define ZM_PERK_RANDOM_GREEN_LIGHT_BIT
Definition: _zm_perk_random.gsh:34
‪rock_emissive_think
‪function rock_emissive_think(localClientNum)
Definition: _zm_perk_random.csc:137
‪VERSION_TU10
‪#define VERSION_TU10
Definition: version.gsh:59
‪CF_CALLBACK_ZERO_ON_NEW_ENT
‪#define CF_CALLBACK_ZERO_ON_NEW_ENT
Definition: version.gsh:103
‪DELAY_POST_PORTAL_EFFECT
‪#define DELAY_POST_PORTAL_EFFECT
Definition: _zm_perk_random.gsh:21
‪ARTIFACT_DIM
‪#define ARTIFACT_DIM
Definition: _zm_perk_random.gsh:15
‪start_bottle_cycling
‪function start_bottle_cycling(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:284
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪stop_vortex_fx
‪function stop_vortex_fx(localClientNum)
Definition: _zm_perk_random.csc:320
‪rock_emissive_fade
‪function rock_emissive_fade(localClientNum, n_max_val, n_min_val)
Definition: _zm_perk_random.csc:148
‪init_animtree
‪function init_animtree()
Definition: _zm_perk_random.csc:51
‪MACHINE_AVAILABLE
‪#define MACHINE_AVAILABLE
Definition: _zm_perk_random.gsh:8
‪ZM_PERK_RANDOM_BODY_ON_OFF_PIECE_INDEX
‪#define ZM_PERK_RANDOM_BODY_ON_OFF_PIECE_INDEX
Definition: _zm_perk_random.gsh:25
‪ZM_PERK_RANDOM_BODY_IDLE_PIECE_INDEX
‪#define ZM_PERK_RANDOM_BODY_IDLE_PIECE_INDEX
Definition: _zm_perk_random.gsh:27
‪ZM_PERK_RANDOM_NO_LIGHT_BIT
‪#define ZM_PERK_RANDOM_NO_LIGHT_BIT
Definition: _zm_perk_random.gsh:33
‪fx_activation_electric_loop
‪function fx_activation_electric_loop(localClientNum)
Definition: _zm_perk_random.csc:373
‪DEFAULT
‪#define DEFAULT(__var, __default)
Definition: shared.gsh:270
‪fx_artifact_pulse_thread
‪function fx_artifact_pulse_thread(localClientNum)
Definition: _zm_perk_random.csc:349
‪ZM_PERK_RANDOM_RED_LIGHT_BIT
‪#define ZM_PERK_RANDOM_RED_LIGHT_BIT
Definition: _zm_perk_random.gsh:36
‪VERSION_DLC1
‪#define VERSION_DLC1
Definition: version.gsh:91
‪__init__
‪function __init__()
Definition: _zm_perk_random.csc:30
‪CF_HOST_ONLY
‪#define CF_HOST_ONLY
Definition: version.gsh:102
‪MACHINE_ACTIVATED
‪#define MACHINE_ACTIVATED
Definition: _zm_perk_random.gsh:9
‪turn_on_active_ball_light
‪function turn_on_active_ball_light(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:266
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪array
‪function filter array
Definition: array_shared.csc:16
‪DELAY_PRE_PORTAL_EFFECT
‪#define DELAY_PRE_PORTAL_EFFECT
Definition: _zm_perk_random.gsh:18
‪start_vortex_fx
‪function start_vortex_fx(localClientNum)
Definition: _zm_perk_random.csc:296
‪lightning_bolt_fx_toggle
‪function lightning_bolt_fx_toggle(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:63
‪turn_on_location_indicator
‪function turn_on_location_indicator(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:57
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪ZM_PERK_RANDOM_BODY_AVAILABLE_PIECE_INDEX
‪#define ZM_PERK_RANDOM_BODY_AVAILABLE_PIECE_INDEX
Definition: _zm_perk_random.gsh:26
‪perk_random_machine_rock_emissive
‪function perk_random_machine_rock_emissive(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:120
‪ZM_PERK_RANDOM_YELLOW_LIGHT_BIT
‪#define ZM_PERK_RANDOM_YELLOW_LIGHT_BIT
Definition: _zm_perk_random.gsh:35
‪set_light_state
‪function set_light_state(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:202
‪perk_random_machine_init
‪function private perk_random_machine_init(localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump)
Definition: _zm_perk_random.csc:183
‪fx_bottle_cycling
‪function fx_bottle_cycling(localClientNum)
Definition: _zm_perk_random.csc:389