‪Black Ops 3 Source Code Explorer  0.1
‪An script explorer for Black Ops 3 by ZeRoY
gib.gsc
Go to the documentation of this file.
1 #using scripts\codescripts\struct;
2 #using scripts\shared\clientfield_shared;
3 #using scripts\shared\throttle_shared;
4 #using scripts\shared\ai\systems\destructible_character;
5 #using scripts\shared\ai\systems\shared;
6 
7 #insert scripts\shared\shared.gsh;
8 #insert scripts\shared\version.gsh;
9 #insert scripts\shared\ai\systems\gib.gsh;
10 
11 function private ‪fields_equal( field_a, field_b)
12 {
13  if ( !isDefined(field_a) && !isDefined(field_b))
14  return true;
15  if ( isDefined(field_a) && isDefined(field_b) && field_a == field_b )
16  return true;
17  return false;
18 }
19 
20 function private ‪_IsDefaultPlayerGib( gibPieceFlag, gibStruct )
21 {
22  if ( !‪fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibdynentfx , gibStruct.gibdynentfx ) )
23  {
24  return false;
25  }
26  if ( !‪fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibfxtag, gibStruct.gibfxtag ) )
27  {
28  return false;
29  }
30  if ( !‪fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibfx, gibStruct.gibfx ) )
31  {
32  return false;
33  }
34  if ( !‪fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibtag, gibStruct.gibtag ) )
35  {
36  return false;
37  }
38 
39  return true;
40 }
41 
42 function autoexec ‪main()
43 {
45  "actor",
50 
52  "playercorpse",
57 
58  gibDefinitions = ‪GET_GIB_BUNDLES();
59 
60  gibPieceLookup = [];
61  gibPieceLookup[‪GIB_ANNIHILATE_FLAG] = "annihilate";
62  gibPieceLookup[‪GIB_TORSO_HEAD_FLAG] = "head";
63  gibPieceLookup[‪GIB_TORSO_RIGHT_ARM_FLAG] = "rightarm";
64  gibPieceLookup[‪GIB_TORSO_LEFT_ARM_FLAG] = "leftarm";
65  gibPieceLookup[‪GIB_LEGS_RIGHT_LEG_FLAG] = "rightleg";
66  gibPieceLookup[‪GIB_LEGS_LEFT_LEG_FLAG] = "leftleg";
67 
68  processedBundles = [];
69 
70  if ( SessionModeIsMultiplayerGame() )
71  {
72  level.playerGibBundle = SpawnStruct();
73  level.playerGibBundle.gibs = [];
74  level.playerGibBundle.name = "default_player";
75 
76  level.playerGibBundle.gibs[‪GIB_ANNIHILATE_FLAG] = SpawnStruct();
77  level.playerGibBundle.gibs[‪GIB_TORSO_HEAD_FLAG] = SpawnStruct();
78  level.playerGibBundle.gibs[‪GIB_TORSO_LEFT_ARM_FLAG] = SpawnStruct();
79  level.playerGibBundle.gibs[‪GIB_LEGS_LEFT_LEG_FLAG] = SpawnStruct();
80  level.playerGibBundle.gibs[‪GIB_TORSO_RIGHT_ARM_FLAG] = SpawnStruct();
81  level.playerGibBundle.gibs[‪GIB_LEGS_RIGHT_LEG_FLAG] = SpawnStruct();
82  level.playerGibBundle.gibs[‪GIB_ANNIHILATE_FLAG].gibfxtag = "j_spinelower";
83  level.playerGibBundle.gibs[‪GIB_ANNIHILATE_FLAG].gibfx = "blood/fx_blood_impact_exp_body_lg";
84  level.playerGibBundle.gibs[‪GIB_TORSO_LEFT_ARM_FLAG].gibmodel = "c_t7_mp_battery_mpc_body1_s_larm";
85  level.playerGibBundle.gibs[‪GIB_TORSO_LEFT_ARM_FLAG].gibdynentfx = "blood/fx_blood_gib_limb_trail_emitter";
86  level.playerGibBundle.gibs[‪GIB_TORSO_LEFT_ARM_FLAG].gibfxtag = "j_elbow_le";
87  level.playerGibBundle.gibs[‪GIB_TORSO_LEFT_ARM_FLAG].gibfx = "blood/fx_blood_gib_arm_sever_burst";
88  level.playerGibBundle.gibs[‪GIB_TORSO_LEFT_ARM_FLAG].gibtag = "j_elbow_le";
89  level.playerGibBundle.gibs[‪GIB_LEGS_LEFT_LEG_FLAG].gibmodel = "c_t7_mp_battery_mpc_body1_s_lleg";
90  level.playerGibBundle.gibs[‪GIB_LEGS_LEFT_LEG_FLAG].gibdynentfx = "blood/fx_blood_gib_limb_trail_emitter";
91  level.playerGibBundle.gibs[‪GIB_LEGS_LEFT_LEG_FLAG].gibfxtag = "j_knee_le";
92  level.playerGibBundle.gibs[‪GIB_LEGS_LEFT_LEG_FLAG].gibfx = "blood/fx_blood_gib_leg_sever_burst";
93  level.playerGibBundle.gibs[‪GIB_LEGS_LEFT_LEG_FLAG].gibtag = "j_knee_le";
94  level.playerGibBundle.gibs[‪GIB_TORSO_RIGHT_ARM_FLAG].gibmodel = "c_t7_mp_battery_mpc_body1_s_rarm";
95  level.playerGibBundle.gibs[‪GIB_TORSO_RIGHT_ARM_FLAG].gibdynentfx = "blood/fx_blood_gib_limb_trail_emitter";
96  level.playerGibBundle.gibs[‪GIB_TORSO_RIGHT_ARM_FLAG].gibfxtag = "j_elbow_ri";
97  level.playerGibBundle.gibs[‪GIB_TORSO_RIGHT_ARM_FLAG].gibfx = "blood/fx_blood_gib_arm_sever_burst_rt";
98  level.playerGibBundle.gibs[‪GIB_TORSO_RIGHT_ARM_FLAG].gibtag = "j_elbow_ri";
99  level.playerGibBundle.gibs[‪GIB_LEGS_RIGHT_LEG_FLAG].gibmodel = "c_t7_mp_battery_mpc_body1_s_rleg";
100  level.playerGibBundle.gibs[‪GIB_LEGS_RIGHT_LEG_FLAG].gibdynentfx = "blood/fx_blood_gib_limb_trail_emitter";
101  level.playerGibBundle.gibs[‪GIB_LEGS_RIGHT_LEG_FLAG].gibfxtag = "j_knee_ri";
102  level.playerGibBundle.gibs[‪GIB_LEGS_RIGHT_LEG_FLAG].gibfx = "blood/fx_blood_gib_leg_sever_burst_rt";
103  level.playerGibBundle.gibs[‪GIB_LEGS_RIGHT_LEG_FLAG].gibtag = "j_knee_ri";
104  }
105 
106  // Process each gib bundle to allow quick access to information in the future.
107  foreach ( definitionName, definition in gibDefinitions )
108  {
109  gibBundle = SpawnStruct();
110  gibBundle.gibs = [];
111  gibBundle.name = definitionName;
112  default_player = false;
113 
114  foreach ( gibPieceFlag, gibPieceName in gibPieceLookup )
115  {
116  gibStruct = SpawnStruct();
117  gibStruct.gibmodel = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibmodel" );
118  gibStruct.gibtag = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibtag" );
119  gibStruct.gibfx = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibfx" );
120  gibStruct.gibfxtag = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibeffecttag" );
121  gibStruct.gibdynentfx = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibdynentfx" );
122  gibStruct.gibsound = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibsound" );
123  gibStruct.gibhidetag = GetStructField( definition, gibPieceLookup[ gibPieceFlag ] + "_gibhidetag" );
124 
125  if ( SessionModeIsMultiplayerGame() && ‪_IsDefaultPlayerGib( gibPieceFlag, gibStruct ) )
126  {
127  default_player = true;
128  }
129 
130  gibBundle.gibs[ gibPieceFlag ] = gibStruct;
131  }
132 
133  if ( SessionModeIsMultiplayerGame() && default_player )
134  {
135  processedBundles[ definitionName ] = level.playerGibBundle;
136  }
137  else
138  {
139  processedBundles[ definitionName ] = gibBundle;
140  }
141  }
142 
143  // Replaces all gib character define bundles with their processed form to free unncessary script variables.
144  level.scriptbundles[ "gibcharacterdef" ] = processedBundles;
145 
146  if ( !IsDefined( level.gib_throttle ) )
147  {
148  level.gib_throttle = new ‪Throttle();
149  // Two gibs every 0.2 seconds.
150  [[ level.gib_throttle ]]->Initialize( 2, 0.2 );
151  }
152 }
153 
154 #namespace GibServerUtils;
155 
156 function private ‪_Annihilate( entity )
157 {
158  if ( IsDefined( entity ) )
159  {
160  entity NotSolid();
161  }
162 }
163 
164 function private ‪_GetGibExtraModel( entity, gibFlag )
165 {
166  if ( gibFlag == ‪GIB_HEAD_HAT_FLAG )
167  return ‪GIB_HAT_MODEL( entity );
168  else if ( gibFlag == ‪GIB_TORSO_HEAD_FLAG )
169  return ‪GIB_HEAD_MODEL( entity );
170  else
171  AssertMsg( "Unable to find gib model." );
172 }
173 
174 // Used to solely gib equipment and the actor's head.
175 // Does not change the torso or leg models.
176 function private ‪_GibExtra( entity, gibFlag )
177 {
178  if ( ‪IsGibbed( entity, gibFlag ) )
179  {
180  return false;
181  }
182 
183  if ( !‪_HasGibDef( entity ) )
184  {
185  return false;
186  }
187 
188  entity thread ‪_GibExtraInternal( entity, gibFlag );
189 
190  return true;
191 }
192 
193 function private ‪_GibExtraInternal( entity, gibFlag )
194 {
195  // Allow simulatenous gibs to happen on the same frame, since the network
196  // cost is negligible if the gib is for the same entity.
197  if ( entity.gib_time !== GetTime() )
198  {
199  [[ level.gib_throttle ]]->WaitInQueue( entity );
200  }
201 
202  if ( !IsDefined( entity ) )
203  {
204  return;
205  }
206 
207  entity.gib_time = GetTime();
208 
209  if ( ‪IsGibbed( entity, gibFlag ) )
210  {
211  return false;
212  }
213 
214  if ( gibFlag == ‪GIB_TORSO_HEAD_FLAG )
215  {
216  if ( IsDefined( ‪GIB_TORSO_HEAD_GONE_MODEL( entity ) ) )
217  {
218  entity Attach( ‪GIB_TORSO_HEAD_GONE_MODEL( entity ), "", true );
219  }
220  }
221 
222  ‪_SetGibbed( entity, gibFlag, undefined );
223 
225  ‪ShowHiddenGibPieces( entity );
226 
227  gibModel = ‪_GetGibExtraModel( entity, gibFlag );
228  if ( IsDefined( gibModel ) )
229  {
230  entity Detach( gibModel, "" );
231  }
232 
234  ‪ReapplyHiddenGibPieces( entity );
235 }
236 
237 // Used to gib torso or leg pieces, not including equipment or the actor's head.
238 // Changes the torso and leg models.
239 function private ‪_GibEntity( entity, gibFlag )
240 {
241  if ( ‪IsGibbed( entity, gibFlag ) || !‪_HasGibPieces( entity, gibFlag ) )
242  {
243  return false;
244  }
245 
246  if ( !‪_HasGibDef( entity ) )
247  {
248  return false;
249  }
250 
251  entity thread ‪_GibEntityInternal( entity, gibFlag );
252 
253  return true;
254 }
255 
256 function private ‪_GibEntityInternal( entity, gibFlag )
257 {
258  // Allow simulatenous gibs to happen on the same frame, since the network
259  // cost is negligible if the gib is for the same entity.
260  if ( entity.gib_time !== GetTime() )
261  {
262  [[ level.gib_throttle ]]->WaitInQueue( entity );
263  }
264 
265  if ( !IsDefined( entity ) )
266  {
267  return;
268  }
269 
270  entity.gib_time = GetTime();
271 
272  if ( ‪IsGibbed( entity, gibFlag ) )
273  {
274  return;
275  }
276 
278  ‪ShowHiddenGibPieces( entity );
279 
280  if ( !‪IS_BODY_UNDAMAGED( ‪_GetGibbedState( entity ) ) )
281  {
282  legModel = ‪_GetGibbedLegModel( entity );
283  entity Detach( legModel );
284  }
285 
286  ‪_SetGibbed( entity, gibFlag, undefined );
287 
288  entity SetModel( ‪_GetGibbedTorsoModel( entity ) );
289  entity Attach( ‪_GetGibbedLegModel( entity ) );
290 
292  ‪ReapplyHiddenGibPieces( entity );
293 }
294 
295 function private ‪_GetGibbedLegModel( entity )
296 {
297  gibState = ‪_GetGibbedState( entity );
298  rightLegGibbed = ‪IS_GIBBED( gibState, ‪GIB_LEGS_RIGHT_LEG_FLAG);
299  leftLegGibbed = ‪IS_GIBBED( gibState, ‪GIB_LEGS_LEFT_LEG_FLAG);
300 
301  if ( rightLegGibbed && leftLegGibbed)
302  {
303  return ‪GIB_LEGS_NO_LEGS_MODEL( entity );
304  }
305  else if ( rightLegGibbed )
306  {
307  return ‪GIB_LEGS_RIGHT_LEG_GONE_MODEL( entity );
308  }
309  else if ( leftLegGibbed )
310  {
311  return ‪GIB_LEGS_LEFT_LEG_GONE_MODEL( entity );
312  }
313 
314  return ‪GIB_LEGS_UNDAMAGED_MODEL( entity );
315 }
316 
317 function private ‪_GetGibbedState( entity )
318 {
319  if ( IsDefined( entity.gib_state ) )
320  {
321  return entity.gib_state;
322  }
323 
324  return ‪GIB_UNDAMAGED_FLAG;
325 }
326 
327 function private ‪_GetGibbedTorsoModel( entity )
328 {
329  gibState = ‪_GetGibbedState( entity );
330  rightArmGibbed = ‪IS_GIBBED( gibState, ‪GIB_TORSO_RIGHT_ARM_FLAG);
331  leftArmGibbed = ‪IS_GIBBED( gibState, ‪GIB_TORSO_LEFT_ARM_FLAG);
332 
333  if ( rightArmGibbed && leftArmGibbed )
334  {
335  return ‪GIB_TORSO_RIGHT_ARM_GONE_MODEL( entity );
336 
337  // TODO(David Young 5-14-14): Currently AI's don't support both arms getting blown off.
338  // return GIB_TORSO_NO_ARMS_MODEL( entity );
339  }
340  else if ( rightArmGibbed )
341  {
342  return ‪GIB_TORSO_RIGHT_ARM_GONE_MODEL( entity );
343  }
344  else if ( leftArmGibbed )
345  {
346  return ‪GIB_TORSO_LEFT_ARM_GONE_MODEL( entity );
347  }
348 
349  return ‪GIB_TORSO_UNDAMAGED_MODEL( entity );
350 }
351 
352 function private ‪_HasGibDef( entity )
353 {
354  return IsDefined( entity.gibdef );
355 }
356 
357 function private ‪_HasGibPieces( entity, gibFlag )
358 {
359  hasGibPieces = false;
360  gibState = ‪_GetGibbedState( entity );
361  entity.gib_state = ‪SET_GIBBED( gibState, gibFlag );
362 
363  if ( IsDefined( ‪_GetGibbedTorsoModel( entity ) ) &&
364  IsDefined( ‪_GetGibbedLegModel( entity ) ) )
365  {
366  hasGibPieces = true;
367  }
368 
369  entity.gib_state = gibState;
370 
371  return hasGibPieces;
372 }
373 
374 function private ‪_SetGibbed( entity, gibFlag, gibDir )
375 {
376  if ( IsDefined( gibDir ) )
377  {
378  angles = VectortoAngles( gibDir );
379  yaw = angles[1];
380  yaw_bits = getbitsforangle( yaw, ‪GIB_DIR_BITS );
381  entity.gib_state = ‪SET_GIBBED_PLAYER( ‪_GetGibbedState( entity ), gibFlag, yaw_bits );
382  }
383  else
384  {
385  entity.gib_state = ‪SET_GIBBED( ‪_GetGibbedState( entity ), gibFlag );
386  }
387 
388  entity.gibbed = true;
389 
390  entity ‪clientfield::set( ‪GIB_CLIENTFIELD, entity.gib_state );
391 }
392 
393 function ‪Annihilate( entity )
394 {
395  if ( !‪_HasGibDef( entity ) )
396  {
397  return false;
398  }
399 
400  gibBundle = ‪GET_GIB_BUNDLE( entity.gibdef );
401 
402  if ( !IsDefined( gibBundle ) || !IsDefined( gibBundle.gibs ) )
403  {
404  return false;
405  }
406 
407  gibPieceStruct = gibBundle.gibs[ ‪GIB_ANNIHILATE_FLAG ];
408 
409  // Make sure there is some sort of FX to play if we're annihilating the AI.
410  if ( IsDefined( gibPieceStruct ) )
411  {
412  if ( IsDefined( gibPieceStruct.gibfx ) )
413  {
414  ‪_SetGibbed( entity, ‪GIB_ANNIHILATE_FLAG, undefined );
415 
416  entity thread ‪_Annihilate( entity );
417  return true;
418  }
419  }
420 
421  return false;
422 }
423 
424 function ‪CopyGibState( originalEntity, newEntity )
425 {
426  newEntity.gib_state = ‪_GetGibbedState( originalEntity );
427 
428  ‪ToggleSpawnGibs( newEntity, false );
429 
430  ‪ReapplyHiddenGibPieces( newEntity );
431 }
432 
433 function ‪IsGibbed( entity, gibFlag )
434 {
435  return ‪IS_GIBBED( ‪_GetGibbedState( entity ), gibFlag );
436 }
437 
438 function ‪GibHat( entity )
439 {
440  return ‪_GibExtra( entity, ‪GIB_HEAD_HAT_FLAG );
441 }
442 
443 function ‪GibHead( entity )
444 {
445  ‪GibHat( entity );
446 
447  return ‪_GibExtra( entity, ‪GIB_TORSO_HEAD_FLAG );
448 }
449 
450 function ‪GibLeftArm( entity )
451 {
452  // TODO(David Young 5-14-14): Currently AI's don't support both arms getting blown off.
453  if ( ‪IsGibbed( entity, ‪GIB_TORSO_RIGHT_ARM_FLAG ) )
454  {
455  return false;
456  }
457 
458  if ( ‪_GibEntity( entity, ‪GIB_TORSO_LEFT_ARM_FLAG ) )
459  {
461  return true;
462  }
463 
464  return false;
465 }
466 
467 function ‪GibRightArm( entity )
468 {
469  // TODO(David Young 5-14-14): Currently AI's don't support both arms getting blown off.
470  if ( ‪IsGibbed( entity, ‪GIB_TORSO_LEFT_ARM_FLAG ) )
471  {
472  return false;
473  }
474 
476  {
478  entity thread ‪shared::DropAIWeapon();
479  return true;
480  }
481 
482  return false;
483 }
484 
485 function ‪GibLeftLeg( entity )
486 {
487  if ( ‪_GibEntity( entity, ‪GIB_LEGS_LEFT_LEG_FLAG ) )
488  {
490  return true;
491  }
492 
493  return false;
494 }
495 
496 function ‪GibRightLeg( entity )
497 {
498  if ( ‪_GibEntity( entity, ‪GIB_LEGS_RIGHT_LEG_FLAG ) )
499  {
501  return true;
502  }
503 
504  return false;
505 }
506 
507 function ‪GibLegs( entity )
508 {
509  if ( ‪_GibEntity( entity, ‪GIB_LEGS_BOTH_LEGS_FLAG ) )
510  {
513  return true;
514  }
515 
516  return false;
517 }
518 
519 function ‪PlayerGibLeftArm( entity )
520 {
521  if ( IsDefined( entity.body ) )
522  {
523  dir = (1,0,0);
524  ‪_SetGibbed( entity.body, ‪GIB_TORSO_LEFT_ARM_FLAG, dir );
525  }
526 }
527 
528 function ‪PlayerGibRightArm( entity )
529 {
530  if ( IsDefined( entity.body ) )
531  {
532  dir = (1,0,0);
533  ‪_SetGibbed( entity.body, ‪GIB_TORSO_RIGHT_ARM_FLAG, dir );
534  }
535 }
536 
537 function ‪PlayerGibLeftLeg( entity )
538 {
539  if ( IsDefined( entity.body ) )
540  {
541  dir = (1,0,0);
542  ‪_SetGibbed( entity.body, ‪GIB_LEGS_LEFT_LEG_FLAG, dir );
543  }
544 }
545 
546 function ‪PlayerGibRightLeg( entity )
547 {
548  if ( IsDefined( entity.body ) )
549  {
550  dir = (1,0,0);
551  ‪_SetGibbed( entity.body, ‪GIB_LEGS_RIGHT_LEG_FLAG, dir );
552  }
553 }
554 
555 function ‪PlayerGibLegs( entity )
556 {
557  if ( IsDefined( entity.body ) )
558  {
559  dir = (1,0,0);
560  ‪_SetGibbed( entity.body, ‪GIB_LEGS_RIGHT_LEG_FLAG, dir );
561  ‪_SetGibbed( entity.body, ‪GIB_LEGS_LEFT_LEG_FLAG, dir );
562  }
563 }
564 
565 function ‪PlayerGibLeftArmVel( entity, dir )
566 {
567  if ( IsDefined( entity.body ) )
568  {
569  ‪_SetGibbed( entity.body, ‪GIB_TORSO_LEFT_ARM_FLAG, dir );
570  }
571 }
572 
573 function ‪PlayerGibRightArmVel( entity, dir )
574 {
575  if ( IsDefined( entity.body ) )
576  {
577  ‪_SetGibbed( entity.body, ‪GIB_TORSO_RIGHT_ARM_FLAG, dir );
578  }
579 }
580 
581 function ‪PlayerGibLeftLegVel( entity, dir )
582 {
583  if ( IsDefined( entity.body ) )
584  {
585  ‪_SetGibbed( entity.body, ‪GIB_LEGS_LEFT_LEG_FLAG, dir );
586  }
587 }
588 
589 function ‪PlayerGibRightLegVel( entity, dir )
590 {
591  if ( IsDefined( entity.body ) )
592  {
593  ‪_SetGibbed( entity.body, ‪GIB_LEGS_RIGHT_LEG_FLAG, dir );
594  }
595 }
596 
597 function ‪PlayerGibLegsVel( entity, dir )
598 {
599  if ( IsDefined( entity.body ) )
600  {
601  ‪_SetGibbed( entity.body, ‪GIB_LEGS_RIGHT_LEG_FLAG, dir );
602  ‪_SetGibbed( entity.body, ‪GIB_LEGS_LEFT_LEG_FLAG, dir );
603  }
604 }
605 
606 function ‪ReapplyHiddenGibPieces( entity )
607 {
608  if ( !‪_HasGibDef( entity ) )
609  {
610  return;
611  }
612 
613  gibBundle = ‪GET_GIB_BUNDLE( entity.gibdef );
614 
615  foreach ( gibFlag, ‪gib in gibBundle.gibs )
616  {
617  if ( !‪IsGibbed( entity, gibFlag ) )
618  {
619  continue;
620  }
621 
622  if ( IsDefined( ‪gib.gibhidetag ) && IsAlive( entity ) && entity HasPart( ‪gib.gibhidetag ) )
623  {
624  if ( !‪IS_TRUE( entity.skipDeath ) )
625  {
626  // Gighidetag's are only used for hiding hitlocations. If the entity is already dead or skipping death animations don't apply them.
627  entity HidePart( ‪gib.gibhidetag, "", true );
628  }
629  }
630  }
631 }
632 
633 function ‪ShowHiddenGibPieces( entity )
634 {
635  if ( !‪_HasGibDef( entity ) )
636  {
637  return;
638  }
639 
640  gibBundle = ‪GET_GIB_BUNDLE( entity.gibdef );
641 
642  foreach ( gibFlag, ‪gib in gibBundle.gibs )
643  {
644  if ( IsDefined( ‪gib.gibhidetag ) && entity HasPart( ‪gib.gibhidetag ) )
645  {
646  entity ShowPart( ‪gib.gibhidetag, "", true );
647  }
648  }
649 }
650 
651 function ‪ToggleSpawnGibs( entity, shouldSpawnGibs )
652 {
653  if ( !shouldSpawnGibs )
654  {
655  entity.gib_state = ‪_GetGibbedState( entity ) | ‪GIB_TOGGLE_GIB_MODEL_FLAG;
656  }
657  else
658  {
659  entity.gib_state = ‪_GetGibbedState( entity ) & ~‪GIB_TOGGLE_GIB_MODEL_FLAG;
660  }
661 
662  entity ‪clientfield::set( ‪GIB_CLIENTFIELD, entity.gib_state );
663 }
‪GIB_LEGS_LEFT_LEG_GONE_MODEL
‪#define GIB_LEGS_LEFT_LEG_GONE_MODEL(entity)
Definition: gib.gsh:17
‪GIB_CLIENTFIELD_TYPE
‪#define GIB_CLIENTFIELD_TYPE
Definition: gib.gsh:40
‪PlayerGibLegs
‪function PlayerGibLegs(entity)
Definition: gib.gsc:555
‪_GetGibbedTorsoModel
‪function private _GetGibbedTorsoModel(entity)
Definition: gib.gsc:327
‪GIB_TORSO_LEFT_ARM_GONE_MODEL
‪#define GIB_TORSO_LEFT_ARM_GONE_MODEL(entity)
Definition: gib.gsh:10
‪ReapplyDestructedPieces
‪function ReapplyDestructedPieces(entity)
Definition: destructible_character.gsc:14
‪GET_GIB_BUNDLES
‪#define GET_GIB_BUNDLES
Definition: gib.gsh:57
‪GIB_LEGS_RIGHT_LEG_FLAG
‪#define GIB_LEGS_RIGHT_LEG_FLAG
Definition: gib.gsh:28
‪_IsDefaultPlayerGib
‪function private _IsDefaultPlayerGib(gibPieceFlag, gibStruct)
Definition: gib.gsc:20
‪_GibEntity
‪function private _GibEntity(entity, gibFlag)
Definition: gib.gsc:239
‪PlayerGibRightLegVel
‪function PlayerGibRightLegVel(entity, dir)
Definition: gib.gsc:589
‪_GibEntityInternal
‪function private _GibEntityInternal(entity, gibFlag)
Definition: gib.gsc:256
‪main
‪function autoexec main()
Definition: gib.gsc:42
‪PlayerGibRightArm
‪function PlayerGibRightArm(entity)
Definition: gib.gsc:528
‪DropAIWeapon
‪function DropAIWeapon()
Definition: shared.gsc:226
‪DestructRightArmPieces
‪function DestructRightArmPieces(entity)
Definition: destructible_character.gsc:17
‪GIB_TORSO_RIGHT_ARM_FLAG
‪#define GIB_TORSO_RIGHT_ARM_FLAG
Definition: gib.gsh:25
‪GibLeftArm
‪function GibLeftArm(entity)
Definition: gib.gsc:450
‪GIB_TORSO_RIGHT_ARM_GONE_MODEL
‪#define GIB_TORSO_RIGHT_ARM_GONE_MODEL(entity)
Definition: gib.gsh:9
‪PlayerGibRightLeg
‪function PlayerGibRightLeg(entity)
Definition: gib.gsc:546
‪GIB_ANNIHILATE_FLAG
‪#define GIB_ANNIHILATE_FLAG
Definition: gib.gsh:22
‪GIB_LEGS_UNDAMAGED_MODEL
‪#define GIB_LEGS_UNDAMAGED_MODEL(entity)
Definition: gib.gsh:15
‪Throttle
Definition: throttle_shared.gsc:15
‪VERSION_SHIP
‪#define VERSION_SHIP
Definition: version.gsh:36
‪GIB_CLIENTFIELD
‪#define GIB_CLIENTFIELD
Definition: gib.gsh:36
‪_HasGibDef
‪function private _HasGibDef(entity)
Definition: gib.gsc:352
‪GIB_HEAD_HAT_FLAG
‪#define GIB_HEAD_HAT_FLAG
Definition: gib.gsh:23
‪GIB_CLIENTFIELD_BITS_ACTOR
‪#define GIB_CLIENTFIELD_BITS_ACTOR
Definition: gib.gsh:38
‪SET_GIBBED_PLAYER
‪#define SET_GIBBED_PLAYER(gib_state, gib_flag, yawbits)
Definition: gib.gsh:52
‪IS_TRUE
‪#define IS_TRUE(__a)
Definition: shared.gsh:251
‪PlayerGibLeftLeg
‪function PlayerGibLeftLeg(entity)
Definition: gib.gsc:537
‪GIB_LEGS_BOTH_LEGS_FLAG
‪#define GIB_LEGS_BOTH_LEGS_FLAG
Definition: gib.gsh:30
‪ReapplyHiddenGibPieces
‪function ReapplyHiddenGibPieces(entity)
Definition: gib.gsc:606
‪Annihilate
‪function Annihilate(entity)
Definition: gib.gsc:393
‪gib
‪function gib(attacker)
Definition: _amws.gsc:1072
‪GibHat
‪function GibHat(entity)
Definition: gib.gsc:438
‪DestructRightLegPieces
‪function DestructRightLegPieces(entity)
Definition: destructible_character.gsc:18
‪_GibExtraInternal
‪function private _GibExtraInternal(entity, gibFlag)
Definition: gib.gsc:193
‪GIB_UNDAMAGED_FLAG
‪#define GIB_UNDAMAGED_FLAG
Definition: gib.gsh:20
‪GibRightLeg
‪function GibRightLeg(entity)
Definition: gib.gsc:496
‪GibLeftLeg
‪function GibLeftLeg(entity)
Definition: gib.gsc:485
‪GIB_DIR_BITS
‪#define GIB_DIR_BITS
Definition: gib.gsh:33
‪PlayerGibLeftArm
‪function PlayerGibLeftArm(entity)
Definition: gib.gsc:519
‪DestructLeftArmPieces
‪function DestructLeftArmPieces(entity)
Definition: destructible_character.gsc:15
‪GIB_TORSO_HEAD_GONE_MODEL
‪#define GIB_TORSO_HEAD_GONE_MODEL(entity)
Definition: gib.gsh:12
‪IS_BODY_UNDAMAGED
‪#define IS_BODY_UNDAMAGED(gib_state)
Definition: gib.gsh:47
‪PlayerGibLeftArmVel
‪function PlayerGibLeftArmVel(entity, dir)
Definition: gib.gsc:565
‪GIB_LEGS_LEFT_LEG_FLAG
‪#define GIB_LEGS_LEFT_LEG_FLAG
Definition: gib.gsh:29
‪PlayerGibRightArmVel
‪function PlayerGibRightArmVel(entity, dir)
Definition: gib.gsc:573
‪_GetGibExtraModel
‪function private _GetGibExtraModel(entity, gibFlag)
Definition: gib.gsc:164
‪_GetGibbedState
‪function private _GetGibbedState(entity)
Definition: gib.gsc:317
‪ToggleSpawnGibs
‪function ToggleSpawnGibs(entity, shouldSpawnGibs)
Definition: gib.gsc:651
‪_GetGibbedLegModel
‪function private _GetGibbedLegModel(entity)
Definition: gib.gsc:295
‪GIB_HEAD_MODEL
‪#define GIB_HEAD_MODEL(entity)
Definition: gib.gsh:5
‪_GibExtra
‪function private _GibExtra(entity, gibFlag)
Definition: gib.gsc:176
‪ShowDestructedPieces
‪function ShowDestructedPieces(entity)
Definition: destructible_character.gsc:13
‪GIB_TORSO_UNDAMAGED_MODEL
‪#define GIB_TORSO_UNDAMAGED_MODEL(entity)
Definition: gib.gsh:8
‪fields_equal
‪function private fields_equal(field_a, field_b)
Definition: gib.gsc:11
‪_HasGibPieces
‪function private _HasGibPieces(entity, gibFlag)
Definition: gib.gsc:357
‪set
‪function set(str_field_name, n_value)
Definition: clientfield_shared.gsc:34
‪GIB_TORSO_LEFT_ARM_FLAG
‪#define GIB_TORSO_LEFT_ARM_FLAG
Definition: gib.gsh:26
‪GIB_CLIENTFIELD_BITS_PLAYER
‪#define GIB_CLIENTFIELD_BITS_PLAYER
Definition: gib.gsh:39
‪ShowHiddenGibPieces
‪function ShowHiddenGibPieces(entity)
Definition: gib.gsc:633
‪GIB_LEGS_RIGHT_LEG_GONE_MODEL
‪#define GIB_LEGS_RIGHT_LEG_GONE_MODEL(entity)
Definition: gib.gsh:16
‪IS_GIBBED
‪#define IS_GIBBED(gib_state, gib_flag)
Definition: gib.gsh:48
‪CopyGibState
‪function CopyGibState(originalEntity, newEntity)
Definition: gib.gsc:424
‪IsGibbed
‪function IsGibbed(entity, gibFlag)
Definition: gib.gsc:433
‪PlayerGibLegsVel
‪function PlayerGibLegsVel(entity, dir)
Definition: gib.gsc:597
‪register
‪function register()
Definition: _ai_tank.gsc:126
‪_SetGibbed
‪function private _SetGibbed(entity, gibFlag, gibDir)
Definition: gib.gsc:374
‪GibLegs
‪function GibLegs(entity)
Definition: gib.gsc:507
‪DestructLeftLegPieces
‪function DestructLeftLegPieces(entity)
Definition: destructible_character.gsc:16
‪GET_GIB_BUNDLE
‪#define GET_GIB_BUNDLE(_gib_def)
Definition: gib.gsh:56
‪GibRightArm
‪function GibRightArm(entity)
Definition: gib.gsc:467
‪GibHead
‪function GibHead(entity)
Definition: gib.gsc:443
‪GIB_LEGS_NO_LEGS_MODEL
‪#define GIB_LEGS_NO_LEGS_MODEL(entity)
Definition: gib.gsh:18
‪SET_GIBBED
‪#define SET_GIBBED(gib_state, gib_flag)
Definition: gib.gsh:51
‪GIB_TORSO_HEAD_FLAG
‪#define GIB_TORSO_HEAD_FLAG
Definition: gib.gsh:24
‪_Annihilate
‪function private _Annihilate(entity)
Definition: gib.gsc:156
‪GIB_HAT_MODEL
‪#define GIB_HAT_MODEL(entity)
Definition: gib.gsh:4
‪PlayerGibLeftLegVel
‪function PlayerGibLeftLegVel(entity, dir)
Definition: gib.gsc:581
‪GIB_TOGGLE_GIB_MODEL_FLAG
‪#define GIB_TOGGLE_GIB_MODEL_FLAG
Definition: gib.gsh:21