‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
_gadget_flashback.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 
3 #using scripts\shared\callbacks_shared;
4 #using scripts\shared\clientfield_shared;
5 #using scripts\shared\flag_shared;
6 #using scripts\shared\flagsys_shared;
7 #using scripts\shared\system_shared;
8 #using scripts\shared\util_shared;
9 #using scripts\shared\visionset_mgr_shared;
10 
11 #using scripts\shared\abilities\_ability_player;
12 #using scripts\shared\abilities\_ability_power;
13 #using scripts\shared\abilities\_ability_util;
14 
15 #insert scripts\shared\shared.gsh;
16 #insert scripts\shared\version.gsh;
17 #insert scripts\shared\abilities\_ability_util.gsh;
18 #insert scripts\shared\abilities\gadgets\_gadget_flashback.gsh;
19 
20 #namespace flashback;
21 
22 #define FLASHBACK_TRAIL_IMPACT_FX "player/fx_plyr_flashback_trail_impact"
23 
24 #precache( "fx", FLASHBACK_TRAIL_IMPACT_FX );
25 
26 ‪REGISTER_SYSTEM( "gadget_flashback", &‪__init__, undefined )
27 
28 function ‪__init__()
29 {
30  ‪clientfield::register( "scriptmover", "flashback_trail_fx", ‪VERSION_SHIP, 1, "int" );
31  ‪clientfield::register( "playercorpse", "flashback_clone" , ‪VERSION_SHIP, 1, "int" );
32  ‪clientfield::register( "allplayers", "flashback_activated" , ‪VERSION_SHIP, 1, "int" );
33 
40 
43 
44  if ( !IsDefined( level.vsmgr_prio_overlay_flashback_warp ) )
45  {
46  level.vsmgr_prio_overlay_flashback_warp = 27;
47  }
48  ‪visionset_mgr::register_info( "overlay", "flashback_warp", ‪VERSION_SHIP, level.vsmgr_prio_overlay_flashback_warp, 1, true, &‪visionset_mgr::ramp_in_out_thread_per_player_death_shutdown, false );
49 }
50 
52 {
53  self ‪clientfield::set( "flashback_activated", 0 );
54 }
55 
57 {
58  // returns true when local script gadget state is on
59  return self ‪flagsys::get( "gadget_flashback_on" );
60 }
61 
63 {
64  // returns true when local script gadget state is flickering
65  return self GadgetFlickering( slot );
66 }
67 
68 function ‪gadget_flashback_on_flicker( slot, weapon )
69 {
70 
71 }
72 
73 function ‪gadget_flashback_on_give( slot, weapon )
74 {
75  // executed when gadget is added to the players inventory
76 }
77 
78 function ‪gadget_flashback_on_take( slot, weapon )
79 {
80  // executed when gadget is removed from the players inventory
81 }
82 
83 //self is the player
85 {
86  // setup up stuff on player connect
87 }
88 
90 {
91  self endon ( "death" );
92 
93  wait( FLASHBACK_CLONE_DURATION );
94 
95  // do not delete the clones
96  // player corpses should never get deleted
97  self ‪clientfield::set( "flashback_clone", 0 );
98 
99  self ghost();
100 }
101 
102 
103 #define MAX_RECURSION_DEPTH 8
104 
105 function ‪drop_unlinked_grenades( linkedGrenades )
106 {
107  waittillframeend;
108 
109  foreach( grenade in linkedGrenades )
110  {
111  grenade ‪launch( (RandomFloatRange( -5, 5 ),RandomFloatRange( -5, 5 ),5) );
112  }
113 }
114 
115 function ‪unlink_grenades( oldpos )
116 {
117  radius = 32;
118  origin = oldpos;
119  grenades = getentarray( "grenade", "classname" );
120  radiusSq = radius * radius;
121  linkedGrenades = [];
122 
123  foreach( grenade in grenades )
124  {
125  if( DistanceSquared( origin, grenade.origin ) < radiusSq )
126  {
127  if ( IsDefined( grenade.stuckToPlayer ) && ( grenade.stuckToPlayer == self ) )
128  {
129  grenade unlink();
130 
131  linkedGrenades[linkedGrenades.size] = grenade;
132  }
133  }
134  }
135 
136  thread ‪drop_unlinked_grenades( linkedGrenades );
137 }
138 
139 function ‪gadget_flashback_on( slot, weapon )
140 {
141  // excecutes when the gadget is turned on
142  self ‪flagsys::set( "gadget_flashback_on" );
143 
144  self GadgetSetActivateTime( slot, GetTime() );
145 
147 
148  self.flashbackTime = GetTime();
149 
150  self notify("flashback");
151 
152  clone = self CreateFlashbackClone();
153  clone thread ‪clone_watch_death();
154  clone ‪clientfield::set( "flashback_clone", 1 );
155  self thread ‪watchClientfields();
156 
157  oldpos = self GetTagOrigin( "j_spineupper" );
158  offset = oldpos - self.origin;
159  self ‪unlink_grenades( oldpos );
160  newpos = self flashbackstart( weapon ) + offset;
161  self NotSolid();
162 
163  if ( isdefined ( newpos ) && isdefined ( oldpos ) )
164  {
165  self thread ‪flashbackTrailFx( slot, weapon, oldpos, newpos );
166  flashbackTrailImpact( newpos, oldpos, ‪MAX_RECURSION_DEPTH );
167  flashbackTrailImpact( oldpos, newpos, ‪MAX_RECURSION_DEPTH );
168 
169  if ( isdefined( level.playGadgetSuccess ) )
170  {
171  self [[ level.playGadgetSuccess ]]( weapon, "flashbackSuccessDelay" );
172  }
173  }
174 
176 }
177 
179 {
180  self endon ( "death" );
181  self endon ( "disconnect" );
182 
184  self ‪clientfield::set( "flashback_activated", 1 );
185 
187  self ‪clientfield::set( "flashback_activated", 0 );
188 }
189 
190 
191 function ‪flashBackTrailImpact( startPos, endPos, recursionDepth )
192 {
193  recursionDepth--;
194  if ( recursionDepth <= 0 )
195  {
196  return;
197  }
198  ‪trace = BulletTrace( startPos, endPos, false, self );
199  if ( ‪trace[ "fraction" ] < 1.0 && ‪trace[ "normal" ] != ( 0,0,0 ) )
200  {
201 
202  ‪PlayFx( ‪FLASHBACK_TRAIL_IMPACT_FX, ‪trace[ "position" ], ‪trace[ "normal" ] );
203  newStartPos = ‪trace[ "position" ] - ‪trace[ "normal" ];
204  ‪flashBackTrailImpact( newStartPos, endPos, recursionDepth );
205  }
206 }
207 
209 {
210  self endon( "disconnect" );
211 
212  self ‪util::waittill_any_timeout( time, "death" );
213 
214  ‪visionset_mgr::deactivate( "overlay", "flashback_warp", self );
215 }
216 
217 function ‪flashbackTrailFx( slot, weapon, oldpos, newPos )
218 {
219  dirVec = newPos - oldPos;
220  if ( dirVec == (0,0,0) )
221  {
222  dirVec = (0,0,1);
223  }
224  dirVec = VectorNormalize( dirVec );
225  angles = VectorToAngles( dirVec );
226  fxOrg = ‪spawn( "script_model", oldpos, 0, angles );
227  fxOrg.angles = angles;
228  fxOrg setowner( self );
229  fxOrg SetModel( "tag_origin" );
230 
231  fxOrg ‪clientfield::set( "flashback_trail_fx", 1 );
233  tagPos = self GetTagOrigin( "j_spineupper" );
234  fxOrg MoveTo( tagPos, 0.1 );
235  fxOrg waittill( "movedone" );
236  wait( 1 );
237  fxOrg ‪clientfield::set( "flashback_trail_fx", 0 );
239  fxOrg delete();
240 }
241 
242 function ‪gadget_flashback_is_primed( slot, weapon )
243 {
244 }
245 
246 function ‪gadget_flashback_off( slot, weapon )
247 {
248  // excecutes when the gadget is turned off
249  self ‪flagsys::clear( "gadget_flashback_on" );
250 
251  self Solid();
252  self flashbackfinish();
253 
254  if( level.gameEnded )
255  {
256  self FreezeControls( true );
257  }
258 
259 }
‪register_gadget_is_flickering_callbacks
‪function register_gadget_is_flickering_callbacks(type, flickering_func)
Definition: _ability_player.gsc:299
‪activate
‪function activate()
Definition: traps_shared.gsc:655
‪gadget_flashback_on_connect
‪function gadget_flashback_on_connect()
Definition: _gadget_flashback.gsc:84
‪register_gadget_possession_callbacks
‪function register_gadget_possession_callbacks(type, on_give, on_take)
Definition: _ability_player.gsc:221
‪FLASHBACK_WARP_LENGTH
‪#define FLASHBACK_WARP_LENGTH
Definition: _ability_util.gsh:82
‪clear
‪function clear(str_flag)
Definition: flag_shared.csc:130
‪ramp_in_out_thread_per_player_death_shutdown
‪function ramp_in_out_thread_per_player_death_shutdown(player, ramp_in, full_period, ramp_out)
Definition: visionset_mgr_shared.gsc:385
‪gadget_flashback_is_primed
‪function gadget_flashback_is_primed(slot, weapon)
Definition: _gadget_flashback.gsc:242
‪register_gadget_is_inuse_callbacks
‪function register_gadget_is_inuse_callbacks(type, inuse_func)
Definition: _ability_player.gsc:289
‪GADGET_TYPE_FLASHBACK
‪#define GADGET_TYPE_FLASHBACK
Definition: _ability_util.gsh:20
‪launch
‪function launch(ent_1, str_tag1, ent_2, str_tag2, str_beam_type)
Definition: beam_shared.csc:11
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪clone_watch_death
‪function clone_watch_death()
Definition: _gadget_flashback.gsc:89
‪FLASHBACK_TRAIL_IMPACT_FX
‪#define FLASHBACK_TRAIL_IMPACT_FX
Definition: _gadget_flashback.gsc:22
‪trace
‪function trace(from, to, target)
Definition: grapple.gsc:369
‪spawn
‪function spawn(v_origin=(0, 0, 0), v_angles=(0, 0, 0))
Definition: struct.csc:23
‪waittill_any_timeout
‪function waittill_any_timeout(n_timeout, string1, string2, string3, string4, string5)
Definition: util_shared.csc:423
‪get
‪function get(kvp_value, kvp_key="targetname")
Definition: struct.csc:13
‪gadget_flashback_on_take
‪function gadget_flashback_on_take(slot, weapon)
Definition: _gadget_flashback.gsc:78
‪register_gadget_flicker_callbacks
‪function register_gadget_flicker_callbacks(type, on_flicker)
Definition: _ability_player.gsc:253
‪flashBackTrailImpact
‪function flashBackTrailImpact(startPos, endPos, recursionDepth)
Definition: _gadget_flashback.gsc:191
‪gadget_flashback_on
‪function gadget_flashback_on(slot, weapon)
Definition: _gadget_flashback.gsc:139
‪watchClientfields
‪function watchClientfields()
Definition: _gadget_flashback.gsc:178
‪gadget_flashback_is_flickering
‪function gadget_flashback_is_flickering(slot)
Definition: _gadget_flashback.gsc:62
‪MAX_RECURSION_DEPTH
‪#define MAX_RECURSION_DEPTH
Definition: _gadget_flashback.gsc:103
‪on_spawned
‪function on_spawned(func, obj)
Definition: callbacks_shared.csc:245
‪wait_network_frame
‪function wait_network_frame(n_count=1)
Definition: util_shared.gsc:64
‪register_gadget_activation_callbacks
‪function register_gadget_activation_callbacks(type, turn_on, turn_off)
Definition: _ability_player.gsc:237
‪gadget_flashback_on_flicker
‪function gadget_flashback_on_flicker(slot, weapon)
Definition: _gadget_flashback.gsc:68
‪deactivate
‪function deactivate()
Definition: traps_shared.gsc:649
‪REGISTER_SYSTEM
‪#define REGISTER_SYSTEM(__sys, __func_init_preload, __reqs)
Definition: shared.gsh:204
‪unlink_grenades
‪function unlink_grenades(oldpos)
Definition: _gadget_flashback.gsc:115
‪deactivateFlashbackWarpAfterTime
‪function deactivateFlashbackWarpAfterTime(time)
Definition: _gadget_flashback.gsc:208
‪register_info
‪function register_info(type, name, version, lerp_step_count)
Definition: visionset_mgr_shared.csc:334
‪drop_unlinked_grenades
‪function drop_unlinked_grenades(linkedGrenades)
Definition: _gadget_flashback.gsc:105
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪register_gadget_primed_callbacks
‪function register_gadget_primed_callbacks(type, primed_func)
Definition: _ability_player.gsc:277
‪gadget_flashback_is_inuse
‪function gadget_flashback_is_inuse(slot)
Definition: _gadget_flashback.gsc:56
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪__init__
‪function __init__()
Definition: _gadget_flashback.gsc:28
‪on_connect
‪function on_connect()
Definition: _arena.gsc:20
‪gadget_flashback_off
‪function gadget_flashback_off(slot, weapon)
Definition: _gadget_flashback.gsc:246
‪gadget_flashback_on_give
‪function gadget_flashback_on_give(slot, weapon)
Definition: _gadget_flashback.gsc:73
‪flashbackTrailFx
‪function flashbackTrailFx(slot, weapon, oldpos, newPos)
Definition: _gadget_flashback.gsc:217
‪gadget_flashback_spawned
‪function gadget_flashback_spawned()
Definition: _gadget_flashback.gsc:51
‪PlayFx
‪function PlayFx(name)
Definition: _counteruav.gsc:390