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;
7 #insert scripts\shared\shared.gsh;
8 #insert scripts\shared\version.gsh;
9 #insert scripts\shared\ai\systems\gib.gsh;
13 if ( !isDefined(field_a) && !isDefined(field_b))
15 if ( isDefined(field_a) && isDefined(field_b) && field_a == field_b )
22 if ( !
fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibdynentfx , gibStruct.gibdynentfx ) )
26 if ( !
fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibfxtag, gibStruct.gibfxtag ) )
30 if ( !
fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibfx, gibStruct.gibfx ) )
34 if ( !
fields_equal( level.playerGibBundle.gibs[gibPieceFlag].gibtag, gibStruct.gibtag ) )
68 processedBundles = [];
70 if ( SessionModeIsMultiplayerGame() )
72 level.playerGibBundle = SpawnStruct();
73 level.playerGibBundle.gibs = [];
74 level.playerGibBundle.name =
"default_player";
107 foreach ( definitionName, definition
in gibDefinitions )
109 gibBundle = SpawnStruct();
111 gibBundle.name = definitionName;
112 default_player =
false;
114 foreach ( gibPieceFlag, gibPieceName
in gibPieceLookup )
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" );
127 default_player =
true;
130 gibBundle.gibs[ gibPieceFlag ] = gibStruct;
133 if ( SessionModeIsMultiplayerGame() && default_player )
135 processedBundles[ definitionName ] = level.playerGibBundle;
139 processedBundles[ definitionName ] = gibBundle;
144 level.scriptbundles[
"gibcharacterdef" ] = processedBundles;
146 if ( !IsDefined( level.gib_throttle ) )
150 [[ level.gib_throttle ]]->Initialize( 2, 0.2 );
154 #namespace GibServerUtils;
158 if ( IsDefined( entity ) )
171 AssertMsg(
"Unable to find gib model." );
197 if ( entity.gib_time !== GetTime() )
199 [[ level.gib_throttle ]]->WaitInQueue( entity );
202 if ( !IsDefined( entity ) )
207 entity.gib_time = GetTime();
228 if ( IsDefined( gibModel ) )
230 entity Detach( gibModel,
"" );
260 if ( entity.gib_time !== GetTime() )
262 [[ level.gib_throttle ]]->WaitInQueue( entity );
265 if ( !IsDefined( entity ) )
270 entity.gib_time = GetTime();
283 entity Detach( legModel );
301 if ( rightLegGibbed && leftLegGibbed)
305 else if ( rightLegGibbed )
309 else if ( leftLegGibbed )
319 if ( IsDefined( entity.gib_state ) )
321 return entity.gib_state;
333 if ( rightArmGibbed && leftArmGibbed )
340 else if ( rightArmGibbed )
344 else if ( leftArmGibbed )
354 return IsDefined( entity.gibdef );
359 hasGibPieces =
false;
361 entity.gib_state =
SET_GIBBED( gibState, gibFlag );
369 entity.gib_state = gibState;
376 if ( IsDefined( gibDir ) )
378 angles = VectortoAngles( gibDir );
388 entity.gibbed =
true;
402 if ( !IsDefined( gibBundle ) || !IsDefined( gibBundle.gibs ) )
410 if ( IsDefined( gibPieceStruct ) )
412 if ( IsDefined( gibPieceStruct.gibfx ) )
521 if ( IsDefined( entity.body ) )
530 if ( IsDefined( entity.body ) )
539 if ( IsDefined( entity.body ) )
548 if ( IsDefined( entity.body ) )
557 if ( IsDefined( entity.body ) )
567 if ( IsDefined( entity.body ) )
575 if ( IsDefined( entity.body ) )
583 if ( IsDefined( entity.body ) )
591 if ( IsDefined( entity.body ) )
599 if ( IsDefined( entity.body ) )
615 foreach ( gibFlag,
gib in gibBundle.gibs )
622 if ( IsDefined(
gib.gibhidetag ) && IsAlive( entity ) && entity HasPart(
gib.gibhidetag ) )
624 if ( !
IS_TRUE( entity.skipDeath ) )
627 entity HidePart(
gib.gibhidetag,
"",
true );
642 foreach ( gibFlag,
gib in gibBundle.gibs )
644 if ( IsDefined(
gib.gibhidetag ) && entity HasPart(
gib.gibhidetag ) )
646 entity ShowPart(
gib.gibhidetag,
"",
true );
653 if ( !shouldSpawnGibs )